[2026.07.12]
Added
bindings: multi-language FFI bindings for 9 languages — Python, TypeScript, Elixir, Gleam, Ruby, Swift, Kotlin, Clojure, and Go — all layered on a single sharedrockbox-ffiC ABI (cdylib+staticlib); Python via cffi, TS via Bun/Deno/Node koffi, Ruby via fiddle, Go via purego, Elixir + Gleam through a sharederl_nifNIF, Swift/Kotlin/Clojure via their native FFIs; each ships an interactive console (Python IPython, Ruby IRB) and a playback example, and queue-insertion / resume / m3u8 are exposed uniformly across all ninebindings: per-platform prebuilt native libraries bundled into each package with a dedicatedbindings-v*release CI pipeline that uploads artifacts to the GitHub Release; Swift gains a static-linked product plus a macOS/iOSxcframework, Kotlin publishes to Maven Central and Clojure to Clojars (clojure-ffi-v*tag), and Python wheels are taggedpy3-none-<platform>per-archdsp: new standalonerockbox-dspcrate (v0.2.0) — the Rockbox DSP chain (parametric EQ, tone controls, surround, channel mode, compressor, and replaygain) extracted as a reusable Rust library that compileslib/rbcodec/dspviacc; honourssettings.tomlEQ values (already in tenths) with local-settings precedence, and builds standalone from vendored C sourcesmetadata: new standalonerockbox-metadatacrate — Rockbox tag/metadata extraction exposed as a library (phase 1 of the rbcodec extraction), with a flatrbmeta_tagsbridge over the firmware parserscodecs: new standalonerockbox-codecscrate (v0.1.1) — Rockbox decoders as a Rust library (phase 2), using a warble-style shim and-Dsymbol renames; HE-AAC (SBR + PS) decoding includedplayback: Rockbox-style queue insertion API (insert / insert-next / insert-last), resume with playback-position restore, and first-class.m3u8playlist handling — all surfaced through the FFI and bindingsplayback: HTTP(S) remote media playback via aMediaSourceabstraction (byte-range requests + MIME sniffing), lazy range-buffered remote files, live-radio streaming, and ICY metadata parsing (StreamTitle, station name, bitrate)player: the full Rockbox DSP chain + EQ presets (e.g. BassBoost), crossfeed / PBE / AFR and tone cutoffs, and shuffle / repeat modes are now driveable through the high-level player API, with builder and pipe/fluent DX ergonomicsbuild/ci: FreeBSD / NetBSD / OpenBSD support — headless-host firmware build, a directlibasoundsink on FreeBSD/NetBSD and a newlibsndiosink on OpenBSD,statvfs-based filesystem code, FTS5 search on the BSDs, and a dedicatedbsd-releaseCI job that buildsrockboxdin FreeBSD/NetBSD VMs viacross-platform-actionsnix: Nix flake packaging — a hermetic.#rockboxbuild with bundled Typesense and prefetched V8, Rust staticlibs split into a separately-cached derivation, FlakeHub publishing, a Cachix binary cache, and anix-consumesmoke-test workflow;nix runstarts the daemontools:tools/console— a Clojure/babashka REPL (with a./consolelauncher) that centralizes the monorepo's build/dev/ops commandscli: FreeBSD/NetBSDrc.dservice examples plus a service README
Fixed
ci: macOS gpui and embeddable-library builds no longer fail intermittently at link time withUndefined symbols for architecture arm64: _rb_daemon_start— the Cargo/Zig caches inrelease-gpui,macos-build, andrelease-embed-libare now keyed on${{ matrix.arch }}so a same-OS/different-arch runner (or a drifting*-latestlabel that silently switches CPU arch) can never restore an incompatibletarget/orzig/.zig-cache; the embed step also force-removeslibrockbox_embed.abeforecargo buildand assertsrb_daemon_startis present in bothlibrockbox_embed.aand the flattenedlibrockboxd.avianm, so a stale or mislinked archive aborts the job at its source instead of deep inside the rust-lld outputplayback: fixed a shutdown deadlock exposed by the new queue-insertion path- firmware: synced with upstream Rockbox master — brings the Sansa Clip Zip LCD flip / display-init fixes, RTL on-screen-keyboard corrections, numerous
FS#bug fixes, and a large sweep ofrbutil/ tools build-warning cleanups
Full Changelog: 2026.07.02...2026.07.12