v3.0.0 (2026-08-08)
Immutable
release. Only release title and notes can be modified.
Release Notes
⚠ BREAKING CHANGES
- wasm: the npm package's string-and-rows API is replaced by a structured disc model:
inspectandscanresolve to aDisc— a lossless, typed mirror of the analyzer's
output (disc metadata, playlists, streams, chapters, read errors) — and the new
renderReportre-renders the classic report from it on demand, byte-identical to the
CLI's. The report-string and row-tuple exports are gone. Only the npm surface breaks
here; the CLI and report contracts are untouched. (#215, #217) - wasm: every entry point takes one
ScanOptionsobject —inspectpreviously took
a bare positional threshold — and an out-of-domainshortPlaylistSeconds(negative,
non-finite, or above 86400) now rejects the call instead of silently scanning with the
20-second default. (#286) - core: AACS-encrypted discs are detected up front, and the CLI refuses to scan them
with the new exit code 4; the library exposes the detection and leaves the decision to
the caller. (#246)
Added
- core: stream scans survive read errors: statistics accumulated before a failing
read are kept and reported, with the failure still listed in theWARNINGblock.
--drop-partial(CLI), the keep-partial-scans setting (GUI), andkeepPartial(npm)
opt back into discarding. (#285) - core: one short-playlist threshold contract on every surface: the valid domain is
0 to 86400 seconds, and 0 switches the short rule off. Programmatic surfaces (CLI,
npm) reject out-of-domain values; the GUI dialog clamps, and the demo page reverts to
its default. (#286) - wasm: a codecs-depth inspect:
codecs: truereads just each stream file's head,
so every stream carries its full codec description — profile, level, HDR metadata —
without the whole-file demux a measured scan costs. (#286) - wasm:
reportFileNameexposes the sanitizedBDINFO.<label>.txtfilename the CLI
and GUI derive, so browser apps save reports under the identical name. (#286) - wasm: scans list every playlist, each carrying
hiddenByclassification metadata
instead of being withheld by a filter — filtering is the client's choice — and
selectionmeasures an explicit playlist set unfiltered. (#214) - wasm: the demo gains playlist-filter, report-section, and size-format settings.
(#214, #223) - wasm: the structured model carries the encrypted-disc flag (
isAacsEncrypted).
(#247) - cli: playlist visibility switches —
--show-short-playlistsand
--show-looping-playlistswith a hidden-playlist hint (#202) — plus
--short-playlist-secondsfor the cutoff itself and the--no-stream-diagnostics/
--no-quick-summaryreport-section switches (#219), on a compacted single-screen
help card (#203). - gui: encrypted discs are flagged and the scan disabled (#248); playlists hidden by
the filters can be shown with a transient toggle (#204). - core: the playlist projection, classification, formatting, and selection layer is
part of the public library API, shared by all three front-ends. (#216, #261, #263) - core: drive-root volume-label recovery moved into the vfs, covering every
front-end. (#262)
Fixes
- Hardening against hostile disc images from the continuous fuzz campaign: the backup
index is used when the primary is unparsable (#245), unknown PMT stream types are
skipped instead of aborting the section (#249), UDF CS0 dstring used lengths are
clamped (#250), chapter-mark timestamps are masked (#251),read_bits4zero-fills its
past-window tail (#253), and a playlist summary's angle totals are bounded before
allocation (#244). Metadata reads are capped, cutting peak scan memory
(827918c). - wasm: a
shortPlaylistSecondsof zero disables the short-playlist filter instead
of reading as the 20-second default. (#252) - packaging: the installer metadata names agentjp as the publisher. (#195)
- ci: the 2.0.0 release lanes are repaired — the gui-publish channel matrix, the AUR
and Homebrew checksum legs, gui crate packaging, the AUR deploy's source tree, and the
gui crate's post-release gaps. (#142, #143, #144, #145, #147, #148)
Install bdinfo-rs 3.0.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/agentjp/bdinfo-rs/releases/download/v3.0.0/bdinfo-rs-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/agentjp/bdinfo-rs/releases/download/v3.0.0/bdinfo-rs-installer.ps1 | iex"Install prebuilt binaries via Homebrew
brew install agentjp/tap/bdinfo-rsDownload bdinfo-rs 3.0.0
| File | Platform | Checksum |
|---|---|---|
| bdinfo-rs-aarch64-apple-darwin.tar.gz | Apple Silicon macOS | checksum |
| bdinfo-rs-x86_64-apple-darwin.tar.gz | Intel macOS | checksum |
| bdinfo-rs-aarch64-pc-windows-msvc.zip | ARM64 Windows | checksum |
| bdinfo-rs-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| bdinfo-rs-aarch64-unknown-linux-musl.tar.gz | ARM64 MUSL Linux | checksum |
| bdinfo-rs-x86_64-unknown-linux-musl.tar.gz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo agentjp/bdinfo-rsYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>