3
18
Fork
You've already forked LibreDJ
6
DJ Software for Linux in the making https://libredj.org
  • Rust 99.5%
  • Nix 0.4%
  • Shell 0.1%
2026年06月29日 13:03:58 +02:00
assets v0.8.0 2026年05月23日 20:01:25 +02:00
crates libplayer: Remove shaping function on jogwheel velocity 2026年06月29日 13:03:58 +02:00
learning-resources Here we go 2022年03月15日 23:58:54 -04:00
resources/keyboard_bindings - Fix drift with (former) TempoKind::AddRelative 2026年05月06日 03:10:30 +02:00
scripts scripts: Add cargo-fix convenient script 2026年05月06日 03:12:41 +02:00
.envrc nix: fix .envrc to not use --impure 2025年12月24日 00:26:02 +01:00
.gitignore Add nix package building 2024年09月27日 22:32:17 +02:00
Cargo.lock cargo: update 2026年06月27日 17:39:19 +02:00
Cargo.toml cargo: update 2026年06月27日 17:39:19 +02:00
CHANGELOG.md Update changelog 2026年06月28日 16:54:25 +02:00
flake.lock nix: Update nixpkgs 2026年02月08日 02:50:51 +01:00
flake.nix nix: Update nixpkgs 2026年02月08日 02:50:51 +01:00
LICENSE Add license file 2026年01月03日 23:00:21 +01:00
README.md Update README 2026年01月11日 21:58:22 +01:00
rust-toolchain.toml Fix shell nix to use nighty 2025年01月12日 02:59:43 +01:00
TODO.md Remove bugs from todo.md 2024年07月23日 18:54:45 +00:00



gpl license badge

A 4 Deck DJ Software for Linux in the making

Screenshot of the gui
Screenshot of the gui Screenshot of the gui Screenshot of the gui

Talk

I held a talk about LibreDJ at the Quellcode. I presented the project's idea & philosophy and how I'm using it to DJ/perform with.

Goals

  • 4 Decks
  • Good beat jumping/looping
  • Good performance
  • Low latency
  • As best as possible playback/resampling
  • Minimal & clean user interface
  • Good library management
  • Completely usable with Keyboard

Non-Goals

  • No mixing/eq/effects. Use an external mixer or something like equis
  • Session management. Use qpwgraph for this
  • Radio Broadcasting
  • Stem seperation (I'm up to support stem files though)
  • Rekordbox/Serato export/import
    • If there's a good crate, maybe though

Supported Hardware

  • Denon SC2000

How to run

Make sure you have pipewire/jack installed and a rust compiler.

- git clone the repo
- PIPEWIRE_QUANTUM=256 PLAYLISTS=/path/to/playlists LIBRARY=/path/to/your/music cargo run --release

Configuration

Supported environment variables:

  • LIBRARY=/path/to/your/library Root path of library. LibreDJ will read from this directory.
  • PLAYLIST=/path/to/your/playlists Path where playlists are loaded from (and saved to)
  • HISTORY=/path/to/your/history If set, history.m3u will be saved here
  • BINDING=fr_FR Set path from which a keyboard bindings file should get loaded
  • SHOW_FPS=on|off Display FPS & frame time information in top bar

Keybindings

By default, the bindings are (for en_US keyboard) :

  • Esc => Open Menu
  • Arrow Keys => navigate library/file browser/popup
  • Enter => Load track to current Deck
  • F1-F4 => Switch between Deck 1-4
  • q => Cue
  • w => Play
  • a s d f => Nudging
  • z x c v => Adjusting Pitch
  • i o p [ ] => Set loop starting at current playhead
  • I O P { } => Set loop endingt at current playhead
  • n m , . /- => Jump x beats forward
  • N M < > ? => Jump x beats backwards
  • Space => Switch waveform zoom
  • - => Zoom out of Waveform
  • = => Zoom in on Waveform
  • F11 => Toggle fullscreen

To quit the program first press Esc, then q.

Customize Keybindings

The Keybindings are almost completely customizable. To do so, copy any existing binding to a new ron file (https://github.com/ron-rs/ron). Then select the keyboard binding file by setting the env variable BINDING.

- git clone the repo
- PIPEWIRE_QUANTUM=256 BINDING=/path/to/your/bindings.ron gui

Some alternatives layouts are provided in resources/keyboard_bindings. We currently support de_DE, fr_FR and en_US.

You can extend/alter the bindings map. Please have a look at the file and if you have questions feel free to ask.

Hacking

Hot Reloading

With the help of the subsecond crate of dioxus we can have hot reloading in the gui.

  1. Make sure you configured your rustc to use the mold linker
  2. Install dioxus cli with cargo install dioxus-cli --version <CURRENTSUBSECONDVERSIONSEECARGOTOML>
  3. Wrap any code with crate::hotreload(|| { <YOURCODE> } ) to enable hot reloading for this code
  4. Run the gui with dx Example: PIPEWIRE_QUANTUM=256 PLAYLIST=/home/foo/Musik/Techno/Playlists/ LIBRARY=/home/k/Musik/Techno HISTORY=/home/foo/Musik/Techno/Playlists/History pw-jack dx serve --hot-patch --features hotreload

Architecture

Screen Design for future GUI

Screenshot of the gui