Open-source project
zynaddsubfx/zynaddsubfx avatar
zynaddsubfx/zynaddsubfx

ZynAddSubFX: three synthesis engines and 1100 instruments in one C++ application

ZynAddSubFX open source synthesizer

1,184 stars124 forksC++GPL-2.0

At a glance

What is it?
ZynAddSubFX is a GPL-2.0 software synthesizer for Linux, macOS, BSD and Windows that combines additive, subtractive and PAD engines with JACK, ALSA and LV2 hosting in a single C++ codebase. The build story is split between an older FLTK interface and a newer Zyn-Fusion front end, which is the main thing to understand before committing to it.
Who is it for?
Adopt ZynAddSubFX when you want a free instrument that covers additive, subtractive and pad work in one binary, plays as a JACK client or an LV2 plugin, and ships with more than 1100 instruments you can edit rather than hunt for. Do not adopt it if you need a single-file instrument, a maintained plugin release, or a build that is one command on a modern machine, because the required FFTW, MXML, zlib and Liblo libraries are not bundled.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 58 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • zynaddsubfx/zynaddsubfx1,184 ★ · +6
Star history
Repository2026-10-212026-11-07
zynaddsubfx/zynaddsubfx1.2k1.2k

6 Stars in the last 17 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

One application covering additive, subtractive and PAD engines

ZynAddSubFX is a musical software synthesizer for Linux, macOS, BSD and Windows, written in C++, and the point of interest for an engineer is that three synthesis engines share one parameter surface rather than being three separate programs. The additive engine builds classic synth sounds from voices and exposes modulators ranging from LFOs and envelopes to oscillator modulators for FM, PM and AM. The subtractive engine creates variable bandwidth harmonics from filtered white noise. The third is a PAD engine aimed at pads and sustained instruments. A separate waveform generator produces up to 128 sine or non-sine harmonics, and the filter set covers analogue modelled filters, formant filters and state variable filters. Envelopes run in ADSR, ASR or similar modes, and can also be set to a free mode where the shape is drawn freely. The result is a panel where a sound designer can move between fundamentally different synthesis methods without leaving the application, which is the main argument for ZynAddSubFX over a single-engine soft synth.

Effects routing and kits let one part become a layered instrument

The effects section is what turns three engines into an arrangement tool. The available effects are reverb, echo, chorus and flange, phasing, wave-shaping, equalizing and dynamic filtering, and the routing between them is flexible rather than a fixed chain. The other structural feature is kits. Instruments can be organised into kits so that a drum kit or a layered instrument is one object, and a single part can draw on more than one instrument at once. The kit model also decides what the part's own effects act on, so you can choose which items in the kit are processed by the part effects and which are left dry. There is a smaller detail that matters for emulating analogue hardware: a randomness setting that introduces subtle differences between instances of the same sound, which the description frames as a way to recover that familiar analogue warmth. Taken together, kits and randomness are the two features that separate this from a plain subtractive synth, and both are aimed at producers who layer sounds rather than programmers who want a single oscillator voice.

MIDI handling goes past note on, note off and channel bend

Audio driver support covers JACK, ALSA, OSS and PortAudio, and session management is handled through LASH and NSM so the application can be started and stopped with the rest of a desktop session. The more interesting part is the MIDI protocol work, where three SysEx extensions are documented. Floating point notes via MIDI SysEx let the exact pitch of a note-on event be specified as a 28-bit value, which removes the semitone grid limitation of standard MIDI pitch. Per-note controller events via SysEx allow individual active notes to receive MIDI control events rather than applying a control change to the whole channel. Per-note pitch bend via SysEx lets individual notes change their pitch independently. These are real capabilities rather than marketing names, and they change what a controller can express: with per-note pitch bend, a controller can bend one held note and leave the others at their original pitch, which no standard MIDI bend message can do. The 28-bit float note value is the other practical gain, since it lets a controller express pitch far outside the 14-bit resolution that standard MIDI offers.

Microtonal scales up to 128 notes per octave with key mapping

Microtonal capability is offered with any scale and up to 128 notes per octave, together with key mapping. For a keyboard instrument this is the feature that determines whether the application suits a given setup. Standard MIDI defines 12 notes per octave, so any microtonal work in ZynAddSubFX has to come from somewhere other than the MIDI pitch grid, and the 128-note ceiling is well above what 12-tone or 19-tone tuning needs. The key mapping feature covers the separate question of how physical keys or controller positions map onto that scale, which matters when the scale has more notes per octave than the keyboard has keys. This is the clearest case in the feature list where the project addresses an instrument player rather than a programmer, and it is worth checking against how you intend to drive the synthesizer before anything else, because it affects every other decision about controllers and layout.

Building the core: FFTW, MXML, zlib and Liblo are not optional

The build instructions are deliberately split. For building the core together with the FLTK based interface, the project points to doc/building.txt in the repository, and for the newer interface it points to the separate zyn-fusion-build repository. The required libraries are listed plainly.

bash
FFTW 3.x.x  - necessary for Fast Fourier computations
MXML-2.5+   - from https://www.msweet.org/mxml/
zlib        - from https://www.zlib.net/
Liblo       - networked open sound control

FFTW 3.x.x is needed for the Fast Fourier computations the additive engine and the waveform generator rely on, MXML 2.5 or newer and zlib are hard requirements, and Liblo provides networked open sound control, which is the mechanism behind the OSC control surface. The optional list covers FLTK and NTK for the older interface, JACK, OSS and ALSA for audio, and LASH and DSSI for session handling and plugin hosting. So the audio backend you want is not always an install-time decision you can defer: on a Linux box with JACK as the intended path, JACK is listed as optional because a build without it is still valid, but the desktop entries in the repository, zynaddsubfx-jack.desktop, zynaddsubfx-jack-multi.desktop, zynaddsubfx-alsa.desktop and zynaddsubfx-oss.desktop, are separate launch targets, one per backend.

Two interface generations, an in-tree OSC library and a plugin route

The repository layout explains the split interfaces. The top level contains CMakeLists.txt, a cmake/ directory, src/, ExternalPrograms/, a DPF directory that hosts the plugin wrappers, a tlsf/ memory allocator directory, an instruments/ directory holding the bundled instrument collection and pixmaps/ for artwork. There is also an rtosc/ directory alongside a .gitmodules file, and the README names rtosc as a sibling project for realtime open sound control, with mruby-zest as the framework for the Zyn-Fusion GUI. Plugin hosting is offered through DSSI, LV2 and VST, which means ZynAddSubFX can sit inside a host as an instrument rather than only running standalone. The practical consequence is that there are two supported front ends: the FLTK interface built from this tree, and the newer Zyn-Fusion interface built through the separate zyn-fusion-build repository. A contributor or packager has to decide which one they are shipping, and the README gives no single command that produces both. More than 1100 instruments are included, and they are files in that instruments/ directory, so a curated subset is a packaging decision rather than a code change.

GPL-2.0-or-later, recent commits, and an old release tag

ZynAddSubFX is available under the GPL-2.0-or-later license. For a synthesizer distributed as a binary, that is the part of the adoption decision that needs attention: GPL terms reach the recipients of a distributed binary, and a copyleft licence in a sample library or an audio plugin raises separate questions that a commercial sampler or instrument maker will have to evaluate, since a plugin running in another company's host is a common distribution model. This is a licensing note rather than legal advice. On maintenance, the repository is not archived and the last push was on 2026-09-10, which shows the tree is still receiving work. The release listing tells a different story about packaged binaries, though: the only release shown is 2.5.3-osx from 2016-02-06, and it is labelled for macOS specifically. The README also points to a mailing list, a public forum on kvraudio and an IRC channel, #zynaddsubfx on irc.Libera.chat, so the human support network is intact even though the tagged release is old. Where the project describes itself as fully featured, that claim rests on the source tree and the bundled instruments rather than on a recent binary release.

Editorial conclusion

Adopt ZynAddSubFX when you want a free instrument that covers additive, subtractive and pad work in one binary, plays as a JACK client or an LV2 plugin, and ships with more than 1100 instruments you can edit rather than hunt for. Do not adopt it if you need a single-file instrument, a maintained plugin release, or a build that is one command on a modern machine, because the required FFTW, MXML, zlib and Liblo libraries are not bundled. Before you start, read doc/building.txt for the FLTK interface and check the zyn-fusion-build repository for the newer one, since the last push was on 2026-09-10 while the only listed release, 2.5.3-osx, dates from 2016-02-06.

Frequently asked questions

What synthesis engines does ZynAddSubFX provide?

Three: additive synthesis, which builds sounds from voices with modulators including LFOs, envelopes and oscillator modulators for FM, PM and AM; subtractive synthesis, which creates variable bandwidth harmonics from filtered white noise; and a PAD engine for pads and other sustained instruments. A waveform generator supplies up to 128 sine or non-sine harmonics.

Does ZynAddSubFX work as a plugin and with JACK?

Yes. Plugin support is provided through DSSI, LV2 and VST, and the audio driver list includes JACK, ALSA, OSS and PortAudio. Session management is available through LASH and NSM, and separate desktop entries exist for the JACK, JACK multi, ALSA and OSS launch paths.

What libraries do I need to build ZynAddSubFX?

The required set is FFTW 3.x.x for Fast Fourier computations, MXML 2.5 or newer, zlib and Liblo for networked open sound control. FLTK and NTK for the oldest interface, JACK, OSS, ALSA, LASH and DSSI are listed as optional. The README directs you to doc/building.txt for the core with the FLTK interface and to the zyn-fusion-build repository for the new interface.

Can ZynAddSubFX handle microtonal scales?

Yes. The project describes microtonal capabilities with any scale, up to 128 notes per octave, plus key mapping. It also offers MIDI SysEx extensions for floating point notes specified as a 28-bit value, per-note controller events and per-note pitch bend.

Official sources

  1. License: GPL-2.0
  2. Project website
  3. README
  4. Releases
  5. zynaddsubfx/zynaddsubfx on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zynaddsubfx-zynaddsubfx.svg)](https://hysenlabs.com/projects/zynaddsubfx-zynaddsubfx)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/zynaddsubfx-zynaddsubfx.svg)](https://hysenlabs.com/projects/zynaddsubfx-zynaddsubfx)

Was this useful?