All notable changes to SynFlo are listed here.
0.8.4 — 2026-05-13
Added
- Sweep module — Plays a freeform polyline contour each time it receives a trigger. Like Automation, but one-shot per trigger rather than looped.
- Copy / cut / paste / duplicate for graph nodes — Standard Ctrl/Cmd C/X/V/D shortcuts, plus a right-click (long-press on touch) context menu. Internal connections between copied nodes are preserved, and the clipboard uses the
.sfgpatch format so you can paste across browser tabs. - Shift-click selects along the signal path — Shift-clicking a node picks up every node lying on a path between it and the existing selection. Two clicks grab a whole branched chain — for example, Keyboard then Output pulls in Oscillator, Envelope, and Gain.
- Pin button on the toolbar — Keeps the toolbar visible instead of auto-hiding. The setting persists across reloads.
Changed
- Inspector opens on double-click, not single-click — Single-clicking a node just selects it; double-click opens the parameter inspector. Keeps the panel out of the way while copying, moving, or duplicating nodes. Escape closes the inspector without deselecting.
0.8.4 — 2026-05-13
Added
- Sweep module — Plays a freeform polyline contour each time it receives a trigger. Like Automation, but one-shot per trigger rather than looped.
- Copy / cut / paste / duplicate for graph nodes — Standard Ctrl/Cmd C/X/V/D shortcuts, plus a right-click (long-press on touch) context menu. Internal connections between copied nodes are preserved, and the clipboard uses the
.sfgpatch format so you can paste across browser tabs. - Shift-click selects along the signal path — Shift-clicking a node picks up every node lying on a path between it and the existing selection. Two clicks grab a whole branched chain — for example, Keyboard then Output pulls in Oscillator, Envelope, and Gain.
- Pin button on the toolbar — Keeps the toolbar visible instead of auto-hiding. The setting persists across reloads.
Changed
- Inspector opens on double-click, not single-click — Single-clicking a node just selects it; double-click opens the parameter inspector. Keeps the panel out of the way while copying, moving, or duplicating nodes. Escape closes the inspector without deselecting.
0.8.3 — 2026-05-11
Changed
- Rock-solid timing across the control side — Beat, Step Sequencer, Drum Pattern, Clock Divider, Shift, Sample & Hold, Random, Automation, and Quantizer now keep accurate timing even when the rest of the app is busy. Previously, heavy UI work could cause beats and triggers to be silently dropped; that's gone. This extends the timing fix the envelope got in 0.8.2 to the rest of the control modules.
- Control Scope defaults to free-run — New Control Scope nodes now start running by themselves, instead of waiting for a trigger input.
Fixed
- Control Scope missed very short pulses — Narrow trigger pulses now register on the scope reliably.
0.8.2 — 2026-05-10
Added
- Sample-accurate envelope triggers — Envelope timing is now rock-solid even on fast retriggers (drum machines, percussive patches). Removes the audible variability between trigger and attack that previously made tight rhythmic patches feel loose.
- Cosine envelope curve — A new raised-cosine curve option produces noticeably softer attacks and releases than the linear and exponential options, with much less click content on percussive shapes.
- Oscillator phase-reset input — New
resetinput on the Oscillator restarts the waveform from zero on a rising edge. Paired with an envelope gate, this gives clean fast attacks with no startup click. - Mixer per-channel pan — Mixer now has a stereo mode with a pan control on every channel; mono mode is preserved as the default.
- Mixer per-channel mute/solo — Mute and solo buttons on every channel strip, with solo overriding mute.
- Native save/load dialogs — Patches now save and load through the browser's native file picker where supported. Patches use the
.sfgextension.
Changed
- Smoother oscillator pitch changes — Note-CV transitions are smoothed so sweeps and arpeggios no longer have audible zipper noise.
- Inspector and graph no longer glitch audio while dragging — Resizing nodes, dragging faders, or panning the canvas with a heavy panel open no longer causes audio dropouts.
Fixed
- Drum-trigger click — Percussive patches built from envelope + oscillator no longer click on each hit.
- Mixer drag stalls and accidental node selection — Dragging mixer faders no longer stalls mid-stroke, and clicking a pan control no longer selects the underlying node.
- Patches drawer left open after save — The drawer now closes automatically once a patch has been saved.
0.8.1 — 2026-04-19
Added
- Drum Pattern module — variable-track (1–8) trigger sequencer with a compact piano-roll-style pattern editor.
- Spectrum Analyser module — log-frequency bar chart from 20 Hz to 20 kHz with a pastel red-to-blue palette.
Changed
- Cleaner Square and Saw oscillators — High notes and bright timbres no longer pick up "buzzy" aliasing noise across the spectrum.
- Touch-friendly node resize — Resizing nodes now works reliably on touch devices.
Fixed
- Beat LED at fast BPM — The LED flash stays rock-solid up to 960 BPM and beyond; previously, short flashes at high tempos were missed.
- Scope trace breaking into dashes when zoomed out — Scope line now stays continuous at any canvas zoom level.
0.8.0 — 2026-04-17
Changed
- Pitch CV is now 1V/octave on
noteports throughout, matching the standard modular convention. Oscillator, Keyboard, Quantizer, and Step Sequencer all speak V/oct on theirnoteinput/output. Filtercutoffremains in Hz. Note-typed params render as note names (e.g.A4) in the Inspector. - Envelope
triggerandgateinputs separated —triggerfires a one-shot ADR;gateholds the sustain phase for as long as it's held. - Toolbar drawers stack instead of replacing each other, so patches and modules can be open at the same time.
- Audio scope trace stabilised — less jitter on continuous waveforms.
- Dropped the redundant detune CV input on Oscillator (detune remains as a param).
- Oscillator frequency can now reach zero.
Added
- Default patch on app load — a simple mini-synth with a scope wired in opens by default, so there's something to play with immediately.
- Gate output on Step Sequencer.
Fixed
- Envelope clicked when starting from silence.
- Drag-drop from the module browser sometimes created duplicate nodes.
- Live Input-control values were leaking into saved patches.
- Step Sequencer restarted when a note was edited during playback.
0.7.0 — 2026-04-13
Added
- Input category — live performance controls, each with a rich in-node UI:
- Button — momentary gate with
pressed/releasedtrigger outputs. - Switch — pill toggle.
- Slider — vertical fader with bounds and optional log scaling.
- Knob — SVG arc with bounds and optional log scaling.
- Pad — 2D XY touch surface.
- Keyboard — piano keyboard emitting V/oct (see 0.8.0), with trigger and gate outputs.
- Button — momentary gate with
- Tie notation on Step Sequencer (
>) for legato/continuation notes. - CV inputs on every numeric param that was previously missing one — every knob can now be modulated.
Changed
- Canvas background switched from grid lines to subtle dots.
- Sequencer and Quantizer default scale is now "major" (was chromatic).
- Slider track, thumb, and value label now scale with node size.
- Clicks on in-node controls no longer select the underlying node, and nodes with rich in-node UIs now open at the right size by default.
- Removed Constant module — Slider and Knob cover the same ground.
Fixed
- Sequencer click targeted the wrong cell when the canvas was zoomed.
- Sequencer grid didn't update when scale/root/octaves changed; notes are now remapped and clamped to the active scale.
- Sequencer
stepsparam had no effect on grid size. - Beat wouldn't stop when a
runinput was connected at a low level. - Inspector overlapped Input-category nodes.
- Step Sequencer edits sometimes bounced between collaborators in a session.
0.6.0 — 2026-04-05 — Collaboration release
Added
- Real-time collaboration — open a session, share the URL or a QR code, and other people can see and edit the same patch live:
- Live sync of node positions, sizes, parameter values, edges, and edge enable/disable across everyone in the session.
- Presence — list of who's in the session, plus their cursors live on the canvas.
- Collaborative patch load with a confirmation dialog so one user can't wipe the session by accident.
- Auto-join when opening a session URL.
- Noise module split out from Oscillator (white/pink/brown).
Initial development — 2026-03-27 through 2026-04-05
First ten days went from empty repo to a fully functional browser-based modular synth. Highlights from that initial scope, before tagged releases began at 0.6.0:
Modules
- Audio: Oscillator (sine/square/saw/triangle + white noise, with pulse-width param and CV), Gain, Filter (lowpass/highpass/bandpass/notch), Delay, Mixer (2–16 channels with per-channel levels, labels, and dB markings), Ring Mod, Output.
- Control: LFO, Envelope (ADSR with linear and exponential curves), Beat (BPM clock with start/stop inputs), Random (trigger-driven and free-run), Quantizer, Sample & Hold, Step Sequencer (piano-roll editor with key/scale/octaves, loop, start/finished outputs), Clock Divider, Shift (trigger delay).
- Monitoring: Audio Scope (triggered capture with rising/falling/free-run trigger and clip indicator), Control Scope (fixed min/max range with clip indicator), Meter (VU with LED-style bars).
UI
- Full-window graph canvas with a floating logo watermark, auto-hiding icon toolbar, and slide-out drawers (patches, modules, collab).
- Dark theme; About dialog with version.
- Inspector with auto-generated controls per module, log scaling on appropriate parameters, reset-to-default, and bespoke editors (waveform, envelope curve, trigger, noise type, ADSR).
- In-node UIs for scopes, meters, mixer faders, sequencer piano roll, and early input controls.
- Graph editor with create/delete/connect/reconnect, drag-to-create from the module browser, port-type validation, and edge disable/enable.
- Transient scope on selected edges for ad-hoc inspection.
- Patch save/load with a patch browser and built-in sample patches (Smorgasbord, Ambient #1, Simple mini-synth).
- Mobile and touch support throughout — touch-aware toolbar, drag-to-create on touch, audio resumes on first interaction.