Skip to content

Pit roadmap

Stardust Pit ships release by release under semantic versioning. v1.0 is the public release; every pre-1.0 version is a real, tagged, exit-criteria-bound release on the path to it. There is no “polish phase” — polish is v0.15.0, and after that the open beta becomes 1.0.

How to read this roadmap

  1. Each version has a theme and explicit exit criteria. A version doesn’t ship until its exit criteria are met. Adding scope mid-version means slipping the version, not silently re-defining it.

  2. Status badges reflect ship state. Shipped is tagged on GitHub. Next is the active version. Planned is on the roadmap with a target version assigned. v1.x and v2.0+ are post-1.0 backlog.

  3. Refinement happens at the start of each version. Before code is written for any version, the user and Claude walk through the scope in a refinement session and lock in concrete UX, data-model, and exit-criteria details. The bullets below are the committed-to scope, not the only scope.

  4. A post-version review happens after each ships. Items in scope that didn’t land become tickets in the next version. Items that proved unnecessary get removed. The Tech Debt section captures things we ship anyway.

  5. No hard deadlines. Estimates are sized in engineering weeks, not calendar weeks. Total path to v1.0 is roughly 46 weeks of engineering — calendar time depends on how much of each week is engineering. There is no committed date.

At a glance

v0.5.0 — Multi-plugin chains

Shipped · 2026-05-26

Engine consumes full patch graphs. Native 3-band EQ + transpose + mix nodes. ADR-0006 accepted.

v0.6.0 — Engine completeness

Next · ~2 weeks

Hardware MIDI bindings, plugin GUI hosting, engine Panic, scan caching, PR CI.

v0.7.0 — Plugin sandboxing

Planned · ~6 weeks

Out-of-process plugin hosting. Watchdog, crash recovery, quarantine, soak tests. ADR-0002 implementation.

v0.8.0 — Transport + MD essentials

Planned · ~4 weeks

Per-song + per-bar tempo, click engine + bus, MIDI clock send, tap tempo, pre-show validation.

v0.9.0 — Three-mode shell + splash + wizard

Planned · ~3 weeks

Setup/Program/Perform modes wired, splash screen, New Show wizard, settings window, autosave.

v0.10.0 — Library + Pit Mixer

Planned · ~5 weeks

All-patches-as-references data model, drawing primitives, image widget, multi-channel audio input.

v0.11.0 — Perform mode + widgets

Planned · ~4 weeks

Layout editor, full widget catalog, conductor cam (USB webcam), Live fullscreen, layout templates.

v0.12.0 — Click editor + balance

Planned · ~4 weeks

Click track editor (vamps, codas, cue points), LUFS-based balance tool, A/B compare, trim suggestions.

v0.13.0 — Backing tracks + bundle format

Planned · ~5 weeks

Audio decoding via Symphonia, song transport, .stardustshow/ bundle format, MIDI recording + audio bounce.

v0.14.0 — Native SFZ player

Planned · ~2 weeks

Native instrument.sfz node, bundled GM piano, SFZ 1.0 opcode coverage, foundation for future sampler.

v0.15.0 — Polish + Extension API + release CI

Planned · ~4 weeks

Onboarding, theme editor, signed installers, crash reporter, telemetry, extension API v1, Stream Deck.

v1.0.0 — Public release

Planned · ~2 weeks beta

Open beta (10–20 friendly MDs), Discord, beta feedback addressed, public launch, auto-update.


v0.5.0 — Multi-plugin chain hosting Shipped

Tagged: v0.5.0 on 2026-05-26 · commit 20bfeaa (pit), 8eeff2f (core).

The engine stops short-circuiting to “first instrument” and walks the full patch graph. A topo-sorted, allocation-free Plan runs every block. Native nodes for 3-band stereo EQ, transpose, and mix ship in stardust-core so the engine has at least one full chain to exercise.

  • engine_graph Tauri command builds a Plan from a Patch
  • ✅ Native 3-band stereo EQ (low/mid/high crossover, allocation-safe)
  • ✅ Native transpose + mix nodes
  • ✅ Topo-sort + allocation-safe Plan::process per block
  • ✅ ADR-0006 accepted

Tech debt carried into v0.6.0

These shipped intentionally — most get addressed by upcoming version work:

  • Patch-switch latency scales with plugin count → v0.7.0 warm-pool work mitigates
  • Plan rebinds only on plugin-choice change → v0.11.0 live param editing handles config-edit rebinds
  • PluginEntry leaks intentionally via mem::forget → cleaned up by v0.7.0 sandboxing rewrite
  • Live device change tears down plan → fixed by v0.6.0 engine_rebind_routing
  • EQ crossover frequencies are constants → revisit during audio.eq settings panel work
  • Engine self-test signal is a C6 MIDI note (≈1046.5 Hz) at full velocity, not the spec’d free-running 1 kHz sine at −18 dBFS — RMS criterion passes comfortably; acceptable as-shipped (stardust-pit#9); revisit if the diagnostic gains level-calibration duties, no version planned

v0.6.0 — Engine completeness Next

Theme: Close the open audio-path items v0.5.0 left behind. Patch-switching becomes seamless; hardware controllers wire to nodes one-by-one; CI starts running on every PR.

Size: ~2 weeks (revised ~3 with rig-lite). Status: In progress — 6/11 original scope shipped (#10 CI, #11 orphan cleanup, #9 testtone, #1 rebind, #2 per-source binding, #3 Panic). Re-sequenced 2026-07-06: a minimal rig-lite slice (#122) pulled forward from v0.10.0 — #5 and #7 already assumed a real rig surface, and #2’s per-node bindings are the interim model (device identity belongs on the rig component; per-patch bindings accrue migration debt the longer Program work continues without it). Refined 2026-07-06: #122 ships as one batch with #4 (scan caching), #117 (Settings in shell), and #121 (EnginePanel deletion) — the batch retires the EnginePanel strip entirely. Next: implement the batch, then #5 → #7; #6/#8 close out the version.

Scope

  • engine_rebind_routing ✅ shipped 2026-07-03 (stardust-pit#1 → PR #118) — swap MIDI/audio device without tearing down the Plan. The Plan travels between cpal streams via a Drop-carrier: no plugin reloads, held voices intact. Device identity → rebind; sample-rate / buffer-size → full rebuild. On failure the previous device stays (or is restored) active.
  • Per-source-node hardware MIDI binding ✅ shipped 2026-07-03 (stardust-pit#2 → PR #118) — pedals, wheels, pads, switches, knobs, faders bind to specific source nodes (no more “binds to first source.keyboard”). Fan-out on overlap; deviceId: null = any device (back-compat). Device identity is midir’s opaque port id + name fallback — see tech debt for the (vendor, product) drift.
  • Engine-level Panic ✅ shipped 2026-07-03 (stardust-pit#3 → PR #118) — per-instrument voice tracker; panic flushes tracked voices with explicit note-offs and resets sustain, CC123, pitch bend, mod wheel, and aftertouch on all 16 channels within one audio block. Panic button + Shift+Esc in the shell.
  • Rig-lite (Setup → Rig, minimal) — pulled forward from v0.10.0 (#122, 2026-07-06; refined 2026-07-06): real rig screen behind the existing Setup tab; rig component CRUD persisted in the show; device binding at the component level reusing #2’s engine plumbing; full-mock MIDI Learn (device/channel/CC-source capture, keyboard key-range, per-pad note grid — assignments stored now, per-note routing consumed in v0.10.0); source nodes reference components (rigComponentId is the node’s identity — no node-level binding concept survives; a node with no component is silent and flagged). Schema v2→v3 migration auto-converts #2-era per-node hardwareBinding blobs into rig components and deletes the field. Engine opens the union of rig-bound devices session-wide — patch switches never touch MIDI I/O. Explicitly excludes compounds, widget editor, velocity curves, per-pad widget config (all stay v0.10.0). Exit criteria: a component bound once in Setup feeds every referencing source node across patches with no per-patch re-binding; rig edits rebind (not restart) the engine; #2-era shows migrate on load and play unchanged. Ships as one batch with #4 + #117 + #121 so the EnginePanel strip can be deleted outright.
  • Plugin scan caching — mtime-keyed; replaces today’s eager-and-uncached scan
  • Button/switch rig component — configurable action (panic, song advance, tap tempo, custom); depends on #122
  • Plugin GUI hosting — CLAP GUI extension; docks in patch editor bottom panel by default, per-plugin pop-out to floating Window
  • Learn Master tool — re-learn all rig components 1-by-1
  • Default Windows audio — ASIO when vendor driver detected AND input + output are the same device; WASAPI Exclusive otherwise (including split I/O); WASAPI Shared as fallback
  • Sine synth → instrument.testtone ✅ shipped 2026-07-03 (stardust-pit#9 → PR #116) — hidden from palette; only user surface is Settings → “Run engine self-test”. Bumps stardust.patch + stardust.show schemas to v2 with a v1→v2 rename migration. Engine topo now lifts MIDI sources ahead of consumers so single-block MIDI delivery is guaranteed.
  • GitHub Actions PR CI ✅ shipped 2026-06-01 (stardust-pit#10) — Rust matrix mac/ubuntu/windows fmt/clippy/check/test; TS eslint/prettier/tsc/vitest; Storybook build. Cross-repo workflow in stardust-core, sibling-checkout for the path-dep.
  • Tech debt cleanup — fix tsc --noEmit ✅ (rolled into #10); delete orphaned sound/ components ✅ shipped 2026-06-01 (stardust-pit#11 → PR #115)

Exit criteria

  • A patch with hardware controllers (sustain, expression, mod wheel, footswitch) and a plugin GUI works end-to-end with no engine restarts when changing audio device
  • Plugin scan does not re-scan on every launch
  • PR CI is required on main for both stardust-pit and stardust-core
  • All v0.5.0 tech-debt items above are either fixed or have a re-targeted future version

v0.7.0 — Plugin sandboxing Planned

Theme: Implement ADR-0002. Plugins run in separate processes; a crashing plugin no longer crashes the host. This is the single most important reliability investment in pre-1.0.

Size: ~6 weeks. The biggest pre-1.0 version. Almost entirely engine work.

Scope

  • Each plugin (or small co-loaded group) runs in a child process, communicating via shared-memory IPC
  • Watchdog process supervises the engine
  • Plugin crash detection → engine-level Panic → restart-or-silence policy
  • Quarantine after 2 crashes per session (user notified, plugin disabled for the show)
  • Hot-plug resilience — USB MIDI / audio device disconnect handled gracefully
  • Performance Lock mode — disables risky operations during a show
  • Show plugin requirements tracking — auto-computed; missing-plugin icons on patch name + node; greyed-out missing nodes; “find this plugin” link via CLAP plugin.url metadata
  • 4-hour soak test in CI on macOS + Windows runners

Exit criteria

  • Killing a plugin’s child process (deliberate kill -9) does not crash the host; affected patch falls back to silence with a clear UI banner
  • Soak test runs nightly without engine deadlock or memory growth
  • A show file shared from a friend who has plugins you don’t shows missing-plugin warnings everywhere those plugins are referenced, with one-click “find this plugin”
  • ADR-0002 moves from “Accepted, planned” → “Accepted, implemented”

v0.8.0 — Transport + MD essentials Planned

Theme: Tempo, click, and the engine clock. Things a musical director needs for any rehearsal or runthrough.

Size: ~4 weeks.

Scope

  • Per-song + per-bar tempo — no master-show BPM; v0.12.0’s click editor handles bar-by-bar
  • Engine transport state — stopped/playing/paused/position; first-class in the engine
  • Click track engine node — drives a dedicated bus output (separate from main mix)
  • MIDI clock send — for external rig sync
  • Tap tempo — via button/switch rig component
  • Per-patch transpose UI — surfaces the transpose node config in a usable way
  • Pre-show validation dashboard — first version; refined in v0.9.0 (gates Live entry) and v0.11.0

Exit criteria

  • A song with a click track and a tempo change at bar 17 plays correctly with the click changing tempo at that bar
  • External hardware can sync to Pit’s MIDI clock send
  • Tap tempo on a footswitch sets the current song’s BPM live

v0.9.0 — Three-mode shell + splash + wizard Planned

Theme: Wire the Setup / Program / Perform mode model into the actual app. Replace the diagnostic stand-in. Make first launch make sense.

Size: ~3 weeks.

Scope

  • ModeSwitcher wired into App.tsx — Setup, Program, Perform as real screens
  • Splash screen — recent shows + New Show + Open Show
  • New Show wizard — 6 steps: metadata, audio I/O, MIDI device detect, pre-add rig components, songs, preferences
  • Settings window — floating, not a fourth mode
  • Setup → Show Settings screen — metadata, buses, master controls, autosave preferences
  • Production-version metadata — handles revivals (Production / Source / Distribution structure)
  • Native file menu — File / Edit / View / Window / Help. No mode switches in the menu bar.
  • Autosave — default on, user pref to disable
  • Close-blocker on unsaved changes
  • “What’s new” splash on first launch after update (with “don’t show again”)
  • Theme picker — Light / Dark / System. Full theme editor is v0.15.0.
  • Concept doc rewrite — delete edit-vs-live, add setup-program-perform (done as part of doc rewrite ahead of this version)

Exit criteria

  • First launch shows the splash; New Show wizard produces a valid .stardustshow
  • Closing the app with unsaved changes prompts to save (or autosave has already kicked in)
  • The three modes are real screens with real navigation, not placeholders

v0.10.0 — Library + reuse + drawing + Pit Mixer Planned

Theme: The data-model unification version. Every patch is a reference to a library entry; library entries scope to show or global. This is the foundation for the v1.x marketplace + the v2.0+ collaboration story.

Size: ~5 weeks.

Scope — data model

  • All-patches-as-references — single model. Every patch lives in a library entry; every song instance is a reference.
  • Library scope — single scope: "show" | "global" field on each library entry
  • Reference overrides — split into Basic and Advanced:
    • Basic: name, notes, tempo, transpose, trim, color, tags
    • Advanced: MIDI channel offset, bus routing override, plugin param overrides, FX bypass, on-enter/exit triggers, custom CSS class
  • Graph edits trigger merge UI — per-instance update/keep/three-way-merge dialog
  • Orphan handling — deleted library entry → references freeze last graph as orphan.snapshot; banner + re-link / save-as-new / keep-snapshot options

Scope — UI

Rig basics (component CRUD, device binding at component level, basic Learn, real Setup → Rig screen) moved to v0.6.0 as rig-lite (#122, 2026-07-06) — this version builds the rest on top of it:

  • Rig component widget editor — grid sub-screen for compound widget appearance
  • source.compound node kind
  • Live preview — shows full configured controller widget (keys + wheels + sustain); excludes non-tone controllers
  • Drawing primitives — box, line, divider (weight / color / style)
  • Image widget
  • Snap-to-grid — default on

Scope — Pit Mixer

  • Pit Mixer screen — multi-channel audio input with per-channel meter / gain / pan / mute / solo, mixed to MD’s IEM bus
  • USB-multitrack only for v1.0 — Dante/AVB deferred to v2.0+

Scope — CI

  • Visual regression — Storybook via Chromatic or Percy

Exit criteria

  • A library entry deleted from disk produces orphan banners on every show that references it, with working re-link
  • Editing a library entry’s graph while two song instances reference it triggers the merge dialog for each
  • The Pit Mixer routes 8+ channels of USB-multitrack input to the MD’s IEM mix correctly

v0.11.0 — Perform mode + widgets + conductor cam Planned

Theme: The Live view becomes real. Users build their own performance layout from the widget catalog. Conductor cam takes one input source for v1.0 (USB webcam) — RTSP / IP / NDI is v2.0+.

Size: ~4 weeks.

Scope — layout editor

  • Layout editor wired into App.tsx
  • Grid editor — move / resize / rotate / z-order
  • Global default layout + per-song override — cascading
  • Layout templates — Blank, Minimal, Cabaret, MD Console
  • Live fullscreen mode
  • Pre-show validation gate before Live (overrideable)
  • No hard-forced widgets — every UI element is user-placed

Scope — widget catalog (refined during v0.11.0 spec session)

Existing (carried forward): keyboard, pad, footswitch, button/switch, expression pedal, sustain pedal, rig component instance, song/patch list (full + condensed), dynamic text, static text, volume meter, transpose indicator, click indicator, next-patch preview, panic, parameter favorite, show notes, time elapsed.

New in v0.11.0:

  • clock (with pause + splits — manual / auto-from-songs / auto-from-cuepoints)
  • notepad
  • engine monitor (CPU / RAM / xrun / peak / MIDI activity / plugin status / crash count / latency / uptime — no thermal)
  • transport
  • per-track mute
  • conductor cam (USB webcam only)
  • pad bank
  • macro knob
  • plugin parameter knob / slider
  • tap tempo button
  • crossfader
  • solo / mute per bus
  • send-level slider
  • bus meter
  • spectrum meter
  • quick action button
  • big text
  • bar/beat counter
  • section banner
  • custom markdown
  • cue countdown
  • recording indicator
  • status banner

All MIDI widgets are reactive — they show live hardware state in Live.

Scope — conductor cam

  • USB webcam input only
  • Overlay info — song / patch / bar / beat / tempo / clock / custom text
  • Pop-out floating Window for second-monitor display

Exit criteria

  • A user can build a Cabaret-style 4-song layout from scratch in <15 minutes
  • The widget catalog covers every entry in the committed list
  • Conductor cam runs at 30fps from a USB webcam with overlay info and a pop-out window

v0.12.0 — Click track editor + balance tool Planned

Theme: Two pro-MD tools. The click track editor turns tempo into a first-class authorable artifact. The balance tool turns “is this patch louder than that one?” into a measurement, not a guess.

Size: ~4 weeks.

Scope — click track editor

  • No bake step — always-live
  • Bar-by-bar tempo — numeric BPM, note=BPM notation, musical terms
  • Tempo curve graph with manual point editing (linear / instant / ease-in / ease-out / manual)
  • Vamps, repeats, codas, cue points
  • Rits / ralls via region selection
  • Audition with playhead scrub
  • SMF Type 1 export / import — tempo track + bar markers + cue points; vamps/repeats encoded as marker names (DAWs see them as markers but won’t loop)

Scope — balance tool

  • LUFS measurement via the ebur128 Rust crate, offline render (no speakers)
  • Intra-patch (per-instrument-node within a patch)
  • Cross-patch (within a song)
  • Show-wide audit
  • True Peak (dBTP) + Loudness Range (LRA) per patch
  • Reference sequences — sustain / attack / dynamic
  • Velocity-normalized at v80 for v1.0 (velocity-curve measurement is v1.x backlog)
  • Per-patch trim suggestions + manual override
  • Tilt EQ per patch — single-knob low / mid / high
  • A/B compare against a reference patch

Exit criteria

  • A user can author a click track for a 3-act musical, with vamps + codas, and export it to SMF that opens correctly in a DAW
  • The balance tool flags a too-loud patch in a show and provides a trim suggestion that, when applied, brings it within 1 LU of the show median

v0.13.0 — Backing tracks + bundle file format Planned

Theme: Backing tracks are the moment the file format needs to grow up from a single JSON to a bundle directory. We migrate the format here because backing tracks force the issue anyway.

Size: ~5 weeks.

Scope — backing tracks

  • Audio file decoding via Symphonia — mp3 / wav / flac / ogg
  • Per-song tracks tab — file, label, stem type, bus output, gain, pan, mute, start offset
  • Song transport — play / pause / stop / seek / position
  • Cue points within tracks
  • Patch transport triggers — onEnter / onExit per patch (optional, off by default)
  • Vamp interaction — vamp regions in click track + transport loops them; footswitch signals “end vamp at next loop point”
  • MIDI clock sync to transport BPM
  • Sample-accurate cue jump

Scope — bundle file format

  • .stardustshow/ folder with extension — replaces single JSON
  • Contents: show.json, libraries/, assets/audio, assets/images, assets/samples, thumbnails/
  • Opt-in zip export for sharing
  • Schema migration from v1 JSON → bundle, per ADR-0003

Scope — recording

  • MIDI recording + audio bounce — captures MIDI input live, plays through patches, renders to audio file
  • No piano roll editor in v1.0 (v1.x backlog)

Exit criteria

  • A show with backing tracks + a click + a MIDI sync target plays back sample-accurate
  • Old single-JSON shows open and migrate cleanly to bundle format
  • Vamp regions in the click editor loop the transport correctly

v0.14.0 — Native SFZ player Planned

Theme: Stardust ships with a real instrument by default. No “first launch and there’s no sound until you install a plugin.” Bundled GM piano is built in.

Size: ~2 weeks.

Scope

  • Native instrument.sfz node in patch graph — lives in stardust-core, in-process
  • SFZ 1.0 opcode support minimum; key 2.0 opcodes targeted for future sampler
  • Bundled GM piano SFZ (~3MB) auto-loads as default
  • No standalone CLAP — sforzando already exists; CLAP users use that
  • Establishes the foundation for the v2.0+ custom sampler and SFZ-pack marketplace

Exit criteria

  • A brand-new show with no plugins makes piano sound on first key press
  • The SFZ player passes a regression test suite against a reference SFZ pack

v0.15.0 — Polish + extension API + release CI Planned

Theme: Everything that makes a 1.0 a 1.0. Installers, signing, telemetry, accessibility audit, the extension API, and the tech-debt sweep.

Size: ~4 weeks.

Scope — polish

  • Onboarding tour — first-launch
  • Theme editor — full color picker, contrast checker that fails sub-AA themes, save/share themes
  • Performance profile pass on a 4-year-old laptop
  • Accessibility audit — WCAG 2.2 AA, full keyboard nav, screen reader, focus indicators, reduced-motion, live regions

Scope — release engineering

  • Signed/notarized installers — macOS + Windows + Linux AppImage
  • Release CI/CD pipeline — tag → build → signed artifacts → GitHub Releases
  • Crash reporter (opt-in) — GlitchTip or Sentry
  • Telemetry (opt-in, aggregate-only)

Scope — content

  • 5 demo shows bundled — G&S public domain + community + tech demo
  • Documentation site full coverage
  • Tutorial videos — 3–5 short screencasts

Scope — extension API

  • Extension API v1 — hybrid TypeScript + WASM, non-realtime
    • UI widgets
    • Importers / exporters
    • Custom commands
    • Hardware controllers
  • ADR-0007 — Extension API architecture
  • Stream Deck support — bundled example extension
  • Latency Budget doc — per-API latency, hardware recommendations, what’s improving

Scope — debt

  • Tech debt sweep — anything not naturally cleaned by another version

Exit criteria

  • Signed installers download from GitHub Releases and run without OS scary-dialogs
  • The accessibility audit produces zero blocking findings
  • Stream Deck example extension installs from the extension API and works
  • Tech debt list (below) is either resolved or explicitly deferred with rationale

v1.0.0 — Public release Planned

Theme: Ship.

Size: ~2 weeks of beta window before public.

Scope

  • Open beta — 10–20 friendly MDs, 2–3 week window
  • Discord server + GitHub Discussions organized
  • Beta feedback addressed
  • Public launch
  • Auto-update via Tauri’s built-in updater

Exit criteria

  • Beta MDs report Pit is usable for a real show
  • No P0 bugs from beta open
  • Auto-update tested end-to-end on macOS + Windows

v1.x backlog v1.x

Features that need v1.0 to land first but are explicitly committed for a v1.x point release:

  • Velocity-curve balance measurement — 3-point at v40 / v80 / v120
  • Piano roll editor for recorded MIDI tracks
  • Plugin library UX polish — vendor grouping, favorites, tags, search
  • Full DAW MIDI import — multi-track SMF → click + per-instrument tracks
  • Layout templates expansion — more starting points
  • AU plugin hosting — if not in v1.0 (user tentatively wants in v1.0 if scope allows)
  • Silent patch change with reverb tails — keep the outgoing plugin alive + rendering for N seconds while the incoming patch fades in (MainStage’s reverb-tail-through-patch-change is the bar). The v0.7.0 sandboxing process model is explored as a path; full implementation likely lands here in v1.x.

v2.0+ backlog v2.0+

Speculative or scope-too-large-for-1.x. Named so the direction is visible; commitment level varies.

Pure-Rust VST3 host

stardust-vst3 extracted as standalone crate. ~3–6 months. Removes the v1.x C++ shim.

Pure-Rust AU host

stardust-au, macOS-only. ~4–6 months.

Realtime WASM extensions

Custom DSP / graph nodes. Verified realtime contract. Extends the v0.15.0 extension API.

Marketplace

Paid + free content via Lemon Squeezy or Polar.sh (Merchant of Record). ~3–4 months dedicated.

Community share hub

Free anonymous sharing. v1.x bridge step before marketplace.

Cloud sync + collaboration

CRDT-backed via Automerge. ~6 months.

Hot-spare rig sync

LAN-primary, cloud-fallback.

Multi-keyboardist LAN sync

Multiple Pit instances on a stage staying in lockstep.

Show Control

MSC + OSC + Art-Net/sACN + LTC + MTC + show control panel. ~8–12 weeks. Turns Stardust into the ecosystem hub.

Mobile companion

Tauri Mobile, LAN remote.

Federation / self-hosted marketplace

Run your own instance.

Advanced cue system

MSC deeper, QLab bidirectional, cue list timeline.

AI sound search

Natural-language search across plugin presets + library.

Audio input rigs

Guitar / bass / vocals / winds via NAM / Guitarix / AIDA-X / Neural DSP.

Plugin bundles + one-click installer

Curated plugin sets that install together.

Custom sampler

Record / import → SFZ generation. Builds on v0.14.0.

DMX / lighting

Was dropped from v1.0 scope. Revisit if Show Control unlocks demand.

Conductor cam enhancements

RTSP/IP, NDI, capture-card UI affordance, virtual webcam streaming output.


Tech debt

We ship debt intentionally when the cost-of-fixing-now beats the cost-of-fixing-later. This list is the audit trail. Anything not naturally resolved by a later version gets explicitly addressed (or explicitly deferred) in v0.15.0.

Carried in from v0.5.0

ItemWhy we shipped itCleanup target
Patch-switch latency scales with plugin countMulti-plugin shipped first; warm-pool needs sandboxingv0.7.0
Plan rebinds only on plugin-choice change (not config edits)Edge case; live param editing not in scope yetv0.11.0
PluginEntry leaks via mem::forgetCheaper than fighting Rust lifetimes pre-sandboxingv0.7.0
Live device change tears down planFixed by engine_rebind_routing (stardust-pit#1 / PR #118)✅ v0.6.0
Hardware MIDI binds to first source.keyboardFixed by per-source binding (stardust-pit#2 / PR #118); also fixed a latent bug where injected MIDI re-distributed every block✅ v0.6.0
EQ crossover frequencies are constantsSettings panel is a bigger projectv0.15.0 polish
Plugin GUI hosting missingEngine-graph was the priorityv0.6.0
Velocity / sustain on preview keyboard (#18)Moved out of v0.6.0 during refinement — not engine-completeness scopev0.10.0
QWERTY mapping on preview keyboardPolish, deferredv0.15.0
Dirty-tracking is a dot, not a close-blockerPre-shell model — proper UX needs the shellv0.9.0
One show seeded; no New Show / Recent Shows UISplash + wizard live in v0.9.0v0.9.0
tsc --noEmit fails on tsconfig project-references bugFixed in stardust-pit#10✅ v0.6.0
Plugin metadata scan eager + uncachedScan-cache is a v0.6.0 deliverablev0.6.0
cpal::DeviceTrait::name deprecation warnings (3)Suppressed with #[allow(deprecated)] in stardust-pit#10; full migration to description() + id() tracked as stardust-core#12future (stable-id audio device picker work)
No graceful shutdown on engine threadProcess exit currently does the jobv0.15.0
Storybook PluginUIDock has no pluginsPlugin GUI work fixes naturallyv0.6.0
sound/ components (plugin-browser, plugin-parameter-panel, midi-mapping-row, sound-flow) orphanedDeleted in stardust-pit#11 / PR #115; v0.10.0 will build from scratch✅ v0.6.0
No autosave anywhereShell + wizard work owns autosavev0.9.0
No backup / recovery / .swp-style protectionLower priority than autosavev0.9.0 or v0.15.0
No telemetry / crash reporterOpt-in infra lands with release CIv0.15.0
No CI pipeline anywhereShipped in stardust-pit#10 + stardust-core#11 on 2026-06-01✅ v0.6.0
No release automationLands as a v0.15.0 deliverablev0.15.0
Save file format is single JSONBundle migration is v0.13.0v0.13.0
No multi-channel audio inputPit Mixer is v0.10.0v0.10.0
No native file menuShell work owns the file menuv0.9.0

Added in v0.6.0

ItemWhy we shipped itCleanup target
MIDI device identity is midir’s opaque port id + name fallback, not the spec’d (vendor_id, product_id)midir exposes no vendor/product IDs on any platform — the #2 refinement claim was wrong. Port ids are stable on CoreMIDI; name fallback covers replug on ALSA/WinMM. Identical twin devices on platforms with unstable ids may need manual re-pick after replugrevisit if twin-device reports surface; no version planned
Device rebind has a few-ms silence gap at the swap (stream close → open)Gap-free would need a second overlapping stream + crossfade; plan/voice continuity (the expensive part) is preserved. Pending user ear-test verdict on stardust-pit#1revisit after ear test; v0.15.0 at latest
Rebind underrun AC approximated — cpal exposes no portable underrun counterLive-device integration test asserts the engine stays Running and audible across the swap window insteadnone planned
Panic keyboard shortcut is fixed (Shift+Esc), not configurableConfigurable bindings belong to the button/switch rig component (#5) + Show Settings surfacev0.6.0 (#5)

See also