WaveScope + WaveScript


  1. Bullet (??)  New release coming soonish: Version 0.2.X.

    This release will bring several improvements.  Support has been dropped for some old backends (Regiment, XStream).  New features include better support for marshaling and distributed programming with sockets.

  1. Bullet(4/2011)  WaveScript moves to github hosting

    If you’re looking for the latest version of the WaveScript compiler you can find  it here:  https://github.com/rrnewton/WaveScript

  1. Bullet (9/01/2009)  ICFP Talk on Computer Vision with WaveScript

    Ryan gave a talk about WaveScript at ICFP (the international conference on functional programming).  You can see it here.

  1. Bullet (6/15/2009)  Ryan Newton moves to Intel

    The chief architect of the WaveScope/WaveScript system has moved to Intel.  The system will continue to be actively developed and supported, and in the future it may grow connections with Intel Concurrent Collections, which Ryan is also working on...

  1. Bullet (11/12/2008)  Release Version 0.1.

    This version adds extensible records to the language. Binary packages available for Debian/Ubuntu here http://cs.indiana.edu/~rrnewton/wavescope/debian (you can add that URL to apt's sources.list). And of course you can still check out the source or get nightly snapshots here http://cs.indiana.edu/~rrnewton/wavescope/source_snapshots.


Some devices we have programmed using WaveScript:

Project Description

WaveScope is a system for developing distributed, high-rate applications that need to process streams of data from various sources (e.g., sensors) using a combination of signal processing and database (event stream processing) operations. The execution environment for these applications ranges from embedded sensor nodes to multicore/multiprocessor servers.

WaveScript is the programming language used to develop WaveScope applications. It is a high-level, functional, stream-processing language that aims to deliver uncompromising performance. WaveScript programs execute in parallel on multiple cores, or distributed across a network. Its compiler uses aggressive partial evaluation techniques to remove abstractions and reduce the source program to a graph of stream operators.  The WaveScript compiler evolved out of earlier work on the Regiment language.

The WaveScript compiler supports multiple backends generating code for several languages. These were developed in the course of research and experimentation, but the following backends are currently active:

  1. BulletFirst, the flagship WaveScript backend offering the best performance generates native code using a C compiler backend.

  2. BulletSecond, an embedding of WaveScript in Scheme is included with the compiler and enables low-latency compile-link-load of new programs.

  3. BulletThird, because WaveScript is similar to ML, translation is straightforward and WaveScript can generate code for SML (MLton) or OCaml.

Also, two additional backends (generating TinyOS and JavaME code) are not actively being used, but can be revived and extended when the need arises.

Download Wavescript

Install Wavescript

In addition to the download links on the right, which correspond to official releases, the source code is available via github.   Also, snapshots of the repository are posted here.

    Binary:  Distribution packages should install automagically; then refer to the README file for quick-start instructions, and finally the manual.

    Source: WaveScript is written in R6RS Scheme.  Once you have the source, follow the directions in the  INSTALL file to acquire the relevant dependencies and build the compiler.  Check the regression tests to make sure you get a validated revision.


See the manual here (html) or as a pdf.




We have worked or are working on several applications using the WaveScope/WaveScript platform.

  1. Acoustic localization of animals (marmots) in the wild (deployed)

  2. Detection of birds using computer vision.

  3. Detection of leaks in water pipelines.

  4. Seizure onset detection using EEG signals.

  5. Financial stock tick processing distributed over the internet

Former Contributors

(PhD) Stan Rost

(PhD) Arvind Thiagarajan
(MEng) Michael Craig


Michael Allen
(University of Coventry, UCLA)

(PhD) Yuan Mei

  1. Experience Report: Embedded, Parallel Computer-Vision with a Functional DSL.
    Ryan Newton, Teresa Ko.  ICFP 2009.

  2. Wishbone: Profile-based Partitioning for Sensornet Applications.
    Ryan Newton, Sivan Toledo, Lewis Girod, Hari Balakrishnan, Samuel Madden.   
    NSDI 2009.

  3. Design and Evaluation of a Compiler for Embedded Stream Programs.
    Ryan Newton, Lewis Girod, Michael Craig, Greg Morrisett, Samuel Madden.
    LCTES 2008.

  4. The Pothole Patrol: Using a Mobile Sensor Network for Road Surface Monitoring.
    Jakob Eriksson, Lewis Girod, Bret Hull, Ryan Newton, Samuel Madden, Hari Balakrishnan.  Mobisys 2008.

  5. WaveScript: A Case-Study in Applying a Distributed Stream-Processing Language.
    Ryan Newton, Lewis Girod, Michael Craig, Samuel Madden, Greg Morrisett, CSAIL Technical Report MIT-CSAIL-TR-2008-005, January 2008.

  6. VoxNet: An Interactive, Rapidly-Depoloyable Acoustic Monitoring Platform.
    Mike Allen, Lewis Girod, Ryan Newton, Daniel T. Blumstein, Deborah Estrin.
    IPSN 2008, SPOTS track.

  7. XStream: A Signal-Oriented Data Stream Management System. Lewis Girod, Yuan Mei, Ryan Newton, Stanislav Rost, Arvind Thiagarajan, Hari Balakrishnan, Samuel Madden. ICDE 2008.

  8. An Adaptive Indexing Scheme for Stored Data in Sensor Networks (poster paper). Thomer Gil, Samuel Madden.  ICDE 2007.

  9. The Case for a Signal-Oriented Data Stream Management System. Lewis Girod, Yuan Mei, Ryan Newton, Stanislav Rost, Arvind Thiagarajan, Hari Balakrishnan, Samuel Madden.  CIDR 2007.


Supported by NSF under grants DBI-0754662, CNS-0720079, and CNS-0520032.