Repository navigation
Releases: arthursoares/roon-api-reverse-engineering
Release list
v0.1.1 — Protocol and session reliability
Protocol correctness, reliable Core sessions, and a read-only play-history exporter.
Prepared and adversarially reviewed with Codex.
Added
- Read-only JSON-lines history export with bounded paging, identity deduplication,
newest-first ordering, explicit retrieval failures, and page/query cleanup.
#18 - Published release history on GitHub Pages, generated from this changelog, with
current onboarding, contributor checks, and validation guidance. - Runnable SDK lint and PR validation for SDK/web tests and builds, documentation,
and tracked, deterministic generated output.
#21,
#25
Fixed
- Reject pending RPCs promptly on close or failed sends; buffer split/coalesced
handshake records and reject premature closure. Cancel the handshake watchdog
once established so healthy idle sessions remain open.
#5,
#17,
#25 - Use immutable full struct schemas and stable member indexes across handwritten
and generated calls. Preserve capturedSooloos.Broker.Api.*wire names when
newer DLL metadata usesRoon.Broker.Api.*.
#19 - Preserve nullable values with the correct Bool/Sooid/scalar encodings and retain
pre-serialized nullable scalar Buffer compatibility.
#22 - Correct the exported legacy
Arg.refListframing to match length-prefixed
Arg.collectionreference collections.
#23 - Follow each search callback's ordered memberships, including cached full
entities. Decode DataList separately from Query and preserve populated objects
across repeated PUSHSTUB frames, fixing repeated and concurrent searches.
#24 - Recover the web backend with fresh, coalesced clients; reject stale session IDs;
clear disconnected UI/pending state and ignore late HTTP/search responses.
Read profile-scoped favorite state and preserve playlist/genre search sections.
#25 - Align onboarding with current exports and validated environment configuration;
keep the demo read-only and label historical mutation experiments accurately.
#20
Compatibility
Arg.refListremains exported but is deprecated; its invalid wire bytes are
intentionally corrected. Prefer explicitArg.collectionconstruction.- A typename's low-level struct declaration must remain immutable. Incompatible
reuse and unknown/duplicate generated fields now fail explicitly. - SDK search keeps its existing default result families. The optional third
argument includes playlists and genres; the web opts in. - The demo/history exporter accept
ROON_BROKER_IDas a legacy alias for
ROON_SERVER_BROKER_ID.
Validation and limits
- 145 SDK tests and 25 web tests pass, along with SDK lint/build, web
typecheck/build, deterministic generation, docs build, and hosted CI. - Read-only validation on Roon 2.73 build 1696 covered a 150-play export,
repeated/concurrent and named-category search, favorite-state rendering,
controlled test-client recovery, stale-action rejection, and a usable session
after more than 23 seconds of idle time. One concurrent read timed out;
bounded retries passed. - No live favorite/metadata, playback, volume, power mutation, or Core restart
was used for validation. Write transitions use mocks and existing protocol
evidence. Most generated methods remain unverified against a live Core. - This remains an experimental private-protocol client; broader version and
streaming-provider compatibility is not established. The offline drift-checker
proposal remains tracked in
#16.
Thanks to @jnolen for the contributed close cleanup, handshake buffering,
and original history exporter in
#5,
#17, and
#18.
v0.1.0 — Experimental baseline
First tagged baseline of this reverse-engineering experiment, prepared with Codex at commit 5a9b561711f017aac6063a2719b9c77acf07bfb4. This release snapshots current main before the next issue-fix batch; it does not include the open PRs.
Included work:
- TypeScript client for the internal TCP/remoting protocol, object graph, and generated API wrappers.
- UnifiedSearch corrections: fully qualified search fields, graph-resolved profile, and fresh results (PR #3).
- Stable album-ID favorite encoding (PR #2).
- Length-prefixed generated collection arguments and documented evidence tiers (PR #4).
- MIT license (PR #1).
Thanks to @jnolen for the contributed fixes and license work in PRs #1–#4.
Validation of the tagged commit: 44 SDK tests pass; SDK TypeScript build and web typecheck/build pass. Lint cannot run because the repository has no ESLint configuration. Documentation build also passes after installing the locked site dependencies. No live Core reads, playback, or mutations were performed for this release.
Known limitations remain tracked in the open issues, including struct schema reuse, generated full member names and nullable encoding, fragmented handshakes, and web recovery/favorite state. Most generated methods have not been tested against a live Core. This is an experimental baseline, not a compatibility claim for all Roon versions.