First release on crates.io.
The rekordbox history is readable from C++
rekordbox writes a history playlist every time a player mounts a medium, holding the tracks in the order they were played. The parser has decoded them all along; the cxx bridge simply did not carry them across, so a host could not see them. Now it does.
They are the only record of what was played that lives on the medium itself — a deck that mounts read-only never adds to them, which makes them somebody else's history and worth exactly that: what came off this stick before tonight.
One thing to know if you build on it. The history playlist row carries no date: it is an id and a name (HISTORY 001), and its entries are only track/playlist/index. So ordering is all it offers — a later id is a later session, a later position is later within it. That is enough to rank sessions against each other, and not enough to interleave them with plays from another source.
A date does exist elsewhere in the export, in a history table (page type 19) this library does not decode: 96 fixed-width rows on the sample, each with an ascending id and an ASCII YYYY-MM-DD. It stays undecoded because one export with a single distinct date cannot say which of its remaining fields mean what. It wants a second export from a different day before anyone guesses.
CI builds for the machine this runs on
The matrix built x86_64 Linux and macOS. This library is linked statically into Mixxx on a Raspberry Pi, so arm64 had never been covered at all. It is now, on GitHub's free arm64 Linux runners.
macOS is gone, and the consequence is written into the workflow rather than left to be discovered: the IP_BOUND_IF branch is no longer compiled by CI, so a macOS break will surface to whoever next takes a capture.
Three genuine CI failures went with it:
- The licence check rejected the project's own crates. The allow-list said
GPL-3.0, the deprecated SPDX identifier, while the crates declareGPL-3.0-only. cargo-deny compares identifiers exactly. - The doc build failed on two links from public documentation into private items, which rustdoc renders as plain text — so the docs degraded silently.
actions/checkout@v4is on deprecated Node 20.
--locked is now used throughout, because the Pi's Docker build uses it and a drifted Cargo.lock should fail in CI rather than in a build nobody watches.
Also in this release
- AUTO device numbering is treated as a remembered preference rather than a negotiation (F58).
Crates
| Crate | What it is |
|---|---|
prolink-proto |
The wire codecs. No I/O, no clock. |
prolink-rekordbox |
export.pdb, the ANLZ files, device settings. |
prolink-capture |
Reading Pro DJ Link traffic out of pcap, with TCP reassembly. |
prolink |
Sockets, timers and state machines. |
prolink-cli |
The prolink binary. |
prolink-cxx |
The C++ binding. |
Reverse engineered for interoperability, from observation of traffic between devices the author owns. Pro DJ Link, CDJ and rekordbox are trademarks of AlphaTheta Corporation; this project has no affiliation with, sponsorship by or endorsement from them.