Roadmap
For a DJ, in plain words. Being built now: controllers and audio output choice in the Mac app, through a new app shell; a one-deck player that runs a playlist unattended. Next: a library light that only counts tracks expected on this Mac. Later, with no date: headphone cue on a second audio device in the Mac app; making stems in the installed app; drum and bass and other fast styles analyzed at their usual tempo; Color FX dials that switch effect; checks before a set and a watchdog during it. Nothing here is checked as shipped; some items already have code merged that has not been verified yet. Deck A is the work in progress; Deck B is the longer view.
Generated Sat 3 Oct 2026 from main of the private development repository (music-dj-tools) at 487fa677d7 by tools/roadmap.py. Sources: .planning/REQUIREMENTS.md and PARITY-TODO.md at that commit, and the GitHub REST API for issue state.
One stated rule.
The project keeps its plans as requirements, each with a scope: v1, v1.1, v2 or v3. This page shows the open ones that change what a DJ can do or see, grouped by area. Which requirements a DJ would notice, and the plain title each one gets, are editorial calls written into the generator; the column an item lands in is not. Requirement ids are in the small print under each item.
The rule behind the columns. Now: v1 or v1.1 scope, and an issue or pull request it cites is open on GitHub. Next: v1 or v1.1 scope with nothing open cited yet, or a parity-board item that cites open work. Later: v2 or v3 scope. Build tooling, test infrastructure, project process and pricing policy are left out, and so is anything for Windows or Linux, because the app is for macOS on Apple silicon only.
In progress now.
In the v1 or v1.1 scope, with at least one issue or pull request it cites still open on GitHub when this page was generated. 3 plans.
| Area | Plan | Open work |
|---|---|---|
| Playing a set | A one-deck listening player that runs a playlist unattended One deck, autoplay on, no mixer and no stems. A track that fails to load is skipped with a notice and the next one plays. PERFMODE-15 / v1 | 2 open issues |
| The Mac app | A new desktop shell for the Mac app, with controllers and signed in-app updates The 1.0 alpha runs in macOS's own web view (Tauri and WKWebView), which has no Web MIDI. The plan is to move the app to Electron, whose shell gives the page Web MIDI for controllers and its own choice of audio outputs, with updates checked against the app's code signature. The minimum macOS version would become 13. It is not in the 1.0 alpha. ELECTRON-08, ELECTRON-09 / v1.1 | 1 open pull request |
| The Mac app | Library mode held to a memory and CPU budget Library mode has a written memory and CPU budget. A measurement that passes the current test harness is still owed. PERFMODE-14 / v1 | 1 open issue |
Next.
In the v1 or v1.1 scope with no open issue or pull request cited, or an item from the parity board that cites one. Planned, not started or not tracked yet. 3 plans.
| Area | Plan | Open work |
|---|---|---|
| Your library | A library health light that only counts tracks expected on this Mac Tracks that live on another machine, on an unmounted drive or on a streaming service are listed in the detail, and do not turn the light amber. HEALTH-01 / v1 | None open |
| Your library | First-run setup that handles awkward folders honestly Folders the system refuses to list, folders that do not exist, odd file names and corrupt files are each named for what they are, and setup never dead-ends. SETUP-22 / v1 | None open |
| Agents and the command line | The whole first run, drivable from the command line The same setup steps, in the same order and with the same refusals, through the app's command line, so an agent can set up a fresh install. SETUP-24 / v1 | None open |
Later.
In the v2 or v3 scope. Intent, not a promise, and deliberately without dates. 25 plans.
| Area | Plan | Open work |
|---|---|---|
| Playing a set | A performance mode for live sets Checks before a set that can refuse with a named reason, a watchdog during it, and a report after it. PERFMODE-02, PERFMODE-09 / v2 | 1 open issue |
| Playing a set | Noticing a deck that has gone silent A deck that claims to be playing but is silent is stopped with a notice saying why, and autoplay carries the set on. AUDIOLIVE-09 / v2 | None open |
| Playing a set | Several Open DJ machines, and Ableton Link peers, on one clock One shared tempo and phase across machines, a sync lane above deck 1, launches quantized to the shared bar, and a second screen that controls the machine playing out. LINK-01, LINK-02, LINK-03, LINK-04, LINK-05, LINK-06, LINK-07, LINK-08, LINK-09 / v2 | 8 open issues |
| Playing a set | Color FX dials that switch effect A filter dial that can become reverb or a reverb and filter combination, and a filter with more character on fast turns. MIXUX-02, MIXUX-05 / v2 | 2 open pull requests |
| Headphones and outputs | Headphone cue on a second audio device in the Mac app Cue to headphones on one device while the room plays from another, in the installed app as well as in a browser. CUEOUT-07, CUEOUT-08, CUEOUT-14, CUEOUT-22 / v2 | 1 open issue |
| Headphones and outputs | Bluetooth headphones for cue Pairing, delay calibration and recovery when the headphones drop out, without ever interrupting the main output. CUEOUT-12 / v2 | 1 open issue |
| Headphones and outputs | A separate booth monitor output A third output for booth monitors that carries the room mix. CUEOUT-13 / v2 | None open |
| Headphones and outputs | Sending a previewed track to the room, in time A deliberate gesture that tempo-matches a preview and drops it in on the master's next downbeat. CUEOUT-16 / v2 | None open |
| Your library | Waveform previews with the same band balance as rekordbox's Open DJ's own browser previews drawn on the same per-band scale, so its rows and rekordbox's rows look alike. NATIVE-22 / v2 | None open |
| Your library | Artwork for tracks that rekordbox has none for Cover art from the file itself, an image in the same folder, or an online lookup the decks can ask for. PARITY-14 / v2 | 1 open issue, 1 open pull request |
| Your library | Folder imports that read title, artist and genre in the Mac app Folder imports in earlier Mac builds came in without title or artist. A fix that reads tags with a reader shipped inside the app is in the code; it has not been checked in an installed app yet. PARITY-15 / v2 | 1 open issue |
| Your library | Download a track or a selection for offline use A download action in the track menu that adds to and removes from what is kept on this Mac. CAT-07 / v2 | 1 open pull request |
| Your library | A 10,000-track library listing inside a set time budget The full listing and playlist pages measured against a target on the reader's own clock. LIBM-120 / v3 | 2 open issues |
| Beatgrids, tempo and key | Key changes inside a track Key changes marked as segments on the bar grid, from Open DJ's own analysis. NATIVE-05 / v2 | 1 open issue, 1 open pull request |
| Beatgrids, tempo and key | Open DJ's own beatgrids as the default Steadier grids fitted to the detected beats, made the default only after blind listening tests and a downbeat agreement target against rekordbox. NATIVE-14, NATIVE-16, NATIVE-18, BEATMAP-03 / v2 | None open |
| Beatgrids, tempo and key | Fast genres keep their usual tempo Open DJ's own analysis has reported some fast tracks at half tempo, such as drum and bass at 87 BPM instead of 174. This plan keeps them at their usual tempo, using the track's genre tag where it has one. It changes Open DJ's own analysis only: tracks imported from rekordbox use rekordbox's BPM and beatgrid by default today, and making Open DJ's grids the default is a separate plan. NATIVE-17 / v2 | None open |
| Stems | Making stems from the installed app Stem separation run from the Mac app itself, without a source checkout. STEM-39 / v2 | None open |
| Stems | Stems in MP3 or FLAC Stem bundles whose parts are MP3 or FLAC files load, not only WAV. STEM-03 / v2 | None open |
| The Mac app | Opening in Library mode by default Once Library mode has passed its budget, a cold start would open there. PERFMODE-12 / v2 | None open |
| The Mac app | A menu-bar helper A small menu-bar companion for library tasks, and a helper that keeps the Mac's load down during a gig. PERFMODE-08, PERFMODE-17 / v2 and v3 | None open |
| The Mac app | A Mac App Store edition A sandboxed store build that says plainly which features it cannot offer. SAND-01, SAND-02, SAND-03, SAND-04, SAND-05, SAND-06 / v2 | None open |
| Agents and the command line | Updating the installed app from the command line An agent with only the installed app could check for and apply an update. AGENT-13 / v2 | None open |
| Sets and sharing | Uploading a recorded set to SoundCloud One flow with a timestamped track list and a reminder about the rights to the music. SET-06 / v2 | 2 open issues |
| Sets and sharing | Broadcasting a set through VirtualDJ Research found no documented way for another app to broadcast into VirtualDJ's service, so this waits on VirtualDJ. SET-07 / v2 | 2 open issues |
| Sets and sharing | Recovering a synced edit that lost to another machine When two machines edit the same row, the losing version would be kept for 14 days and could be restored. CLOUDSYNC-26 / v2 | 1 open issue |
Check it yourself.
This page is generated, not written by hand. The generator, its inputs and the GitHub responses it used are kept together, so every Now claim can be re-checked.
# fetch issue state over REST, save it, render site/roadmap.html uv run tools/roadmap.py --repo <music-dj-tools clone> --sha 487fa677d7 # re-render from the saved responses only uv run tools/roadmap.py --repo <music-dj-tools clone> --sha 487fa677d7 --from-saved
Now is work under way for this release line, Next is planned for it but not started, and Later is the direction after that, with no dates. Parity board: 37 open items read, 0 shown, because an item from it needs an open issue or pull request to appear. Requirement scope is the project's own; a plan can move between columns when a requirement is rescoped.