Need help with vst-js?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

169 Stars 16 Forks 87 Commits 24 Opened issues


native node addon that allows for instantiation of natively installed VST3 audio plugins

Services available


Need anything else?

Contributors list

# 300,511
9 commits

What Is It?

vst.js is a native NodeJS addon that can be used to launch VST3 plugins (including GUI interface) in a separate process.


This library is in an extremely experimental state. Large portions of functionally have yet to be implemented and it is currently only buildable for OSX devices, although since everything is built with crossplatform libraries, building for other operating systems shouldn't be too difficult.

Additionally, If you have any criticisms on my approach or code quality I'd love to hear them.


Install CMake

vst.js uses CMake as its build system and requires it be present on your system before installing. On a Mac the easiest way to install CMake is via homebrew: ```

brew install cmake ```

Install Boost 3.6+

vst.js makes use of the popular Boost C++ Framework. It expects that version 3.6 or higher is available on your system prior to installation. The easiset way to install the Boost framework on a Mac is via homebrew: ```

brew install boost ```

Acquire the Steinberg VST3 SDK (3.6.7+)

Due to licensing concerns I am currently not bundling the VST3 SDK along with this project. You will need to download the SDK from Steinbergs's Website and place it at


You can also specify the installed location of the VST3 SDK by setting a the

environment variable prior to installation

NPM Install

Once all the above dependencies have been satisfied you can install via npm:

> npm install vstjs

Usage Examples

The example below will play back an audio file via node-web-audio-api, and manipulate the audio via a VST3 plugin

const { AudioContext } = require('web-audio-api')
const Speaker = require('speaker')
const fs = require('fs')
const path = require('path')
const vstjs = require('vstjs')

const bufferSize = 512 const numChannels = 2 const pluginPath = process.argv[2] const filePath = process.argv[3]

const pluginHost = vstjs.launchPlugin(pluginPath) pluginHost.start()

// setup webaudio stuff const audioContext = new AudioContext() const sourceNode = audioContext.createBufferSource() const scriptNode = audioContext.createScriptProcessor(bufferSize, numChannels, numChannels)

audioContext.outStream = new Speaker({ channels: audioContext.format.numberOfChannels, bitDepth: audioContext.format.bitDepth, sampleRate: audioContext.sampleRate, })

sourceNode.connect(scriptNode) scriptNode.connect(audioContext.destination)

scriptNode.onaudioprocess = function onaudioprocess(audioProcessingEvent) { const inputBuffer = audioProcessingEvent.inputBuffer const channels = [...Array(numChannels).keys()] .map(i => audioProcessingEvent.inputBuffer.getChannelData(i))

// process audio block via pluginHost pluginHost.processAudioBlock(numChannels, bufferSize, channels) audioProcessingEvent.outputBuffer = inputBuffer }

fs.readFile(filePath, (err, fileBuf) => { console.log('reading file..') if (err) throw err audioContext.decodeAudioData(fileBuf, (audioBuffer) => { sourceNode.buffer = audioBuffer sourceNode.start(0) }, (e) => { throw e }) })

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.