Finally, write audio appsin JavaScript

Simple, functional, declarative. Develop and share native audio applications with Elementary Audio, and integrate your own stack with custom embedding and extending.

Intro Video

Writing audio apps can be easy

Save time, avoid bugs, and prototype the way you ship. Watch the intro video to see how Elementary Audio can change the way that we write audio apps.

Want to see more? View the full playlist for examples and tutorials.

Build faster

A fundamentally different way to write audio DSP

Elementary brings the functional, reactive programming model to a world dominated by imperative, object oriented code. That means less headache, faster iteration, and unimpaired creativity.


The Elementary engine can be ported to any number of applications. Out of the box, we support audio plugins, command line apps via Node.js, and web audio.


Compose signal processing blocks as pure functions, declaratively, the way it should be.


Write your signal processing graph once, as a function of your application state, and Elementary will handle the rest.

50+ Built-in Blocks

Assemble your signal chain from a wide (and growing!) array of highly optimized, built-in native blocks.

Embed Anywhere

VST, VST3, AU, AAX, embedded linux, no problem. Write your app in Elementary, embed it anywhere.


Extend the native built-in library with your custom processors in C++. See more in embedding and extending.

Frequently asked questions

Can I write a plugin with Elementary?

Of course! Check out our Plugins page to learn about the Elementary Plugin Dev Kit. You can also use the embedded C++ SDK to easily integrate the Elementary Runtime if you need additional customization.

Is it fast enough?

Absolutely. Under the hood, Elementary is composed of a wide array of highly optimized, native audio processing blocks. On top, Elementary is built on Node.js, a technology proven across multiple domains for high performance applications.

How do I add an interface?

There are many ways! Using the Plugin Dev Kit, you can write an interface using standard web technology. If you're using the CLI, you can consider interfaces via Electron, node-gui, or a website. Finally, of course, if you need maximum flexibility, you can use the embedded C++ SDK to integrate the runtime into whatever interface stack you need.