Installation
New in v1.6
Section titled “New in v1.6”Native macOS
First-class macOS support on Apple Silicon. Code-signed VST3 and AU exports, AU validation passing, ships as a single signed .dmg.
Wavetable Osc Refresh
Built-in test waveforms (Saw, Sine, Square, Noise, and more), anti-alias mip at the top end, preserved phase for asymmetric shapes, sidebands dropped ~57 dB.
Resizable Plugin Windows
VST3 and AU plugins now resize cleanly on macOS, with DPI-aware refresh when the host changes scale. WASAPI driver support on Windows.
Live Hoverscopes
Hover any pin or wire to see the signal as a mini live scope. Now works on GUI modules and IO modules, with improved hit-testing on pins and lines.
Project-Specific Skins
Drop a sister folder next to your project (e.g. mysynth.skin/) and SynthEdit searches it first for skins and fonts. A _fallback skin holds your custom assets, plus a new “Browse to Project Skin” menu.
See the full changelog for every release in the v1.6 line.
Download
Section titled “Download”A free 60-day demo is available that lets you explore the full feature set, including exporting your work as VST or AU plugins. After 60 days you’ll need a license to keep using SynthEdit.
A license costs €170 — a single payment covering all current versions, with no subscription and no royalties on what you export. The experimental Linux build is free while it’s in preview.
Download for Mac (.dmg)Requires an Apple Silicon Mac (M1, M2, or later) running macOS Tahoe or later.
- Open the
.dmgfile - Drag SynthEdit to your Applications folder
- Launch SynthEdit from Applications
Windows
Section titled “Windows”Requires Windows 10 version 1809 (build 17763) or newer, 64-bit.
- Download and run
SynthEdit-Setup.exe. - The signed installer unpacks the MSIX payload, installs the required Windows framework dependencies, then installs SynthEdit. No administrator prompts; no certificate to trust.
- SynthEdit launches automatically when the install finishes. Next time, launch it from the Start menu (search “Synth Edit”).
Linux (experimental)
Section titled “Linux (experimental)”Requirements
- 64-bit x86 Linux with glibc 2.39 or newer — e.g. Ubuntu 24.04+, Fedora 40+, or equivalent
- A Wayland desktop session — required to run the editor. SynthEdit is a native Wayland client with no toolkit and no X11 path, so it will not start under a legacy X11-only session (and there is no XWayland fallback). Any current GNOME, KDE Plasma or Sway session is fine. This applies to the editor only — see Exported plugins below for what your plugins need.
- Standard desktop libraries (libdecor, xkbcommon, harfbuzz, freetype, fontconfig, PipeWire for audio, ALSA for MIDI) — preinstalled on any normal desktop distro
Install and run
tar -xzf SynthEdit-linux-x64.tar.gzcd SynthEdit./SynthEditWaylandTo add SynthEdit to your application menu, with its icon and .synthedit files
associated with it, run the installer from the extracted folder instead. It
installs for your user only and needs no root:
./install.shIt copies SynthEdit to ~/.local/opt/SynthEdit, and you can remove it again with
~/.local/opt/SynthEdit/uninstall.sh (your projects and modules are kept). You
may need to log out and back in once before the menu entry appears.
The PlugIns/ folder next to the executable holds the factory modules; third-party
modules are scanned from ~/.local/share/SynthEdit/modules.
Audio and MIDI
Audio output goes through PipeWire, to the system default device — there is no JACK or plain-ALSA audio backend. The engine starts automatically; toggle it with Audio > Run. MIDI input uses the ALSA sequencer, and every connected MIDI device is opened by default, so a plugged-in keyboard just works.
Edit > Preferences (Ctrl+,) sets the sample rate, buffer size and MIDI input/output. Changes take effect immediately — a running engine is restarted for you. The audio device list currently offers only PipeWire’s default sink; to send SynthEdit somewhere else, route it in your desktop’s own sound settings.
If you hear dropouts
PipeWire decides the audio period itself, so Buffer size is a request rather than a guarantee.
- Match SynthEdit’s Sample Rate to the one PipeWire is using
(
pw-metadata -n settings | grep rate) so nothing has to be resampled. - Give audio threads realtime priority — adding yourself to the
pipewiregroup is usually enough (sudo usermod -aG pipewire $USER, then log out and back in). - Audio inside a virtual machine is emulated and glitches regardless of these settings; a larger buffer in your VM’s audio settings helps.
Editing
Insert modules by double-clicking them in the browser (or single-click one, then click the canvas where it should go). Tabs above the canvas track each open container view (middle-click closes a tab), the canvas pans via scrollbars / mouse wheel and zooms with Ctrl+wheel, and the usual keyboard shortcuts work (Ctrl+Z/Y, Ctrl+X/C/V, Delete, Ctrl+N/O/S, F5 toggles audio).
Exported plugins
Linux export ships, but like the rest of the Linux port it is very new — treat it as experimental and test your plugin in the hosts you care about.
The Wayland requirement applies to the editor, not to what you build with it. A plugin exported on Linux carries no dependency on the editor’s Wayland backend. It ships with both display-server paths in the one binary and picks between them when the host opens its window:
- Wayland where the host supports it — the
kPlatformTypeWaylandSurfaceIDembedding added in VST3 3.8.0. - X11 everywhere else — the long-standing
kPlatformTypeX11EmbedWindowID. This is the path an X11 DAW such as Ardour takes, and also what a Wayland desktop gets when the host embeds its plugins through XWayland.
The choice is made by asking the host what it supports, not by looking at your desktop session — only the host knows which one it actually uses. So there’s one build to ship, and your users don’t need a Wayland session to run your plugin.
Not working yet
- Picking a specific audio output device (only PipeWire’s default sink is offered)
- Multiple windows (tear-out)
You can open, edit, and save projects, and the full structure view renders natively. Feedback to jef@synthedit.com is very welcome.
AI Assistant Support
Section titled “AI Assistant Support”To drive SynthEdit from Claude Code, Cursor, or any other MCP-compatible AI assistant, you need the headless SynthEditCL command-line tool. The setup differs slightly by platform:
macOS — already done. SynthEditCL ships inside SynthEdit.app. Skip ahead to the MCP connector guide to wire up your AI host. (Prefer not to install the GUI? A standalone SynthEditCL_mac.zip is also available — unzip it and point SE_CLI at SynthEditCL.app/Contents/MacOS/SynthEditCL.)
Windows — install the standalone command-line tool. Works with or without the GUI.
Download SynthEditCL Installer (.exe)- Run the installer
- Tick “Add to PATH” if you want
SynthEditCL.exeavailable system-wide (recommended) - Continue to the MCP connector guide to configure your AI host
Linux — download the standalone command-line tool. Fully headless: no Wayland session, no GPU — it works over ssh and in CI, so it isn’t limited by the editor’s experimental status.
Download SynthEditCL for Linux (.tar.gz)- Extract into
/optor your home directory:tar -xzf SynthEditCL-linux-x64.tar.gz— the MCP server auto-detects/opt/SynthEditCL/and~/SynthEditCL/, as well asSynthEditCLon yourPATH. (Extracted somewhere else? SetSE_CLIto the extractedSynthEditCL/SynthEditCLexecutable in your MCP host config.) - Continue to the MCP connector guide to configure your AI host
Common Issues
Section titled “Common Issues”Module XML Problems
Section titled “Module XML Problems”This happens when a third-party module has typos in its XML definition. The fix is to get the latest update for those modules from their original developer — newer versions correct these mistakes.
Scrolling or Zooming Past the Document Bounds
Section titled “Scrolling or Zooming Past the Document Bounds”You can now scroll and zoom beyond the edges of the document. This is intentional — it lets you position the part of the document you’re working on comfortably within the view.
Slight Delay When Resizing the Module Browser
Section titled “Slight Delay When Resizing the Module Browser”There is a slight delay when you adjust the size of the module browser. This is intentional — it reduces the load on your graphics card from recreating a fresh swapchain on every size change.
Recent Releases
Section titled “Recent Releases”Recent changes and fixes. View full changelog
v1.6.229 — 2026-10-21
- resize the panes when the monitor’s scale changes
- re-set the pane’s inverse composition scale after every resize
- keep editor panes off overlay planes without tinting them
- Graphics Frame Rate counted render calls, not frames
- Better options to make the GUI faster
v1.6.228 — 2026-10-20
- menu bar titles no longer pile up at x=0 after Save As
- SynthEditCL keeps its own module cache
v1.6.227 — 2026-10-19
- audio drivers outlive the runtime that uses them
- Stop Audio no longer hangs when PipeWire stops calling back
- Close > Save closes once the save completes
v1.6.226 — 2026-10-18
- VST3 editors drew at 1/scale since HWND frames moved to composition swap chains
v1.6.225 — 2026-10-19
- a destroyed ModuleView unlinks itself from every connected module
- —containerise acts on the container that owns the selection
v1.6.224 — 2026-10-16
- reload the project after export on Linux; one result dialog
- recognise SynthEditWayland as the editor
- recent-files menu populated at startup on Linux
- one dialog per export on Linux”
- one dialog per export on Linux
- fix for recent files menu on Linux
- drop the Format label under the FORMAT heading in Export Plugins
- add the default extension when a save dialog returns a bare name
- Export Plugins opens in its own modal window on Linux
v1.6.223 — 2026-10-16
- the export’s own <Controller/> owns MpController; the engine preset rides a blob parameter
- the GMPI-wrapper VST3 path is compiled out of Release builds on Windows/mac
- the GMPI plugin XML carries the vendor URL and email
- qualify Rect and Point in ViewBase.cpp, which macOS’s MacTypes.h also declares
- developer-only ‘Use GMPI Wrappers’ checkbox composes the Windows VST3 from the GMPI bundle
- apply every automation point in a parameter queue, not only the last
- SE_GMPI_TRACE, an env-gated stderr trace of what reaches the engine and the controller
- CContainer’s friend declaration follows ExportAsPlugin’s new useGmpiWrappers parameter
v1.6.222 — 2026-10-16
- the editor answers its panel size from measure(), so a CLAP host no longer gets 1x1
- the Linux export honours the host’s offline render mode
- tempo validity follows what the wrapper delivered, keep the host’s bar phase
- state reads survive short and corrupt streams
- report each parameter’s real default to the DAW
- one parameters.se.xml description per process (seParameterInfo)
- note expression reaches notes on every MIDI channel
- include BundleInfo.h in ViewBase.cpp
- accept an instrument’s own bus layout in setBusArrangements
- a reused note ID no longer sends note-offs to a released key
- SE_GMPI_TRACE in the editor reports the view transform, the clip, and the pixels the children drew
- SE_GMPI_TRACE in the editor (pointer, panel build, child layout, first renders, image load) and the controller’s panel-to-host and DspMessages sends
- Number Entry and Text Edit open on Trigger’s falling edge
- MpParameter::getDefaultNormalized
- MpController::Initialize tolerates a plugin with no parameters.se.xml
- MIDI output from the Linux VST3/GMPI export
- ApplicationBase::onSavedStateChanged when a saved parameter changes
v1.6.221 — 2026-10-14
- drop SeGmpiEditor’s g_pendingEditorGuiHost definition
- don’t PSS-prefix every resource when the project is unsaved
- define g_pendingEditorGuiHost once, beside its declaration
v1.6.219 — 2026-10-13
- set currentVst3SkinName on the JSON/GMPI export path too
v1.6.218 — 2026-10-14
- panel renders at its real size, correctly centered
- no set-default message to the DSP for an unused spare plug
- fix skin case-sensitivity on Linux
- clear parentSizeClients when a view destroys its children
- Value Set modules no longer clobber the tempo before their parameter ID arrives
- SynthEditCL’s fakeUi actually opens the panel view on export
- Style objects carry a glow radius
- SeGmpiEditor uses the real MpController when offered one
- Render, Render Instances, Render Each and Text Render draw the Style’s glow
- Number Entry lays out correctly after a resize
- Number Entry draws the Style’s glow behind its number and units
- Number Entry ‘Edit Style’ pin - the number’s style while it’s being edited
- MouseTarget ‘Wheel’ output - scroll-wheel movement in notches
- IGuiHost2 handoff for GMPI editor construction
- Editor subtype stub, proves X11 and Wayland both attach and paint
- Editor hosts the exported document’s real panel
- Alt+double-click number edit ignored digits until an arrow key
- ‘Text Edit’ and ‘Text Render’ GUI modules - TextEntry4 split in two
v1.6.217 — 2026-10-06
- same-type GUI wires no longer round-trip through text
- recent-files list holds only files a person chose
- Voice Allocator strategies - Round Robin, with Glide, Mono, Highest Note Glides
- SynthEditCL and synth_ui_tests never write the settings file
- RenderBitmap draws 8-bit masks
- Mask2Bitmap reads any input format, not just an 8-bit mask
- GUI value sent from a GMPI editor’s initialize() reaches its wire
- GUI modules upstream of an auto-duplicated input are processed first
- ‘Value’ (PatchMemGet) outputs the patch value on the DSP side too
- ‘Text to Mask’ x2 pin renders at twice the DPI
- ‘Text to Mask’ GUI module - text rendered to an 8-bit mask bitmap
- ‘Style Switch’ GUI module - an int picks one of its auto-duplicating Style inputs
- ‘Point’ and ‘Multiline’ GUI modules
- ‘Path to Mask’ GUI module - a path rendered to an 8-bit mask
- ‘Meter Value’ (PatchMemMeter) - a DSP float input drives the parameter, for meters
- ‘Blur2’ GUI module - blurs an 8-bit mask into an 8-bit mask
- ‘Bits To Int’ GUI module - auto-duplicating bool inputs, one bit each
v1.6.216 — 2026-10-01
- MIDI message to steal a physical voice, fading it out in 20ms
- MIDI 2.0 note-on can pick its physical voice, and carry a per-note glide start
v1.6.215 — 2026-10-01
- keep editor panes off DWM overlay planes, to stop monitor flicker
v1.6.214 — 2026-09-30
- oversampler upsampling filter matches the FIR quality setting
- notify the DAW when plugin state changes outside its parameters
- improvements to CPU graph accuracy and responsiveness
- crash on exit after MIDI Out device failed to open
- better hit testing no resize nodes
- VST3 marks the DAW project dirty on non-parameter state changes
- AU state-change notification throttled by timer ticks
- AU notifies the DAW of non-parameter state changes
Demo vs Full Version
Section titled “Demo vs Full Version”| Feature | Demo | Full Version |
|---|---|---|
| Build synths | Yes | Yes |
| All modules | Yes | Yes |
| Save projects | Yes | Yes |
| Export VST/AU plugins | Yes | Yes |
| Time limit | 60 days | None |
| Price | Free | €170, paid once |
The demo is fully featured — you can build synths, save projects, and export commercial-quality VST or AU plugins for the full 60 days. After that, a license keeps everything working with no further restrictions.
Activation
Section titled “Activation”Licenses are handled through Moonbase, our new licensing partner (the previous provider, ShareIt, has closed down).
To activate your copy:
- In SynthEdit, open the registration settings and click the Activate button
- This launches the Moonbase website in your browser
- Create a Moonbase account using the email address associated with your SynthEdit license
Most existing customers’ email addresses have already been imported into Moonbase, so activation should work straight away. If you hit any trouble, email jef@synthedit.com and Jeff will sort it out.
Next Steps
Section titled “Next Steps”Once installed, follow the Your First Synth guide to build something right away.