* ui: keep SoundCraft's beside-the-session-view place for panels craft-ui has no record of * ui: Tracks and Groups and Clips in full-height dock columns The Edit window docks Tracks and Groups (168 pt) at its start edge and Clips (230 pt) at its end edge, with the MIDI editor under the session view between them; Mix docks Tracks and Groups at its start edge. Panels dragged to an empty window edge make a dock there. Saved preferences and window configurations carry docking_version. Split-frame layouts saved without it load as the new defaults, keeping every other setting. A list with no recorded place reopens in its dock group, making the dock again at its side and width when it is gone. Pins craft-ui, craft-docpath and craft-media to craft-libs#312. * Pin craft-libs at d24e4bc for the Mac round 3 * ui: test that a floating list reopens floating while its dock is shown; ui-parity revision
24 KiB
SoundCraft roadmap
Stage: pre-alpha · next: alpha, ~5% and ~110–180 h away (the alpha gate's three failing workflows)
Last reviewed: 2026-10-24 · Last updated: 2026-10-25 · Change: trivial (side panels in dock columns, Auto Pan stereo balance, Clip List Auto Rename, Strip Silence rectangles, Strip Silence Rename, Strip Silence Extract and Separate, Clip Looping dialog, AudioSuite Vari-Fi speed ramps, Auto Pan plugin, Subharmonic plugin, Ring Modulator plugin, Float32 file headroom) · Target: Avid Pro Tools Ultimate 2026.4.1
SoundCraft is a clean-room, pure-Rust digital audio workstation that aims at full parity with
Avid Pro Tools, and then beyond it: faster, open, scriptable and agent-controllable. This page is
the one-page summary; the detail is in docs/target-app-parity.md
(assessment), docs/gaps.md (ranked work list), docs/roadmap.md
(milestones and beta plan) and docs/parity-checklist.md (generated
menu checklist).
Headline numbers
| Number | Value | Kind |
|---|---|---|
| Menu breadth | 482 / 512 Pro Tools menu leaves (94.1 %); engine alone 397 / 512 | measured (cargo xtask parity + UI-layer aliases) |
| Feature breadth | ~70 % | estimated (menus plus plugins, hardware, formats, immersive, cloud) |
| Ready for real work | ~40 % | estimated, weighted by dimension |
| Mainstream practitioner (tracking/mixing engineer) | ~36 % | estimated: 50.6 % weekly-area depth × 0.90 interaction × 0.92 stability × 0.85 file exchange (how) |
| Essentials user (song or podcast, defaults) | ~57 % | estimated: 72.4 % core-feature depth × 0.90 launch/stability × 0.90 discoverability × 0.97 files (how) |
| Remaining to alpha | ~110–180 Opus 5.5 agent-hours (the failing gate rows) | estimated, calibrated on PR history |
| Remaining to beta | ~350–570 Opus 5.5 agent-hours (includes the alpha work; ~60–70 % parallelizable) | estimated |
| Remaining to full parity | ~950–1,450 Opus 5.5 agent-hours | estimated |
| Audience | Ready % | Agent-hours to ~95 % | Work that dominates |
|---|---|---|---|
| Full target (ready for real work) | ~40 % | ~950–1,450 h | Hardware, the stock plugin catalogue, AAF/OMF and immersive, localization, fidelity |
| Mainstream practitioner | ~36 % | ~380–600 h | Interface and MIDI recording, AAF/OMF, stock-plugin depth, core-path bugs |
| Essentials user | ~57 % | ~110–200 h | Launch and platform fixes, onboarding, effect panels and presets, MP3/AAC export |
Hours are Opus 5.5 agent wall-clock hours, calibrated on this repo's PRs; 60–70 % parallelizes. Detail: target-app-parity.md.
Why pre-alpha: the core-workflow gate in docs/roadmap.md fails.
Editing, mixing, bouncing, and saving and reopening work end to end. But a Pro Tools user can't
record from a chosen audio interface at a chosen buffer size (only the default devices, a fixed
512-sample block, and takes held in RAM). They can't record MIDI from a keyboard (there is no
MIDI device layer). And they can't bring a session in or hand one back (no AAF/OMF/.ptx).
Readiness (~40 %) sits right at the alpha bar, but a gate failure keeps the app pre-alpha. The
2026-10-07 estimate ("~65 % overall, 110–150 h to 100 %") counted feature presence. This one
measures readiness and adds hardware, localization and field bug reports.
By dimension
| Dimension | Ready | Remaining (h) | Doc |
|---|---|---|---|
| Features | ~45 % | 520–810 | target-app-parity.md |
| UI/UX fidelity | ~55 % | 60–100 | ui-parity.md |
| File formats | ~40 % | 70–120 | file-format-parity.md |
| Hardware (interfaces, MIDI, surfaces, sync) | ~12 % | 110–180 | hardware-parity.md |
| Localization | ~12 % (1 of Pro Tools' 8 languages) | 70–110 | localization-parity.md |
| Performance | ~35 % (unmeasured) | 40–70 | hardware-parity.md |
| Stability | ~45 % | 50–80 | gaps.md |
| Platforms | ~65 % (5 platforms built, macOS exercised) | 20–40 | gaps.md |
| Ecosystem / plugins | ~30 % | in Features + Hardware | plugin-parity.md |
| AI features | ~5 % | 30–50 | gaps.md |
| Agent control | ahead of Pro Tools | 3 | control-protocol.md, mcp.md |
Features
| Area | Breadth | Ready | Remaining (h) |
|---|---|---|---|
| Recording and monitoring | 75 % | 40 % | 40–60 |
| Editing | 92 % | 65 % | 40–60 |
| Mixing and routing | 85 % | 60 % | 35–50 |
| Automation | 80 % | 55 % | 20–30 |
| Built-in plugins and AudioSuite | 40 % | 35 % | 80–120 |
| Third-party plugin hosting | 70 % | 45 % | 40–60 |
| MIDI and instruments | 70 % | 30 % | 50–80 |
| Score and notation | 60 % | 35 % | 20–30 |
| Elastic Audio, TCE, Beat Detective | 70 % | 35 % | 40–60 |
| Surround and immersive | 55 % | 35 % | 50–80 |
| Video and post | 60 % | 40 % | 40–60 |
| Session, file management, interchange | 55 % | 35 % | 60–100 |
| Collaboration and cloud (Avid services) | 0 % | 0 % | owner decision |
| Agent control | 100 % | 100 % | 3 |
Weights and evidence per row: target-app-parity.md.
Languages
| Language | Code | Status | Translated |
|---|---|---|---|
| English | en | full | 100 % |
| Simplified Chinese | zh-Hans | none | 0 % |
| Spanish | es | none (PR #143 open) | 0 % |
| Hindi | hi | none | 0 % |
| Arabic | ar | none | 0 % |
| French | fr | none (PR #143 open) | 0 % |
| Portuguese | pt | none | 0 % |
| Indonesian | id | none | 0 % |
| Japanese | ja | none | 0 % |
| German | de | none | 0 % |
| Korean | ko | none | 0 % |
| Vietnamese | vi | none | 0 % |
Other languages shipped: 0. Detail: localization-parity.md.
Upcoming
Ranked; the alpha gate, the alpha checklist and the beta plan are in docs/roadmap.md.
- Alpha blocker: audio interfaces: device and buffer-size choice, duplex stream, ASIO; record to disk (G-01, G-06). 35–55 h.
- Alpha blocker: MIDI devices: record from keyboards, play instruments live, output (G-02). 20–35 h.
- Alpha blocker: AAF/OMF import and export (G-03). 50–90 h.
- macOS plugin entitlement (#153), then AU editors (G-05). 1 h for the entitlement (needed for the mix row), then 15–25 h.
- Land the open bug-fix PRs and clear the correctness backlog (G-04). 15–25 h.
- PR CI running
cargo xtask cion three OSes (G-14). 5–10 h. - Fidelity harness against Pro Tools (G-07). 20–30 h.
Robustness
Property tests drive random edit sequences (with full undo), mutated session files and hostile
command parameters through the engine and mixer; they have caught fade, overflow and
unbounded-allocation bugs. Every command also runs with empty parameters on empty and demo
sessions. Hosted plugins live in isolated unsafe crates (clap-host, vst3-host, au-host) and
are created, loaded and destroyed off the audio thread. The video decoders survive hundreds of
mutated and truncated movies. Field reports from the first public week are tracked in
gaps.md (G-04).
Progress log
- 2026-10-25: Tracks and Groups and the Clip List sit in dock columns that run the Edit window's full height at its left and right edges, with the MIDI Editor under the session view between them; Mix docks Tracks and Groups at its left edge. A panel dragged onto a dock group joins it as a tab, stacks above or below it, or makes a new column; one dragged to an empty window edge makes a dock there. A list with no saved place reopens in its dock, and makes the dock again when it is gone. Preferences and window configurations saved with the earlier split-frame layouts load with the new default layouts and keep their other settings. No readiness percentage change.
- 2026-10-25: Auto Pan moves the balance of a stereo track: the left channel's level falls as the position moves right and the right channel's as it moves left, at constant power, and each channel stays on its own side. At the center the track passes unchanged, so a wide or out-of-phase stereo image keeps its width, and the envelope follower follows the louder channel. No readiness percentage change.
- 2026-10-24: Clip List › Auto Rename (
clip.auto_rename) sets the names that editing gives the clips it separates from the selected clips: a name, a starting number, a number of places (zeros before the number) and a suffix. The piece after each cut takes the next name, the piece before it keeps its name, and all the pieces count up one number sequence. Pieces that Strip Silence names with its own Rename fields, or removes, take no Auto Rename name. Copied clips keep their scheme when they are pasted, saved sessions hold the schemes, and Import Session Data brings them along. No readiness percentage change. - 2026-10-24: While the Strip Silence window is open, the Edit window draws a rectangle around each range that Strip would keep on the selected tracks, padded by Clip Start Pad and Clip End Pad, and the rectangles follow the sliders as they move. They are removed when the window closes.
edit.strip_silence_previewreturns the same ranges without changing the session. No readiness percentage change. - 2026-10-24: The Strip Silence window has a Rename button. It opens Rename Selected Clips, where a name, a starting number, a count of zeros and a suffix set the names of the clips that Strip, Extract and Separate leave in the selection (for example SFX023.Reel1, SFX024.Reel1). The app keeps the scheme for later uses of Strip Silence until the app quits, or until Clear and then OK empty it. No readiness percentage change.
- 2026-10-24: The Strip Silence window has Extract and Separate buttons. Extract removes the audio and keeps the silent parts of the selection, and Separate separates the clips at the edges of the silence without removing anything. Minimum Strip Duration goes up to 4,000 ms. No readiness percentage change.
- 2026-10-24: Clip › Loop… (Cmd+Alt+L) opens the Clip Looping dialog: Number of Loops, Loop Length in the main counter's time format, or Loop Until End of Session or Next Clip. A loop length that is not a whole number of loops cuts the last loop short, and Unloop removes that short loop too. No readiness percentage change.
- 2026-10-24: AudioSuite ▸ Pitch Shift ▸ Vari-Fi slows the selected clips down to a complete stop or speeds them up from one, and the pitch follows the speed. Fit To keeps each clip's length and plays two-thirds of it; Extend plays all of it and makes the clip 150 % long. Fades On fades the audio out with the slowdown or in with the speedup. Before, the menu item resampled the clip at a constant speed. No readiness percentage change.
- 2026-10-24: A built-in Auto Pan plugin pans the mono sum of a stereo track between left and right. An LFO with seven waveforms moves it at a rate in BPM or at the session tempo, running free, once, in step with the transport, or when the level crosses a threshold or a manual trigger changes; an envelope follower can move it by level instead. Width, Manual and Path set the field, and Output sets the level. No readiness percentage change.
- 2026-10-24: A built-in Subharmonic (
subharmonic) adds the octave below a lower and an upper band of the input, chosen from four frequency ranges, with a direct bass band, a gain and a solo for each band, Drive with six characters, HP and LP filters, and a Mix that keeps one path at full level. No readiness percentage change. - 2026-10-23: A built-in Ring Modulator (
ring_mod) applies ring modulation, frequency modulation or a positive or negative resonator, and an LFO, an envelope follower or sample and hold moves its frequency. AudioSuite › Modulation › Sci-Fi now runs it instead of the Flanger. No readiness percentage change. - 2026-10-19: Float32 WAV and AIFF-C encoding preserve finite samples above full scale. Integer PCM still clips at full scale. Tests cover whole-file and streaming encoders, non-finite samples, and bounce output with normalization on and off. No readiness percentage change.
- 2026-10-18: Mono audio devices receive the average of the stereo channels before output clipping, retaining right-only audio. Surround mixes use the same average after their ITU stereo fold-down. Regression tests cover channel balance, polarity cancellation, clipping, centered mono tracks, each 5.1 channel and several callback sizes. No readiness percentage change.
- 2026-10-16: Master fader volume automation uses each render block's actual last sample, matching track faders. Breakpoints in the next block no longer pull the preceding block's level toward them, and ramps reach their last-sample value. Regression tests cover nonzero starts, one-sample callbacks and several block sizes. No readiness percentage change.
- 2026-10-16: Aux, folder and master latency calculations exclude inserts already taken out for producing NaN or infinity, matching audio tracks. Subsequent blocks no longer compensate for an insert that is bypassed after failure. Regression tests check impulse timing, healthy insert latency and reset/retry at 64- and 512-sample blocks. No readiness percentage change.
- 2026-10-16: Split into Mono extracts the correct source channel for each mono track instead of playing channel zero on every track. Clip offsets, gain, fades and stretch, source timestamps, Undo/Redo and saved audio are preserved; repeated clips share each extracted mono source. Unavailable media returns an error without partial edits. No readiness percentage change.
- 2026-10-14: MCP
batchrejects more than 1000 calls before executing any command, instead of silently running only the first 1000 (#460). No readiness percentage change. - 2026-10-14:
soundcraft-cli convertdithers only when the output loses resolution (fewer bits than the source, a float or lossy source, or resampled/normalized samples); a same-depth, wider or 32-bit float conversion copies the samples exactly and digital silence stays silent.--ditherand--no-ditheroverride the choice (#548) - 2026-10-13: WAV: an empty data chunk followed by metadata (LIST, bext) reads as no audio; a recording that was never finalised (sizes left at 0) still gives what was written (#466)
- 2026-10-13: Sampler: a ping-pong loop keeps its phase and direction when a step is wider than the loop (a narrow loop with high transposition), instead of reflecting once and dropping the rest of the travel (#463)
- 2026-10-13 (VST3 host messages): The VST3 host creates
IMessageandIAttributeListobjects for plugins (IHostApplication::createInstance), so plugins whose controller and processor talk throughIConnectionPoint::notifywork: Line 6 Helix Stadium Native now loads its content database (it reported "Failed to get content database recovery info (Out of memory condition)") and exposes its parameters. No readiness percentage change. - 2026-10-13:
mix.instrumenttakes the built-in instrument's parameters inparams(validated, clamped) and refuses any other field, so a synth setting written besidepluginis an error instead of being accepted and ignored (#265) - 2026-10-13: A bounce of a bus that an aux returns onto lines up with the timeline: the aux insert's lookahead is compensated like the main mix's (it left the bus late and cut the end off), and tracks routed to that bus wait for it too (#246)
- 2026-10-13: Delay compensation covers the inserts of the master faders: a bounce of the main mix with a Maximizer on the master lines up with the same mix without it (it came out 71 samples late) (#351)
- 2026-10-12 (audio device settings): Setup › Playback Engine chooses the audio system, output and input device, sample rate and buffer size, kept per machine with the preferences; 16/32-bit integer devices are converted; ASIO is available behind the opt-in
asiobuild feature (verified with an SSL 2+ at 128 samples). Channel routing, one duplex clock and latency compensation remain (G-01). No readiness percentage change. - 2026-10-12 (Mix in a separate window): Window › Mix in Separate Window shows the Mix window in its own native window, so Edit and Mix can be on screen at once (e.g. one per monitor), as in Pro Tools. No readiness percentage change.
- 2026-10-12 (plugin editors on Windows): VST3 editors and embedded CLAP editors open in a SoundCraft host window on Windows (owned by the app window, resized on request, closed from its title bar); verified with a JUCE VST3 compressor and a CLAP effect. No readiness percentage change.
- 2026-10-12:
soundcraft-cli convertrejects an unparsable or zero--rateand an unknown--bit-depth(exit 1, nothing written) instead of converting with a default (#256) - 2026-10-12: Timecode labels with huge fields no longer overflow: frame counts are computed in 128 bits and clamp, so
setup.current_timecodeandsession.format_timesaturate instead of failing (#248) - 2026-10-12:
session.format_timewith the smallest bar number no longer fails with an internal error: the bar offset saturates (#249) - 2026-10-12 (plugin editors on Windows): VST3 editors and embedded CLAP editors open in a SoundCraft host window on Windows (owned by the app window, resized on request, closed from its title bar); verified with a JUCE VST3 compressor and a CLAP effect. No readiness percentage change.
- 2026-10-12 (Mix in a separate window): Window › Mix in Separate Window shows the Mix window in its own native window, so Edit and Mix can be on screen at once (e.g. one per monitor), as in Pro Tools. No readiness percentage change.
- 2026-10-12 (audio device settings): Setup › Playback Engine chooses the audio system, output and input device, sample rate and buffer size, kept per machine with the preferences; 16/32-bit integer devices are converted; ASIO is available behind the opt-in
asiobuild feature (verified with an SSL 2+ at 128 samples). Channel routing, one duplex clock and latency compensation remain (G-01). No readiness percentage change. - 2026-10-10 (UI docking): Tracks and Groups, Clips, MIDI Editor, Memory Locations, and Undo History use movable panels. Edit and Mix retain separate arrangements; Clips and MIDI Editor belong to Edit. Transport, plug-in, and specialist utility windows retain their existing hosts. Panel moves and reset are available as UI commands, and saved UI preferences retain arrangements. Common toolbar and track record-enable buttons share interaction, accessible labels and keyboard focus through
craft-ui, retaining blue tool selection and red record-arm states. No readiness percentage change. - 2026-10-10 — Stage re-normalized to pre-alpha by the core-workflow gate (interface recording, MIDI recording and session interchange fail). Full re-measure against Pro Tools Ultimate 2026.4.1 and the standard progress-docs set (this page, target-app parity, gaps, roadmap, UI/format/hardware/plugin/ localization parity). v0.4.0 released. Community fixes: Cut All Automation, snap to neighbours, tempo stretch, I/O Setup, clip export names, menu-only dialogs, playback stop on new session.
- 2026-10-09 — Light theme and live system appearance, clip-gain fader and nudge, missing-media warnings, session audio health, malformed-JSON and encoder-extension checks in the CLI, macOS system menu bar, Windows DX12 default, Linux fontconfig, metronome click in playback.
- 2026-10-08 — v0.2.x–v0.3.0 released (Flatpak, AppImage zsync); VST3 quit crash fixed; Ctrl-as-Cmd shortcuts on Windows/Linux; plugin menus by vendor, AU inserts, instrument picker; rotating log file; branded DMG.
- 2026-10-07 — Repository published; About window credits; release CI on macOS runners.
- 2026-10-06 — Video track, Audio Unit hosting, plugin state and editors, Renderer; Mix window views; score export and print; surround mixing; VST3 hosting; property tests.
- 2026-10-05 — Foundation crates, Edit and Mix windows, playback, CLI/MCP, parity report, recording and punch, CLAP hosting, Elastic Audio, Beat Detective, release pipeline.
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-25 | trivial | Progress log: side panels in dock columns; readiness estimates unchanged |
| 2026-10-25 | trivial | Progress log: Auto Pan stereo balance; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Clip List Auto Rename; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Strip Silence rectangles; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Strip Silence Rename; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Strip Silence Extract and Separate; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Clip Looping dialog; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: AudioSuite Vari-Fi speed ramps; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Auto Pan plugin; readiness estimates unchanged |
| 2026-10-24 | trivial | Progress log: Subharmonic plugin; readiness estimates unchanged |
| 2026-10-23 | trivial | Progress log: Ring Modulator plugin; readiness estimates unchanged |
| 2026-10-19 | trivial | Float32 file encoding preserves finite headroom (#791); readiness estimates unchanged |
| 2026-10-18 | trivial | Mono device playback retains both stereo sides and surround fold-down channels; readiness estimates unchanged |
| 2026-10-16 | trivial | Master volume automation block boundaries corrected; readiness estimates unchanged |
| 2026-10-16 | trivial | Failed inserts no longer contribute aux, folder or master latency after containment; readiness estimates unchanged |
| 2026-10-16 | trivial | Split into Mono preserves each source channel, clip edits and saved audio; readiness estimates unchanged |
| 2026-10-14 | trivial | Progress log: oversized MCP batches rejected before execution (#460) |
| 2026-10-13 | trivial | Progress log: empty WAV data chunk followed by metadata (#466) |
| 2026-10-13 | trivial | Progress log: sampler ping-pong phase for wide steps (#463) |
| 2026-10-13 | trivial | Progress log: mix.instrument params, unknown fields refused (#265) |
| 2026-10-13 | trivial | Progress log: bus bounce compensates aux returns (#246) |
| 2026-10-13 | trivial | Progress log: master insert latency compensated (#351) |
| 2026-10-12 | trivial | Progress log: convert option validation (#256) |
| 2026-10-12 | trivial | Progress log: timecode overflow (#248) |
| 2026-10-12 | trivial | Progress log: bar offset saturates (#249) |
| 2026-10-10 | minor | Readiness-by-audience table with hours: full 950–1,450 h, mainstream 380–600 h, essentials 110–200 h |
| 2026-10-10 | minor | Added mainstream practitioner ~36 % and essentials user ~57 % to the headline numbers |
| 2026-10-10 | minor | Stage alpha → pre-alpha: the core-workflow gate fails on interface recording, MIDI recording and session interchange; alpha distance added |
| 2026-10-10 | major | Rewritten to the progress-docs standard: stage alpha (re-normalized the same day), two numbers (breadth ~70 %, ready ~40 %), dimension/feature/language tables, hours re-calibrated; area table moved to docs/target-app-parity.md, milestones to docs/roadmap.md |
| 2026-10-07 | major | Menu parity 94 %, ~65 % estimated feature parity, alpha list |
| 2026-10-06 | minor | Alpha and parity estimates |