Audio Plugins

The small pieces of software that shape almost every sound you hear — the equalisers, compressors, reverbs, and synthesisers that live inside a digital audio workstation. A complete tour of their history, the categories engineers build, the formats that carry them, the frameworks that make them, and seven working examples you can play in the browser.

HistoryTypesTechnologiesFrameworksJUCE
Begin the tour ↓

0What is an audio plugin?

An audio plugin is a self-contained software module that a host application loads at run time to process or generate audio. The host — usually a digital audio workstation (DAW) such as Ableton Live, Logic Pro, Cubase, Pro Tools, or Reaper — owns the audio hardware, the transport, and the mix graph; the plugin is dropped into that graph to do one job: filter a signal, squeeze its dynamics, drench it in reverberation, or synthesise notes from MIDI.

Conceptually a plugin is a function evaluated on a stream of samples. The host hands it a small block of input samples together with the current parameter values, and the plugin returns a block of output samples. An effect maps audio in to audio out; an instrument maps MIDI in to audio out. Everything else — the knobs, the meters, the saved presets — is machinery around that central mapping.

Track / Input→ EQ→ Compressor→ Saturation→ Delay→ Mix Bus

A typical insert chain: plugins process the signal in series, each feeding the next.

Two facts shape everything about how plugins are written. First, they run on the real-time audio thread: the host calls the plugin's process function every few milliseconds, and it must always finish before the soundcard needs the next buffer or the listener hears a click. That callback may not lock a mutex, allocate memory, touch a file, or block on anything — the discipline that governs all serious audio code. Second, the plugin must conform to a format: a binary and API contract (VST3, Audio Unit, AAX, CLAP…) that tells the host how to find it, negotiate its buses, enumerate its parameters, and call it safely.

Try it — a plugin is just f(x)

Below, a short loop is synthesised in your browser and passed through a trivial "plugin" — a one-knob tilt filter with a bypass. This is the whole idea in miniature: a source, a processor with a parameter, and an A/B comparison. The seven example repositories at the end build the real thing for each effect family.

press play — output waveform
idle

All audio on this site is generated or processed live in the browser with the Web Audio API — nothing is streamed from a file. It is a faithful analogue of what a native plugin does inside a DAW, running on the same principles.

1A short history

The plugin is the child of two older worlds colliding: the rack of outboard studio hardware, and the general-purpose computer fast enough to emulate it in real time.

For most of the twentieth century, signal processing meant hardware: passive Pultec equalisers, optical LA-2A compressors, EMT plate reverbs, tape echoes, and Moog modular synthesisers — each a physical box patched into the console. Digital signal processing arrived in studios first as expensive dedicated hardware (the Lexicon 224, the Publison and AMS units, the Sony DRE) and then, in the late 1980s, as DSP-card systems: Digidesign's Sound Tools and then Pro Tools ran effects on Motorola 56000 chips mounted inside the computer. The processing was still on custom silicon, but the routing and the user interface had moved into software.

The decisive break came in 1996, when Steinberg opened the Virtual Studio Technology (VST) interface in Cubase and — crucially — published the SDK so that anyone could write an effect that ran on the host CPU. Native processing, an open API, and ever-faster processors turned a specialist hardware market into a software one. Within a decade the mixing desk, the outboard rack, and the synthesiser had all been redrawn as windows on a screen.

1987
Digidesign Sound Tools — the first mainstream hard-disk recording/editing system for the Mac. Effects run on dedicated DSP hardware; it evolves into Pro Tools (1991) with its TDM plugin bus on 56k DSP cards.
1996
Steinberg VST 1.0 ships in Cubase 3.02, with a free SDK. Native (host-CPU) effects become possible for everyone. The first bundled plugins — including a reverb and the Espacial — define the template. Microsoft's DirectX plugins (Cakewalk) appear on Windows around the same time.
1999
VST 2.0 adds MIDI and thereby VST instruments (VSTi). Native Instruments' Reaktor, Propellerhead's ReBirth/Reason era, and a wave of software synthesisers follow. Steinberg's Neon is the first VSTi.
2002–2005
Apple ships Audio Units (AU) as part of Core Audio in Mac OS X, tightly integrated with Logic and GarageBand. Digidesign replaces TDM's host API with RTAS for native Pro Tools processing. Cross-platform frameworks emerge to target them all at once.
2004–2008
JUCE (Julian Storer) matures into the dominant C++ framework for cross-format plugins. UAD and Waves build businesses on meticulous hardware emulations; convolution reverb (Altiverb) and amp-sim modelling go mainstream.
2008
VST3 — a ground-up redesign: sample-accurate automation, flexible bus/side-chain arrangements, silence flags, and a cleaner component model separating processor from editor.
2011–2018
AUv3 brings sandboxed Audio Units to iOS and macOS. Avid replaces RTAS with AAX (native and DSP/HDX) for Pro Tools. Roli acquires JUCE (2014); the plugin world is now overwhelmingly software, cross-platform, and native-CPU.
2022
CLAP (CLever Audio Plugin) — an open, MIT-licensed format from Bitwig and u-he — arrives with modern threading, polyphonic per-note modulation and per-voice parameter control, quickly gaining host support. The same year, browser Web Audio and WebAssembly make plugins that run on this very page practical.
The plugin did to the recording studio what the spreadsheet did to the accountant's desk: it did not merely digitise the tools, it dissolved the boundary between the tool and the workspace, so that an unlimited rack could be conjured and rearranged at will.

2Formats — the technologies that carry a plugin

A format is the contract between plugin and host: how the binary is packaged, how the host discovers and instantiates it, how buses and parameters are described, and how the process callback is invoked. Choosing which to support is the first engineering decision; most developers target several through one framework.

FormatOwnerSincePlatformsNotes
VST2Steinberg1999Win / macOS / LinuxUbiquitous for two decades; SDK licence closed in 2018, deprecated but still hosted everywhere.
VST3Steinberg2008Win / macOS / LinuxCurrent standard. Sample-accurate automation, flexible buses, silence flags. Dual GPLv3 / proprietary licence.
Audio Unit (AU / v2)Apple2002macOSNative to Core Audio; required by Logic & GarageBand. Validated by auval.
AUv3Apple2015macOS / iOSApp-extension model, sandboxed; the only plugin format on iOS.
AAXAvid2011Win / macOSPro Tools only; native and DSP (HDX) variants. SDK requires Avid registration; signed builds.
CLAPBitwig / u-he2022Win / macOS / LinuxOpen MIT licence, modern threading, per-note/polyphonic modulation. Fast-growing host support.
LV2Open community2008mostly LinuxSuccessor to LADSPA/DSSI; extensible via RDF "features". The Linux native standard.
LADSPA / DSSIOpen community2000LinuxMinimalist early Linux APIs; largely superseded by LV2.
RTAS / TDMDigidesign1990sWin / macOSLegacy Pro Tools formats, replaced by AAX.
Standalone——allNot a plugin at all: the same DSP wrapped as its own application talking directly to the audio device.

Beneath the differences, every format exposes the same handful of ideas: a way to enumerate parameters (with ranges, units, and automation), a bus layout (mono/stereo/side-chain in and out), a process callback operating on sample blocks, and a mechanism to save and restore state so a session recalls exactly what you heard. A good framework hides the format-specific plumbing behind one API, so you write the DSP once and it compiles to VST3, AU, AAX, CLAP and Standalone together.

The web analogue used throughout this site — Web Audio's AudioWorkletNode — is itself a "format": a process callback on a dedicated audio thread, parameters delivered as automation curves, and a message port for the GUI. The parallels to VST3/AU are exact.

3The types commonly built

Almost every plugin falls into one of a dozen families. The seven with a green arrow have a full working example in this collection — click through to play them.

Effects — process audio in

Pitch & Time

Pitch correction, harmonisers, time-stretching, formant shifting — phase-vocoder and PSOLA territory.

Spectral

FFT-domain processors: spectral gates, de-noisers, freeze, "paint" resynthesis, vocoders.

Utility & Metering

Gain, pan, stereo width, dither, LUFS/loudness meters, spectrum analysers, correlation — the unglamorous essentials.

Instruments — generate audio from MIDI

Samplers & ROMplers

Play back and manipulate recorded audio mapped across a keyboard; multisampling, round-robins, key/velocity zones.

Drum machines

Step-sequenced or pad-triggered percussion instruments, often blending samples with synthesis.

MIDI & control

MIDI effects

Arpeggiators, chord generators, scale quantisers, note repeaters — they transform MIDI, not audio.

Modulators

LFOs, envelope followers, macro controllers routed to other plugins' parameters (host-dependent).

Analysis / sidechain sources

Tuners, key detectors, and triggers that drive other processors.

4Anatomy of a plugin

Whatever the format or framework, a plugin has the same four parts. Understanding the boundaries between them — especially the wall between the audio thread and everything else — is the whole craft.

1 · The processor (DSP core)

The real-time heart. A processBlock callback receives an audio buffer and the current parameters and computes the output, sample by sample or block by block. No allocation, no locks, no I/O.

2 · Parameters

The automatable, host-visible controls, each with a range, unit, and default. They cross the thread boundary atomically and are usually smoothed to avoid zipper noise.

3 · State

The full snapshot saved with a session or a preset: parameters plus any extra data (loaded IRs, curves). Serialised to and from the host as an opaque blob.

4 · The editor (GUI)

The optional window of knobs, meters, and displays, running on the message thread. It observes parameters and sends changes back — never touching the DSP data directly.

The real-time contract

The audio callback runs under a hard deadline. With a 48 kHz sample rate and a 128-sample buffer, the host expects the next block roughly every $128/48000 \approx 2.67$ ms, forever, without exception. Miss it and the listener hears a click or dropout. The rules that follow are absolute inside the callback:

$$t_{\text{deadline}} = \frac{N_{\text{buffer}}}{f_s} \quad\Rightarrow\quad \frac{128}{48000}\,\text{s} \approx 2.67\ \text{ms}$$

Everything the DSP does — every biquad, every delay tap, every oscillator — is a small, predictable amount of arithmetic chosen to fit comfortably inside that window even with dozens of instances running at once.

5Frameworks — how plugins are actually built

Nobody writes VST3, AU, AAX and CLAP boilerplate by hand for each product. A framework provides the format wrappers, a DSP library, a GUI toolkit, and a build system, so you write the plugin once and export to all targets.

FrameworkLanguageTargetsCharacter
JUCEC++VST3 · AU · AUv3 · AAX · CLAP* · Standalone · LV2The industry default. Huge dsp module, GUI toolkit, and the AudioProcessor abstraction. Dual GPL/commercial. Full tutorial →
iPlug2C++VST2/3 · AU · AAX · Web (WAM)Lean, permissive (open source), popular for indie plugins; can compile to the browser.
DPFC++VST2/3 · AU · CLAP · LV2 · JACKDISTRHO Plugin Framework — minimal, Linux-friendly, ISC-licensed.
nih-plugRustVST3 · CLAP · StandaloneModern, memory-safe Rust framework with first-class CLAP support.
FaustFaust DSLvia architectures → allFunctional DSP language; the compiler emits C++/Wasm and plugin wrappers. Superb for algorithm design.
CmajorCmajor DSLJIT · C++ · plugin exportA newer language from JUCE's authors aimed squarely at audio DSP, JIT and AOT.
RNBO (Max)visual → C++VST · AU · Web · embeddedCycling '74's patch-to-code export; design visually, ship native.
VST3 SDK / AU SDKC++ / Obj-Cone format eachThe raw vendor SDKs, wrapped by all the above.

*CLAP support in JUCE is available via the community clap-juce-extensions.

For nearly all newcomers the answer is JUCE: it has the largest community, the most complete DSP and GUI libraries, and it targets every mainstream format from a single C++ codebase. This collection includes a dedicated in-depth JUCE tutorial, and every example plugin below shows its DSP written both in browser JavaScript (so you can hear it here) and in idiomatic JUCE C++ (so you can build it for real).

6The DSP building blocks

A surprisingly small toolbox of primitives, combined and tuned, produces the entire catalogue of effects and instruments. Each links to the example where it does the work.

The sample loop

At bottom, all of it is a loop over samples. A processor keeps some state (past inputs and outputs, buffer contents, oscillator phase) and, for each incoming sample $x[n]$, emits $y[n]$ as a function of the input and that state. A linear time-invariant block is fully described by a difference equation:

$$y[n] = \sum_{k=0}^{M} b_k\,x[n-k] \;-\; \sum_{k=1}^{N} a_k\,y[n-k]$$

whose behaviour is captured by the transfer function $H(z) = \dfrac{\sum_k b_k z^{-k}}{1+\sum_k a_k z^{-k}}$, evaluated on the unit circle $z=e^{j\omega}$ to read off the frequency response. From this one relation flow filters, equalisers, comb-based delays and reverbs.

Biquads & filters

Second-order IIR sections — the atoms of every equaliser and of the resonant filter in a synth.

Delay lines

A circular buffer with (fractional) read taps — the basis of delay, reverb and modulation.

Envelopes & detectors

Followers and ADSR generators that track or shape level over time — the engine of dynamics and of note articulation.

Oscillators

Band-limited generators (PolyBLEP, wavetable) for synthesis and LFOs for modulation.

Nonlinearities

Memoryless waveshapers that add harmonics — the core of distortion and saturation, tamed by oversampling.

Transforms

The FFT and its relatives move processing into the frequency domain for spectral effects, convolution reverb, and analysis. See the transform guides.

7Building & shipping

A plugin is a product as much as a program. Turning working DSP into something that loads reliably in every host on every machine is its own discipline.

The browser examples in this collection sidestep signing and installers entirely — they are just web pages — but they honour the same DSP correctness, parameter smoothing, and latency awareness that a shipping native plugin must.

8The collection

Nine repositories. This hub, an in-depth JUCE tutorial, and seven working plugin examples — each a self-contained page with a live, playable demo, real DSP maths, and the equivalent JUCE C++.

References & further reading

  1. Steinberg. VST 3 Audio Plug-Ins SDK. Steinberg Media Technologies.
  2. Apple. Audio Unit Programming Guide & Core Audio Overview.
  3. Bitwig & u-he. CLAP — CLever Audio Plugin format specification (2022). github.com/free-audio/clap.
  4. Storer, J. et al. JUCE — the C++ library for audio applications. juce.com.
  5. Zölzer, U. (ed.) DAFX: Digital Audio Effects, 2nd ed., Wiley, 2011.
  6. Smith, J. O. III. Physical Audio Signal Processing and the CCRMA online books, ccrma.stanford.edu/~jos.
  7. Pirkle, W. Designing Audio Effect Plugins in C++, 2nd ed., Routledge, 2019.
  8. Tarr, E. Hack Audio: An Introduction to Computer Programming and Digital Signal Processing in MATLAB, Routledge, 2018.
  9. Ross Bencina. "Real-time audio programming 101: time waits for nothing."
  10. W3C. Web Audio API & AudioWorklet specifications.