Nightly Changelog

We are approaching 1.4.0. This changelog was last edited as of fda3409 (Oct 10, 2025).

Wavetable Script Editor

  • New Lua scripting environment, allowing for the generation, programming, and configuration of wavetables from Lua code
  • Generated wavetables are applied directly to the wavetable oscillator and can be exported as .wav and .wt files or specifically for Serum and VCV Rack
  • Exported wavetables include metadata to preserve the generating scripts and parameters
  • Support for a new .wtscript preset format that generates the resulting wavetable when loaded
  • Includes a collection of wavetable scripts for use, exploration, and learning
  • FFT functions and a new Prelude library with helper functions specifically for wavetable scripting

Formula Modulator

  • Added parameters voice_count, voice_id, poly_limit, is_rendering_to_ui, scene_mode, play_mode, split_point, mpe_enabled and tuned_key
  • Added a global table named shared which is available to all Formula instances across all voices
  • Custom Formula output names now save in Formula presets
  • Deprecated macro subscriptions; macros are now always available by default
  • Added missing channel, key and velocity parameters to the Formula init function state
  • New “Ranged Keytrack” and “Euclidean Sequencer” presets
  • The Formula tutorials “Both Time And Space” and “Reich - Piano Phase” now use exact BPM values
  • Added confirmation alert when closing the editor with unapplied changes via keybindings
  • Fixed a possible crash when switching to an unused output

Open Sound Control

  • FX Parameter name changes update in a more modulator / granular fashion

Effects

  • Added a new effect: Floaty Delay!
  • Nimbus now uses the same resampling method as Twist oscillator
  • Fixed a problem where CHOW mix was stuck at 100%
  • Fixed a problem where, in certain configurations at very low drive, the Distortion effect could become unstable

Code Editor

  • Added search (Ctrl/Cmd+F), replace (Ctrl/Cmd+H) and go to line (Ctrl/Cmd+G) functionality
  • New syntax highlighting color schemes
  • Added occurance highlighting for selected text, search results and added highlighting for current line for readability
  • Syntax highlighting now supports multiline comments
  • Code editor now auto-indents for function, while and if statements
  • New line will keep the current indentation level, tab now always adds an indent at the caret position and tab also indents selections
  • Backspace now removes one indentation level at a time instead of a single space
  • Added auto-insert and auto-enclosure for square brackets, parentheses, curly braces and quotation marks
  • Code apply now trims trailing whitespace
  • Code editor can scroll and select at the same time and scroll horizontally (Shift+Mousewheel)
  • Double-click now selects only one word at a time
  • Undo/Redo now respond to keys set in the Keyboard Shortcut Editor
  • Code editor now saves state for caret position, selection and search/replace/goto line on focus loss
  • Code editor state is cleared if a Formula .modpreset, .wtscript or a .fxp is loaded
  • Formula debugger now groups variables under user, shared and built-in sections that can be collapsed
  • Debugger now always updates on code compilation
  • Debugger UI buttons are now accessable
  • Fixed a possible crash due to recursion in the debugger
  • Fixed a bug where moving an LFO parameter with the debugger open would cause the LFO display to stop working

Other Lua Changes

  • Added pairs, unpack, next, type, tostring, tonumber, setmetatable, pcall and xpcall functions to sandbox environment
  • Added string, table function tables and bit module
  • Added print function for console output
  • Improved error reporting for script compilation

SurgePy

  • Explicity set process input to false
  • Ability to load a wavetable into a patch

Infrastructure

  • Moved from Azure to GitHub Actions
  • Removed Windows 32-bit build
  • Moved Linux binary distribution to a Ubuntu 20 Docker image
  • Moved to Clang on Windows 64-bit
  • Moved to JUCE 8.0.4, requiring Windows 10 and macOS 10.13
  • Began an ARM64EC Windows build
  • New LuaJIT library build system
  • Merged support for Linux builds using musl rather than glibc

Code Factoring and Quality

  • Move the oscillator unison/drift/character support to sst-basic-blocks submodule
  • Remove old and unused allpass filter code
  • Move Reverb 2, Treemonster, Nimbus, Rotary Speaker to sst-effects submodule
  • Update eurorack submodule to build with MSVC Clang
  • Remove dependency on libsamplerate
  • Increase the MSVC stack size in debug builds to allow Formula modulator tests to be reliable
  • Switch to not using simde native aliases to accomodate ARM64EC
  • Clean up a collection of issues identified by static analysis tool insert link to tool

Other UI/UX changes

  • Use wavetable name as default filename when exporting a wavetable
  • Make the menu entry to rename the wavetable consistent with other rename actions
  • Added keybinding for toggling the Wavetable Script editor (Alt/Opt+W by default)
  • Explicitly set tab focus order for MSEG editor buttons

Diffs Not Processed Into Changelog

These commits have not yet turned into human readable changelog, and are ordered from oldest to latest.