This page contains changelogs for all release versions of Surge XT. For the latest developments, we are keeping a separate nightlies changelog, which will be merged to this page upon release.

Changelogs for versions prior to Surge XT 1.0 release can be found here.

Changes in Surge XT 1.3.0

We released Surge XT 1.3.0 on December 8, 2023. This release contains a wide variety of performance-focused enhancements, new effects, expanded DSP, and many bug fixes and small improvements.

You can now gain complete control of the synth using OSC, use MIDI Program Changes to load patches, and have access to a command-line only version of the synth for embedded and headless applications. The new effect, Bonsai, is an exciting tape and saturation model. Expanded ring modulation options in the mixer allow for a myriad of growls, squeals, boosts, and signal combinations. The expanded Tuning Editor gives a variety of realtime visualizations for your scales and tunings. Plus, we have added some new patches and modulator presets. And these are just the headlines! More detailed changelog is as follows.

Open Sound Control

  • Added a complete Open Sound Control implementation. For more information, see “OSC Settings > Show OSC Specification…” in the main menu


  • Added support for MIDI Program Change messages
    • The user patches folder can now contain a MIDI Programs
    • Patches at the root of MIDI Programs folder will form Bank Select 0, if present
    • Subfolders inside MIDI Programs folder will form Bank Select 1 … 127, if present
    • In each bank, patches are sorted in alphabetic order
    • Only the first 128 patches will be available from every folder
  • Added support for discerning MIDI channel when MIDI learning parameters
  • Disallowed MIDI learn on reserved MIDI CCs (like Bank Select, Data Entry, RPN/NRPN, All Sound Off, etc.)
  • Fixed a bug where when Dual scene mode with MPE enabled, Play Mode set to Latch and “Use MIDI Channels 2 and 3 to Play Scenes Individually” option disabled would trigger voices on the unlatched scene

Command Line Interface

  • Implemented a pure CLI version of Surge XT for headless (no GUI) operation
  • This is available as surge-xt-cli on Linux, cli executable in the standalone bundle on Mac, and as a separate install for Windows users
  • Combined with OSC and MIDI Program Change support, this allows a variety of new and useful embedded and headless implementations


  • Bonsai is a really organic sounding distortion effect, combining a highly non-linear bass boost with an emphasis-filtered waveshaper and noise AM. It excels at a wide range of very beefy gnarly sounds, but can sound very good at subtle settings too
  • Audio In is the same functionality as the Audio In oscillator type, simply allowing you to insert audio into the signal path downstream from filters and waveshapers
  • Y and Z filters are freshly added members of the Airwindows effect now
  • Ring Modulator effect now also has audio input available as carrier
  • Added extendability to Delay effect’s Feedback and Crossfeed parameters (making them bipolar), and Mod Depth parameter (increasing it from 2 semitones to an octave)
  • Fixed a bug where Tape effect’s Drive parameter Precision options and Delay effect’s Feedback Limiting options (in right-click context menu) didn’t load correctly


  • Ring Modulator channels in the Mixer now have a large number of alternate combinator modes (Complex XOR and Scale-Invariant Linear Modulation)
  • FM3 oscillator’s M3 Frequency parameter is now extendable down to 0.5 Hz
  • Fixed a bug where oscillator initialization ignored the octave setting, which caused a very small initial glide in String and Modern oscillator
  • Added a “Vintage FM” feedback mode for Sine, FM2, and FM3 oscillator, which uses the average of last two samples to calculate feedback (like on the very first FM synthesizers)
  • Doubled the delay buffer of comb filter (now it’s 4096 samples), allowing lower frequencies to sound proper at high sample rates
    • This is a CMake option so self-builders can revert to how it was before, if Surge XT needs to run in a more memory constrained scenario
  • Fixed a half-sample initial phase offset error in Modern oscillator when retriggering from zero
  • Added an option to mute an entire scene via right-click context menu on Scene Volume parameter
    • This is useful for sending scene A audio into B, but note that it also bypasses scene insert effects!


  • Added various useful math functions (parity, signum, sign, rescale…) and a slew limiter to the Formula modulator prelude
  • Added an alias for intphase state variable in the Formula modulator, cycle
  • Removed Formula modulator subscriptions for timing and LFO state, they are now always available
  • Removed Formula modulator subscription for voice parameters, they are now always available in voice LFOs and never available in scene LFOs
  • Reverb 1 Size parameter can now be modulated without resetting the feedback network - sounds kinda odd but also fun!


  • Added two new visualizations to Tuning Editor
    • True Keys mode shows actual keys depressed and the interval between them in cents
    • Radial mode is now renamed to Polar, containing Radial and Angular modes
  • In MTS-ESP mode, the Tuning Editor will now also become a tuning analyzer, showing the new True Keys mode against MTS-ESP sources
  • Removed the option “Use MTS-ESP if available”, it was redundant
  • Added the capability to remember if Surge XT is disconnected as client from MTS-ESP
  • Fixed misleading tuning-related typeins in ‘Apply Tuning After Modulation’ mode, now errors are presented accurately
  • When “Use MIDI Channels 2 and 3 to Play Scenes Individually” is disabled, we can now use MIDI channels for octave shift tuning information coming from MTS-ESP
  • Fixed a bug where sustain pedal did not work correctly in “Use MIDI Channel for Octave Shift” mode


  • Enter key on a step sequencer parameters starts the edit gesture, matching other accessible sliders
  • Alert dialogs now properly receive keyboard focus for screenreader users
  • Effect parameters now speak the name of the parameter group they belong, which is helpful in effects like Audio In or EQ, which have multiple similarly named parameters in different groups
  • Shift+F10 closes open menus as well as opening them, which works around some DAWs (like Reaper) stealing Esc key in order to close the plugin window
  • Removed an unused button from Keyboard Shortcuts Editor which confused some screenreaders


  • Added multiple virtual keyboard layouts (QWERTZ, AZERTY, Dvorak, etc.) to Keyboard Shortcut Editor
  • Added an action to load a random patch (not bound to a key by default)
  • Restricted wavetable loading dialog to .wav and .wt extensions only
  • Mouse dragging in the Filter Analysis overlay now modify the Cutoff and Resonance parameters, and also send VST automation events
  • Adjusted the width of typeins when they show an error
  • Fixed a bug where buttons in the Oscilloscope overlay and a few other places used incorrect hover off color
  • Fixed an error where MSEG Y position tooltips would not update or would show when not appropriate
  • Fixed a problem with the use of bold fonts in menus which mis-render menu headers in some macOS situations
  • Home and End keys no longer malfunction in the Comment field when saving patches
  • Releasing mouse on horizontal slider no longer places cursor over adjacent slider
  • Updated the look and feel of all alert and notification dialogs to match the skin used, as opposed to default JUCE visual style
  • Oscillator display now uses the half rate filter to show the waveform, which shows a more accurate waveform in some cases
  • When using the option “Add sub-menus for modulation menu items”, custom menu icons will not be shown now


  • Implemented CLAP parameter menus
  • Added initial implementation of CLAP remote control pages extension
  • CLAP polyphonic modulation now also works per-channel and per-key, whereas previously it just worked per note
  • Better defense against some filesystem errors which could cause the AU to fail loading in Logic
  • Reenabled VST3 parameter menus in Reason, now that the underlying bug is fixed on Reason’s end. Thanks to the Reason team for their beta program access, which helped us find this bug!

Surge XT Effects

  • Standalone now works with mono in, stereo out Bluetooth configurations
  • Changed startup path to improve portability
  • Documents directory is not created anymore if not needed, improving portability

Other Changes and Bug Fixes

  • Allowed clients of Surge XT to reset extra content path (used by VCV Rack modules)
  • Updated the Character filter to allow inclusion in VCV Rack as a standalone
  • Fixed a bug where standalone would not properly use the tempo specified in the Virtual Keyboard section
  • Swapping effects via drag and drop now participates in undo
  • Swapping macro modulators via drag and drop now participates in undo
  • “Continue from Current Level” Play Mode option now participates in undo and scene copy/paste
  • Fixed several cases where the MSEG could generate or persist NaN values in the editor
  • Updated the lifecycle of JUCE look and feel, avoiding a font-related crash in some rare cases
  • Updated the handling of filesystem errors more robustly and improved error reporting at startup, avoiding a crash in some rare cases
  • Loading skins from ZIP files now appropriately ignores the _MACOSX folder

Code Refactoring and Quality

  • A large number of effort went to moving code from Surge XT repository into libraries shared between Surge and Shortcircuit, including:
    • Moving many effects to sst-effects library
    • Moving fundamental operators to sst-basic-blocks library
    • Each of these moves included code improvements of various forms
  • With JUCE 7, removed the moribund per-type class extensions
  • Added uniform file comments and header guards across the entire codebase
  • Centralized our locale-based formatting using the libfmt locale
  • Removed some uses of shared_ptr<T[]> which don’t work in the VCV Rack build environment
  • Made sure we properly obey __restrict on gcc
  • Consistently use uses_wavetable for all queries about wavetable usage
  • Fixed an assumption about parameter layout in FXStorage
  • Fixed a collection of typos across the code comments
  • Refactored the modulator name API to be available to more code paths


  • Upgraded to JUCE 7.0.5 (plus a couple of accesibility patches)
  • Removed the LV2 from the binary distribution
  • Fixed descriptions in Linux installers to indicate LV2 is not there anymore and include CLAP in the binary
  • Tweaked our CI strategy to improve time from commit to nightly
  • Include the mistakenly unincluded for gcc13
  • Surge XT builds on 64-bit Raspberry Pi OS, but not 32-bit - fail the 32-bit Raspberry Pi build earlier
  • Expanded documentation about polyphonic modulation, Raspberry Pi, and others
  • Moved to catch version 3
  • Enabled CTest
  • Improved unit test runtimes
  • Moved minimum CMake version to 2.1
  • Moved macOS notarization from altool to notarytoool
  • Consistently build for macOS 10.9 across all submodules
  • Fixed compilation on macOS Clang 15
  • Added an API to end notes just based on note ID
  • Added a test suite which compiles after surge-xt as opposed to after surge-common, which was needed for OSC unit tests
  • Removed more inappropriate legacy SSE includes, allowing portability to more architectures via simde


  • Updated 3 LinnStrument patches from Winds category
  • Updated and added new John Valentine patches
  • Updated and added new Kinsey Dulcet patches
  • Added A.Liv patches
  • Added Landosonic patches
  • Added NES Triangle wavetable
  • Added two new init patches to the factory templates, aimed at duophonic and paraphonic synthesis
  • Added another Formula Tutorial, focusing on duophony
  • Added a few Formula modulator presets

Changes in Surge XT 1.2.3

Changes in Surge XT 1.2.2

Changes in Surge XT 1.2.1

Changes in Surge XT 1.2.0

Changes in Surge XT 1.1.2

Changes in Surge XT 1.1.1

Changes in Surge XT 1.1.0

Changes in Surge XT 1.0.1

Changes in Surge XT 1.0.0