v1.5.0-beta.3 — engine hardening + beta-ready docs
v1.5.0-beta.3 — engine hardening + beta-ready docs
First public-beta cut since v1.5.0-beta.2 (Apr 10). ~30 PRs of engine
fixes, ~50 new DSL fns, full parity-comparator tooling, and the
operational docs to triage incoming beta bugs.
TL;DR — what's in this release
Engine fixes (the 2026-05 audit pass)
- SP72:
use_bpm/use_synthno longer leak fromin_threadinto
nestedlive_loopregistration (#280) — months of FX-comparator
numbers were running web at half tempo - SP78–81: four hot-swap state-hygiene bugs caught by Playwright +
WAV reproducers (#283) — empty-cycle Updates, FX-scope inversion,
stop-tail queue drain, per-loop state leakage - SP70: lossless capture pipeline —
Recorder.tsswapped MediaRecorder- opus codec for raw float32 → WAV, removing the codec damage that
had been masquerading as "filter family broken" for weeks
- opus codec for raw float32 → WAV, removing the codec damage that
- Per-loop audio isolation via private loopBus + monitor synth (#178)
— first Sonic Pi implementation to ship this - #199: nested
live_loophot-swap routes throughscheduler.hotSwap()
directly (#261) - Sonic Tau mixer baseline:
pre_amp=0.3,amp=0.8— calibrated for
browser-WASM headroom, not Desktop SP driver levels
DSL coverage: ~87% of upstream (148/170 user-facing fns)
- Tier A: 17 critical fns — recording, kill, current_*, define
persistence (#213) - Tier B: 27 fns across 3 PRs — ring/spread, tuplets,
defonce,
sync_bpm, dynamic eval (run_code/eval_file/run_file),
live_audiocontrol,load_example(#230, #234, #238) - Tier C: 23 fns across 3 PRs — state wrappers
(with_synth_defaults,with_sample_defaults,use_arg_checks
family), sample/buffer registry, mixer + introspection helpers
(#252, #254, #256) - Help panel + autocomplete entries shipped for every new fn
Parity tooling
- A/B comparator rig (
tools/capture-desktop.ts+ spectrogram
compare) — captures both engines, renders 3-panel mel-spectrograms,
reports L2 + MFCC + per-beat metrics (#264) - FX A/B inspector:
npm run inspectopens a single-file viewer with
desktop ↔ web<audio>players, sync-play, MFCC sidebar, verdict
tiers HIGH/MID/LOW/INCONCLUSIVE (#277) - WAV-verify sweep across 40 wired FX (#275) — current scores:
4 HIGH / 26 MID / 8 LOW / 2 INCONCLUSIVE (composite ~89.5%) - Capture tool:
--batch <dir>for fixture-folder runs (#224),
engine hooks forputs/cues instead of DOM slicing (#222)
UI / app
- Welcome buffer drop + Cm9 finale (#220)
- Preloader pulls forward CDN deps before App mount (#284)
- Live Mixer Pre-Amp / Amp sliders in Prefs push to scsynth on drag
- MIDI toolbar button hidden until Tier D ships (Web MIDI input via
the engine API still works) - README rebranded to "Sonic Pi Web"
Beta operational infrastructure
KNOWN_ISSUES.md+TRIAGE.md+ bug-template gates so triage
isn't ambiguous when users report problems- 8 Plausible custom events wired for beta-visibility analytics
- SuperSonic CDN version pinned end-to-end (v0.57.0)
Numbers
- 929 unit tests pass (was 805 at beta.2)
- 62/66 synths working end-to-end (3 upstream WASM LOAD-FAIL)
- 197/197 samples
- 42/42 FX wired, 40/42 WAV-classified
- ~148/170 DSL fns (~87%)
- 49 community forum compositions verified end-to-end in Chromium
Compatibility notes
- Mixer behaviour change: web output is ~0.19× Desktop SP's
driver-attenuated level by default. Comparators should RMS-normalise
before A/B. Override via Prefs → Audio → Mixer Amp. - MIDI: Web MIDI continues to work via the engine API. Only the
toolbar dropdown UI is gated until Tier D (midi_pc,midi_raw,
midi_sysex, device picker). - DSL: net additive — no upstream-compatible code that worked in
beta.2 should break in beta.3.
Install
npm install @mjayb/sonicpijs # latest tag now points here
npm install @mjayb/sonicpijs@beta # beta tag — same versionBrowser: https://sonicpi.cc
See KNOWN_ISSUES.md
for current beta blockers.