An open-source DJ software effort focused on making Mixxx a first-class citizen in the Pioneer/AlphaTheta CDJ world — so a DJ can prepare a set in free, open software and walk up to any club CDJ with confidence that their playlists, cues, and beatgrids come with them.
The single fear that keeps DJs on proprietary rekordbox:
"I'm scared that if I use something else, my USB won't be read by the newer CDJs."
The reassurance we're building toward:
- Your music always plays. Even if a database is malformed, a CDJ can browse the USB by folder and play the raw audio. The catastrophic "nothing works" scenario isn't on the table — worst case you lose prepared metadata, not the music.
- On legacy CDJs, your full prep comes with it — and it's tested on real hardware.
- On the newest CDJs, we target both the reverse-engineered path and AlphaTheta's own OneLibrary format.
- You can verify the stick before you leave the house (round-trip verifier).
Rather than build a DJ app from scratch, we build on Mixxx (GPLv2) — a mature, cross-platform open-source DJ application. The goal is to add/extend CDJ USB export (writing the unencrypted PDB/ANLZ format that CDJs read directly), ideally upstreamed into Mixxx rather than kept as a hard fork. See docs/architecture.md.
Phase 0 (standalone writer) — proven. libopenboxxx-export/ turns a
plain track/playlist model into a real export.pdb (all 20 standard tables + the 8-colour palette)
plus per-track ANLZ analysis files (beat grids + hot/memory cues). Every output is checked against
two independent real-rekordbox-format parsers (pyrekordbox for ANLZ, a crate-digger-spec Kaitai
parser for PDB), and diffed field-for-field against genuine rekordbox ANLZ files.
Phase 1 (Mixxx integration) — working. Both the reader path and the in-Mixxx button exist:
openboxxx_from_mixxxreads amixxxdb.sqlitedirectly into the export model (no Mixxx build needed), validated on a real ~2,900-track library.- An in-Mixxx "Export Library to rekordbox USB" button — a
RekordboxExportJob+ dialog mirroring the Engine DJ exporter, behind aREKORDBOX_EXPORTCMake option — plus a "Cue Sheet to Tracklist" tool. This lives in a Mixxx fork and compiles + links on macOS (Intel + Apple Silicon), Windows, and Linux via CI. Downloadable builds are on the Releases page; source is sparkly-quasar/mixxxfeat/rekordbox-usb-export.
Still to confirm — desktop import & hardware. Exports complete without errors and round-trip through the parsers, but haven't yet been confirmed by importing into rekordbox desktop (verification tier 3) or playing on a physical CDJ/XDJ (tier 4). Those are the real proof — CDJ hardware testers are very welcome.
See libopenboxxx-export/README.md for the component-by-component
status table and how to build + run the verification tests.
- docs/legal.md — how we stay within legal bounds (the important one)
- docs/architecture.md — high-level framing & reuse map
- docs/export-design.md — implementation design: phases, MVP scope, verification ladder, in-app bug reporting
- docs/research-findings.md — source-cited research: Mixxx internals + PDB/ANLZ byte formats
- docs/mixxx-export-status.md — state of Mixxx's export effort (what exists vs. what's left)
openboxxx stands on a lot of other people's work — both the format reverse-engineering that makes writing these files possible and earlier Mixxx→rekordbox efforts.
Format research:
- crate-digger &
dysentery — Deep Symmetry (James Elliott):
the PDB/ANLZ reverse-engineering and the
.ksyspec this project round-trips its output against (EPL-1.0, used as a format description, not copied code). - pyrekordbox — Dylan Jones (MIT): ANLZ layouts referenced here, and an independent parser the tests use as an oracle.
Prior rekordbox/PDB libraries & exporters:
- rekordcrate — Jan Holthuis (@Holzhaus): a Rust PDB parser/serializer (PDB serialization is merged) and the Mixxx maintainer-suggested path for PDB export.
- libdjinterop — @mr-smidge: the library behind Mixxx's existing Engine Prime export; the Mixxx adapter here mirrors its export-job/dialog architecture.
- rex (@kimtore),
mixxx-db-tools (@arximboldi),
TheKantankerus/MixxxToRekordbox, andFrankwaP/mixxx-utils: earlier community approaches to getting Mixxx libraries onto CDJs.
Context: this addresses the long-standing feature request mixxxdj/mixxx#9463. openboxxx's writer is a standalone C++ library — a third path alongside rekordcrate (Rust) and libdjinterop (C++). Which architecture Mixxx should ultimately adopt is an open discussion, not settled here.
Because this builds on Mixxx (GPLv2), this project is GPLv2 as well. That copyleft is a feature, not a bug — it keeps the work open, which is the whole point.