Elementary is a JavaScript runtime based on Node.js for writing native audio applications, as well as a library and framework for composing audio signal processes. Elementary aims to lower the barrier to entry into the audio application space, eliminate the gap between prototyping and production, and bring the functional reactive programming model to dsp.

Watch the intro video for the full story.


This project is beta status, and supports macOS/Linux only. Installing and running on other platforms will not work. Support for other platforms, notably Windows, is planned for the near future.

$ npm install @nick-thompson/elementary

Elementary has essentially two components: the runtime, and the library.

The runtime is a native binary application much like Node.js itself, and is available inside the npm package. To install elementary globally at your command line, you can always npm install -g @nick-thompson/elementary, however, the preferred method is to install as a local dependency and invoke the local binary at ./node_modules/.bin/elementary or with npx elementary (more about npx here). This way, the library component and the runtime component are always of matching versions.

The library component is basically the rest of the npm package, and is what you get when you write require('@nick-thompson/elementary'). The library, explained in detail in the reference section, offers a set of convenience APIs and a growing set of library functions to help you construct your audio signal chain.


In the GitHub repository you'll find a small set of example projects aiming to provide a brief introduction to various functionality. Each example can be invoked on its own:

$ cd examples/00_HelloSine
$ npm install
$ npm start

And of course you can open these example files, poke around, and edit as you like!


The Elementary library available on npm and the command line application provided therein may be used under the terms of the AGPLv3, or a commercial license, at your choosing. Please refer to the full license text or contact us about a commercial license.

If you're interested in embedding or extending the Elementary runtime, there is an additional Embedded Runtime SDK available under a commercial license. For more information, please get in contact!