Changelog
Stagewright follows Semantic Versioning with the convention that the user gets every 1.x release free and new majors (v2, v3, ...) are paid upgrades with substantial discounts for existing owners.
This page lists the user-visible changes per release. The full commit log lives on GitHub.
1.12.1 (2026-07-18)
Fixed
- Data-loss guard on rack switching: the silent "reopen where I left off" save could fire against a stalled rack switch and rewrite the project file with an empty front panel, controller map and strip labels. It now requires the switch to have fully hydrated before it will touch the file.
- Open With / double-click opens that file: opening a
.swprojfrom Finder used to just bring the app forward with the previously loaded project. The opened file now wins — on cold launch it beats the last-project restore, and in a running app it goes through the same unsaved-changes flow as File ▸ Open. - Finder icon binding: the app now exports a proper UTI for
.swproj, so the document icon can no longer be claimed away by stale registrations from old build DMGs. - Boolean Control card is wide enough for its own title.
Added
- Loaded-file chip in the topbar: the current project's name sits before the view tabs, with a dot when there are unsaved changes and the full path in its tooltip — so with several rig files around you always know which one you're editing.
1.12.0 (2026-07-18)
Added
- Guided rig setup: creating a new rack (or launching for the first time) can now open a wizard that builds the audio graph for you. Make a sound on each input and Stagewright identifies it from the live signal; MIDI instruments are matched to their audio returns by correlating what you play with what it hears. Pick a role per input (vocal, guitar, bass, keys, drums…) and the wizard wires a sensible chain per instrument, groups multi-channel instruments under their own named mixers, and fans everything into a Speaker Mixer. It finds your speakers with a test tone instead of assuming output 1-2, works with aggregate devices and MIDI-only rigs, and every step is skippable — it never builds anything you didn't confirm.
- Native plugin set: seven built-in processors so a fresh install makes sound with zero third-party plugins — Gate, Compressor, Reverb, Keys (E-Piano and Piano voices), Drum Kit (Electronic and Acoustic kits), Guitar Amp and Bass Amp. Lightweight starters, not replacements for your professional plugins. Each renders as real hardware on the canvas — chicken-head amp knobs, grille cloth, rack-mount plates — with controls usable right on the card.
- Plugin-browser icons: every built-in now carries its own icon (the Patch mark + a purpose glyph) in the plugin browser.
- .swproj document icon: project files show a Stagewright document icon in Finder instead of the generic blank page.
Fixed
- Rack switching / deletion no longer hangs the loading cover, and deleting the active rack fully resyncs the engine state (plugins, wires, LEDs, songs).
- Live reload while audio plays: reopening the UI against a running engine no longer shows empty panels; the session resyncs in place and the audio never stops.
- MIDI devices powered on late are detected: the engine now monitors all MIDI inputs (hot-plug included), so the wizard and the Devices panel see a keyboard you switch on mid-session.
- Plugin editor windows raise on first open instead of opening behind the main window until a second click.
Changed
- Your last rack reopens silently on launch: the app restores the rack you were using without an "unsaved changes" interrogation on the way in.
1.11.2 (2026-07-16)
Fixed
- Sets survive rack switches: songs, setlists and your position in the set are project state, but switching racks (or recalling a song captured on another rack) reloaded them from the last saved file — wiping unsaved sets and snapping the strip back to song 1. The set now rides along on every rack switch and the strip keeps its place.
- Paste conversion accepts mixed sheets: a sheet with a ChordPro header ({title:}, {key:}…) over a plain chords-over-lyrics body used to paste unconverted. Directives now pass through and the body converts; repeat markers on chord runs ("Dm A7 Dm (x2)") are kept.
- False "could not be verified" on activation: the licence panel judged the outcome on a fixed 200 ms timer; on slower machines a successful activation could outlive it and read as a failure. The panel now waits for the engine's actual verification report.
Changed
- The licence-key field's example placeholder is now visibly a placeholder (XXXXX-…), not something that could be mistaken for a working key.
1.11.1 (2026-07-15)
Fixed
- Dark rectangles behind every control (1.11.0 regression, desktop and remote): the fix that stopped rack U-lines showing through modules painted each control's cell opaque, which punched dark boxes into the panels underneath. Cells are transparent again; panels themselves now composite an opaque base (pixel-identical on the plain faceplate), so U-lines still stop at module edges without any side effects.
- Dense-grid typography (most visible on iPad portrait): the Label widget no longer wraps onto two lines, and control captions on very narrow cells clip to their own footprint instead of merging with their neighbours ("MUTESOLOBPS").
1.11.0 (2026-07-15)
Added
- Songs & setlists: a song is an instant snapshot of your rack's values (plugin bypass states, parameters, mixer gain / pan / mute / solo / BPS), recalled in milliseconds with a short parameter glide, no plugin reloads. Setlists order songs and may cross racks (that triggers a normal rack switch). Capture from the current state, re-capture after tweaking, and mark any card "Recalled by songs: off" in its inspector to protect venue-calibrated settings from recall.
- The Set tab: a fifth view for show preparation: setlist on the left (reorder, remove, capture), lyrics editor in the centre, song details on the right. One click flips it into display mode: lyrics with chords above, performance cues, next-song tease, and big prev/next buttons that actually recall the song.
- Song strip: a slim bar above the statusbar on every view while a setlist is active: position, prev/next, song key / tempo, and a "live differs, re-capture" chip when the rig has drifted from the captured state.
- ChordPro lyrics: songs carry a ChordPro sheet ({title}, {key}, {tempo}, {comment} cues, guitar-tab blocks). Pasting a plain "chords over lyrics" sheet (the format every tab site uses) into the editor converts it to ChordPro automatically.
- MIDI program change recalls songs: program N selects and applies song N of the active setlist. Bind your foot controller's patch buttons and step through the set hands-free.
- Songs on the remote: the iPad front panel gains a bottom bar with the set position, prev/next, song name and key / tempo, plus a full-screen lyrics reader (chords above lyrics, tab blocks, next-song tease, giant prev/next). Navigation on the iPad recalls on the rig, and the desktop and all remotes stay in step.
- View-only remotes by default: the remote's bottom bar has a "view only / control" toggle (default view-only, remembered per device). Until control is switched on, touches are ignored — a remote is safe to hand to anyone side-stage.
Fixed
- Remote connect could silence audio and flip inverted buttons (present since 1.9.0): connecting a remote replayed stale engine widget values into live parameters (hardware-MIDI moves update parameters directly, so the widget table lags behind). The remote is now strictly read-and-mirror; only deliberate touches write.
- Rack-unit separator lines no longer show through controls: the faint 1U/2U hairlines on the faceplate used to shine through the transparent regions of every module; they now stop at each control's footprint (they belong to the rack, not the controls). Especially visible on the remote.
- Front-panel typography: control captions sit 2px closer to their control, and the free-standing Label widget uses tighter font bounds on the remote so long words stop wrapping and colliding on iPads.
Compatibility
- Project schema v4: projects saved by 1.11.0 include songs and setlists and cannot be opened by older versions. Existing projects open and upgrade on save as usual.
1.10.3 (2026-07-15)
Changed
- The engine dot is now a control: when the engine is unhealthy, clicking it restarts the audio engine in place (your project stays open — same as ⌘⇧R, which was always there but undiscoverable); when healthy, clicking opens the Engine Log. The tooltip says which.
1.10.2 (2026-07-15)
Added
- Settings cog in the statusbar: a small gear at the far left (before the engine status) opens Settings — same modal as ⌘,.
- Complete third-party attributions: About ▸ Licenses now covers the bundled JavaScript layer (Monaco Editor, TypeScript, Vue.js, PixiJS, and the rest of the ~80 shipped packages, all under permissive licenses) alongside the existing engine and Rust notices.
1.10.1 (2026-07-14)
Fixed
- Boot screens showed build metadata in the version (e.g.
1.10.0+ga2027ee). The splash and loading cover now show the clean version; the full engine build string stays available in About ▸ Engine for support.
1.10.0 (2026-07-14)
Added
- Invert option on bound controls: a control can now show ON when its bound target is OFF and write the opposite of what it displays — the classic case being a lit "audible" button bound to a channel mute. The control, the engine widget mirror, and any hardware LED following it (AKAI bank buttons) all stay on the visual state; only the binding flips. Works for boolean and continuous bindings.
- Pitch-bend bindings: expression / pitch wheels (e.g. the MPK mini plus left wheel) can now be MIDI-learned and bound end to end. 14-bit values arrive normalized with centre at 0.5, lining up with centred controls out of the box. One wheel binding per channel.
- Statusbar view modes: the OUT cell can switch to a scrolling pulse-history of the master level (tall pulses tip into amber and red), and the CPU cell to a ~10-second sparkline coloured green / amber / red by load, with a separate toggle for the numeric percentage. Click either cell to switch; also in Settings ▸ Diagnostics.
- Save prompt on quit: quitting with unsaved changes now raises a proper Save and Quit / Quit without Saving / Cancel dialog — and ⌘Q actually honours it (it previously bypassed the check entirely).
- License in Settings: the licence panel (status, standing, activation, machine moves, emergency tokens) moved into Settings ▸ License; the statusbar tier chip opens it directly.
- Multi-line control labels (line breaks render under the control), labels sit closer to their control, and the component browser is organised under category headings.
- Nubisco branding: Space Grotesk (the corporate display face) across the wordmark, headings and boot screens; the topbar centres the brand like a hardware faceplate badge with the view tabs on the left; copyright footers on both boot screens and the About window.
Changed
- Boot screens: both the splash window and the in-window loading cover now render the same panel — same type, same always-present progress bar, honest phase captions with real numbers ("Scanning plugins 47% · Pro-Q 3", "247 plugins ready", "Loading rack · 40 of 54 modules").
- Readability: secondary text across the app was rendering as low-contrast grey-on-grey (settings hints, descriptions, engraved labels); every tier was lifted to readable contrast.
Fixed
- UI slowdown while turning hardware MIDI knobs: the engine emitted one event per CC with no throttling and the UI paid a reactive fan-out per event. Value events are now coalesced (latest wins, ≤30 ms windows, final value always delivered) and the frontend fan-out was tightened.
- Pads held their last strike: note releases now route through to the panel, so a pad lights with strike intensity and dies on release like the hardware LED. Latching buttons are unaffected.
- Sustain pedal / LED button never animated from MIDI (values arrived as numbers where the renderer expected booleans).
- Hardware LEDs wrong after loading a project: bound controls now reseed the widget mirror from their actual parameter state on load (invert respected), so AKAI lamps match the audible truth from the first moment instead of replaying stale saved state.
- Project showed "unsaved" right after boot (late boot-time mirror syncs were miscounted as user edits).
1.9.0 (2026-07-14)
Added
- Remote front panel (licensed installs): Settings ▸ Remote serves the performer front panel to iPads, phones and laptops on your local network — live meters, working controls, both directions. Scan the QR code (or open the friendly
http://<your-mac>.local:8712address) in any browser on the same Wi-Fi; a floating button puts the browser into full screen. While remotes are connected the desktop statusbar shows a cyan REMOTE chip (with a device count), and it briefly pulses "modified remotely" whenever a change comes in from a remote, so the operator always knows the console has other hands on it. Remote access is part of the paid licence; trial installs see an unlock prompt in Settings ▸ Remote. The LAN is the trust boundary in this first release — anyone on your network can reach the panel while enabled. - Pedalboard rack template: six stompboxes in a 1U row — delay, chorus, distortion, overdrive, compressor, and a live tuner — each in its own coloured enclosure with two knobs and a footswitch. Every pedal is a visual group, so it selects and moves as one box; delete what you don't need or duplicate a pedal to grow the board.
Changed
- Density-aware control labels: label and value-readout type now scales with the layout grid, so dense viewports (the remote client on an iPad, small desktop windows) no longer overflow labels into neighbouring controls. Desktop-sized grids render pixel-identical to before; overlong labels are ellipsized instead of colliding.
- Touch handling: knobs, faders, buttons, toggles and footswitches now own their touch gestures — dragging a fader on a touch screen no longer scrolls the page.
1.8.0 (2026-07-14)
Added
- Rack templates: the front panel's + Add rack button now opens a template gallery instead of only creating a blank rack. Three templates ship with the app — Band mixer (eight channel strips with gain / tone / balance, mute / solo / bypass, fader with L/R meters, plus a master section with per-interface output mutes), Guitar amp head (gain and three-band tone, presence / reverb / master, boost and power on a dark-tolex faceplate), and Keyboard controller (a 1U stage-keyboard surface: bender and mod, four knobs, four drawbars, four pads and an expression pedal on stage-piano red). Save your own racks as templates from the rack inspector (Save as template…); they appear in the same gallery. Templates carry layout, controls and colours — never plugin bindings or MIDI mappings, so they instantiate clean in any project.
- Rail finish: Settings ▸ Appearance switches the front-panel rack rails between brushed metal (the original) and plain oiled walnut — the wood-cheek look of vintage synths. Purely cosmetic, identical render cost.
- Settings search: the Settings dialog gained a search box that matches by name or by meaning — "wood", "fps" or "animation" all land on the right control.
Changed
- Settings dialog redesigned VS Code-style: category sidebar (Appearance / Back panel / Diagnostics) on the left, settings on the right, search on top, wider dialog. All existing settings carried over unchanged.
- Modal dialogs now dim and softly blur the application behind them, so the active dialog reads clearly against the dark stage UI.
Fixed
- Locked back panel no longer previews impossible edits. With the Edit / lock toggle locked, wire drags, card drags and marquee selection used to start visually and then snap back on release. They now never start, and the misleading affordances (grab cursor on cards, crosshair on ports) are gone while locked. Selecting cards, using the live controls inside them, panning, zooming and the minimap all still work. "Always unlocked" mode is unaffected.
1.7.0 (2026-07-14)
Added
- Round-trip latency measurement tool in the Devices inspector (Audio devices ▸ Measure…). Patch a loopback cable from any output of your audio interface back into any input, and Stagewright measures the real round-trip latency, including the driver and converter overhead the buffer-size estimate cannot see. No need to empty your project first: the running rack is bypassed for the ~2 second measurement. Results are remembered per device, sample rate and buffer size, and shown next to the theoretical estimate in the Audio devices panel.
1.4.0 (2026-07-10)
Fixed
- Blueprint renderer + performance: restored the GPU (WebGL) blueprint renderer, which had silently fallen back to a slow software path in 1.3.0. Wire activity animations return and the back canvas runs at full frame rate again.
- Splash progress: the loading screen now shows a "Starting audio engine" phase and a real counting progress bar, instead of a stuck "0 / N".
Added
- Meter resolution setting (Low / Medium / High) for the LED level meters, on both the back-panel mixers and the front-panel meters.
- GPU-unavailable warning in the statusbar when the display can't provide WebGL (for example some remote-desktop sessions), so reduced performance has a visible reason.
Changed
- Auto-arrange produces straighter signal paths. A larger subsystem-grouping rework (each chain in its own lane) is in progress for 1.4.1.
- Meters and the VU needle / knob dial now animate on the GPU compositor for smoother, cheaper redraws.
Unreleased
Pre-1.0 development. Track-along log of features as they land.
Added
- Full Blueprint canvas with auto-arrange, drop-on-wire splice, wire-level dBFS hover, chain trace, wire visualization modes.
- Performer view with knob / fader / button / toggle / led / pad / expression-pedal / sustain-pedal / drawbar / vumeter / bargraph / meter / label / panel / led-button / tuner / metronome widgets.
- Tuner and Metronome 1U front-panel widgets bound to back-canvas cards.
- Channel-mixer per-strip user labels.
- TypeScript scripting in Monaco with sandboxed QuickJS runtime.
- Plugin picker with grid view, format chips, collapsible vendor groups, auto-expand on search, localStorage persistence.
- Plugin bypass as a bindable target.
- MIDI Monitor panel with per-device picker (replaces back-canvas MidiMonitor card).
- Diagnostics bottom panel with engine log + MIDI monitor tabs; per-line color taxonomy; Cmd-C copy.
- Commercial licence terms (perpetual, sold direct).
Fixed
- VST3 scan no longer trips
JUCE_ASSERT_MESSAGE_THREAD. - Project re-hydration no longer leaves duplicate midi-in nodes.
- DMG-built engine no longer trapped on JUCE assertions (release-build path).
- DMG-built engine no longer shipped Intel-only flag (LSRequiresCarbon stripped post-bundle).
- Engine sidecar runs LSUIElement so it can't be Cmd-Q'd out from under the GUI.
- TCC mic prompt fires from the foreground GUI under the shared bundle ID; engine inherits the grant.
- Hardware MIDI keeps driving plugin parameters on every view (the widget bridge moved from PerformerView to app scope).
- Radio-group exclusivity now applies to MIDI / script writes, not just mouse input.
- Tooltips: viewport auto-flip, dark + primary border styling, dismiss-all on view switch, show-timer race fixed.
- Audio-thread crackle mitigated via
THREAD_TIME_CONSTRAINT_POLICYon the message thread. - Splash retention until first paint is stable.
1.0
(Coming soon.)