Repository navigation
v0.4.0
transit v0.4.0
This is the first release with the multicore mixer render, and it carries the engine work since v0.3.2: the render workers, the diagnostics that measure them, sample-accurate automation to hosted plug-ins, and a cleanup that removes video and the web build. transit is alpha-quality software and the session format may still change, so back up anything you care about. Sessions that contain video open with the video dropped and a note saying so (ADR 0031), and the web build is retired: transit ships a desktop app only (ADR 0032).
Highlights
- Multicore mixer render, on by default. Strips render on a fixed set of worker threads instead of one audio thread, and a strip a worker has not finished by its deadline is silent for that block instead of making the whole callback late. The deadline is 150% of the period for device periods of 1.5 ms and below (64 frames at 48 kHz) and 100% above. On the reference session, eight hosted instruments on a Focusrite Scarlett at 64 frames, over-budget callbacks fell from 1,290 to 2 idle and from 6,519 to 45 with a full compile running alongside. Start transit with
TRANSIT_RENDER_POOL=0to render every strip on the audio thread alone (#124, #168, #172, ADR 0029). - Render diagnostics. Copy diagnostics now reports per-strip overruns by cause (late, busy, unstarted), lateness and worker-wake histograms, inline renders and refusals, and names the strip, plug-in and phase the longest callback was in, with a verdict of stalled, preempted or slow. The Callback Telemetry window scrolls its rows above the buttons so it fits a 1080p screen (#169, #162, #171).
- Sample-accurate automation to plug-ins. Automation breakpoints inside a block now reach VST3 and CLAP plug-ins at their sample offsets instead of at the start of the block. A stopped transport sends the playhead value once and no breakpoints (#117).
- Eight hours, no drops. The endurance run recorded an armed click loopback and a MIDI-driven hardware synth for eight hours at 64 frames on the render workers: 21.6 million callbacks, 0.05% over budget, no device errors, flat memory, no missing onsets and no clock slip in either take (#130).
- Video is gone. The decoder crate, the import command and the video track and clip are removed. An old session opens with its video clips dropped and one note; audio on a former Video track is kept as an Audio track (#176).
- Desktop only. The web build and the legacy egui UI crate are removed, about 24,000 lines, so every build gate and every fix now covers the one app that ships (#177).
- For contributors. The inherited soundcraft-* crates are now transit-* (#37), and no Rust file may grow past 1,500 lines (a ratchet gate; the over-budget files were split by concern as pure moves) (#149).
Fixes
- Mixer: the master fader samples and ramps like a track fader instead of ramping toward the next block's value one sample early (#151).
- Transport: turning Cycle on keeps an existing region; the selection sets the region only when none exists (#164).
- Arrange: trimming a clip edge snaps to the grid like a move does; Shift bypasses the snap (#165).
- Plug-in hosts: when a block is skipped, its timed automation points fold into the next block's start value, and past a full event queue the newest value wins (#117).
- MIDI Monitor: Active Sensing freshness is stamped when the signal arrives, not when the worker looked (#170).
- Diagnostics report: the WASAPI share flag and open mode print only for WASAPI, not under ASIO (#163).
- Sessions: a compatibility corpus of files saved by each release is loaded and round-tripped in tests, with a rule for new fields (#161).
- Repository: test fixes that removed wall-clock and shared-target races (#155, #157, #158, #159, #160, #166, #167, #170, #175, #189), and gates that resolve the repository root at run time (#150). These have no user-facing change.
Known issues
Full list: docs/known-issues.
- K88: with the render workers on, a session with sidechain keys renders on the audio thread until dependency-aware scheduling lands (#174), and strips that read the live input or hardware (monitored audio tracks, External Instruments, hardware inserts) also stay on the audio thread.
- K89: a plug-in that hangs inside a render worker keeps its track silent and refuses session changes until you close the device or Reconnect; nothing in the arrange view says why yet (#190).
TRANSIT_RENDER_POOL=0keeps such a plug-in off the workers. - #187, #192: a take longer than about 6.2 hours of mono audio at 48 kHz stays on disk but is not placed in the session; stereo or 96 kHz halves the limit. A louder warning and a reference in the session follow in #192.
- #184: one recording showed a 4.7 s stretch of exact zeros in both armed inputs while the machine was far overloaded by compiles; it did not recur on a quiet machine. Please report it if you see it.
- K87: the MIDI Mappings window's fixed columns need about 970 points of width, so on narrower screens the window can run past the screen edge.
Downloads
Assets are attached to this release.
| Platform | Asset |
|---|---|
| Windows (x86_64) installer | transit-v0.4.0-windows-x86_64.msi |
| Windows (x86_64) portable | transit-v0.4.0-windows-x86_64.zip |
| macOS (Apple silicon) | transit-v0.4.0-macos-arm64.dmg (holds transit.app) |
macOS (Apple silicon), bare binary with audio-bench |
transit-v0.4.0-macos-arm64.tar.gz |
Linux (x86_64) tarball with audio-bench |
transit-v0.4.0-linux-x86_64.tar.gz |
| Linux (x86_64) AppImage | transit-0.4.0-linux-x86_64.AppImage |
| Linux (x86_64) Debian and Ubuntu package | transit-0.4.0-linux-x86_64.deb |
| Linux (x86_64) Fedora and RPM package | transit-0.4.0-linux-x86_64.rpm |
A .AppImage.zsync file sits next to the AppImage for delta updates. Every archive carries audio-bench, which measures your interface (round trip, jitter, xruns).
All builds are unsigned. On Windows, SmartScreen shows "More info", then "Run anyway"; the Windows build includes native WASAPI and native ASIO. The macOS app is ad-hoc signed and not notarized; if macOS blocks it, run xattr -dr com.apple.quarantine /Applications/transit.app, or right-click it and choose Open. On Linux, make the AppImage executable (chmod +x) and run it, or install the .deb or .rpm with your package manager; none of the Linux packages are signed. The Linux builds carry the native JACK backend (#55): it talks to a running JACK 2 or PipeWire server (transit never starts one), and Auto prefers it when a server is up. On Debian and Ubuntu with PipeWire, start transit as pw-jack transit so PipeWire's JACK library is found. More Linux reports are wanted in #55: run transit --report and tell us how it went.
Checksums
SHA-256 of each asset:
4ee9f06e6cc929dd0e096ec810e742e8ec2bd742b2286be044f5998c5061df54 *transit-0.4.0-linux-x86_64.AppImage
9213e111da7b6dd24574554badefdc750843793d0be09e0ce2466c4b272935ce *transit-0.4.0-linux-x86_64.AppImage.zsync
9faf24363cab967d036e2ea4bfd94dfa02522dd63395a6d088c30a3dd46b4254 *transit-0.4.0-linux-x86_64.deb
50043297ec121ade0e1f89e8242115b5c51871a773d505bee7370bc2dde2a126 *transit-0.4.0-linux-x86_64.rpm
b10d771145928b9f0f69824958a94262cc2d207cfc75b71a17f6138c0e698d3d *transit-v0.4.0-linux-x86_64.tar.gz
448efc5456573e310368600fdf60967153a8ff88aa6bb00d23ae1cc20f9d2ef9 *transit-v0.4.0-macos-arm64.dmg
54b61d346efe3b3e623c382f311f2e403bc4a8238ba13e669fc18e5f3ef9bb63 *transit-v0.4.0-macos-arm64.tar.gz
6fb00e6cc04e10eecbc0de894b29197e2aa77b4aca557de2b4464138f6bf9d95 *transit-v0.4.0-windows-x86_64.msi
1c2a47d56a0c639eaafbf3f4faf0056be2bca52f6b7c7316a6eecf6e06d02795 *transit-v0.4.0-windows-x86_64.zip