- Rust 99.2%
- Shell 0.4%
- Python 0.2%
- Makefile 0.2%
| .agents | ||
| .opencode/agent | ||
| .woodpecker | ||
| crates | ||
| packaging | ||
| scripts | ||
| .containerignore | ||
| .gitignore | ||
| AGENTS.md | ||
| API.md | ||
| ARCHITECTURE.md | ||
| Cargo.toml | ||
| Containerfile | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
deezerd
A small, lightweight Deezer client, driven by a headless daemon that plays decrypted audio through its in-process playback engine, with a localhost HTTP surface for control and integration with arbitrary frontends.
Development is assisted with OpenCode, powered by GLM 5.3 Flash.
Licensed under Apache-2.0.
Cargo workspace, virtual manifest:
crates/deezer-client/, the standalone Deezer-facing library:DeezerClient(Deezer's public and private APIs, ARL auth, Blowfish/MD5 decryption)crates/deezerd-client/, the deezerd client library:DaemonClient(the daemon's HTTP contract) re-exportingdeezer-clientflat, the stable surface both binaries consumecrates/deezerd/, the daemon and reference CLI binary for interacting with itcrates/deezerd-tui/, the terminal UI for interacting with a running daemon
The daemon's HTTP surface is documented in API.md.
Quickstart
Build with cargo build --release, or if you have podman handy you can make release to use a container to do the
build for you and handle all the build dependencies neatly.
target/release/deezerd-tui --login— capture your Deezer ARL in a browser once; the daemon falls back to the state file the login writes (this is optional, launching a TUI against an unauthenticated daemon will offer to run the login)target/release/deezerd --arl <token>— start the daemon on localhost, with a specific ARL providedtarget/release/deezerd client play --playlist <id>— play a playlist, album, or podcast through the daemon's playback enginetarget/release/deezerd client search "<query>" --type track— search Deezertarget/release/deezerd-tui— drive the running daemon from the TUI
Install
make install— the binaries, docs, hicolor icons, the.desktopentry, and the daemon's user unit into~/.local; passsudo PREFIX=/usr/local make installfor a system-wide installmake rpm— thedeezerd(daemon + user unit) anddeezerd-tui(TUI +.desktop+ icons) rpms, built offline from vendored crates intotmp/dist/
After installing, systemctl --user enable --now deezerd runs the daemon. Environment variables (like an explicitly
provided ARL token, which takes precedence over the live login flow and state, or overriding the port) go in
~/.config/deezerd/env — the unit documents the variables.
On legality and morality
Streams audio on demand, fetched transiently into memory and served to local frontends. Nothing is cached or written to
disk automatically. The daemon binds to 127.0.0.1, holds audio, details on artists/tracks/albums, album art, and
lyrics in memory only. It uses your own Deezer credentials (your ARL session token, stored locally with 0600
permissions) for strictly personal, non-commercial use, one Deezer account per daemon.
The in-memory design exists because I don't want to get sued — so know what you're agreeing to:
- Deezer's Terms of Use authorize personal and private use of Deezer's own site, service and applications; third-party clients are not an explicitly sanctioned surface.
- Article 6 of the ToU forbids bypassing Deezer's protective technical measures, any download or transfer of Content into storage (calling out hard drives specifically) "whether permanently or temporarily", and automated collection of data from the service in a section talking about scraping. The daemon's private-API calls and in-memory decryption fall within the letter of those clauses, by my read.
- Article 7 of the ToU makes the account grounds for suspension "without notice or compensation" for bypassing protective measures or using multiple simultaneous connections. The consequence lands on your account, not this software.
- The only type of account I test is a paid account, I literally don't even know if a free account can log in. Control over what quality you're allowed to play lives on the API side, so you won't get good audio quality without a paid account. If you want deezerd to work well for you, subscribe and send Deezer your money to make sure you're supporting them and the artists you're enjoying.
- Listen reports go to Deezer unconditionally as I believe that properly reporting playback is what drives artist monetization. I oppose royalty siphoning the way I oppose piracy.
Use at your own risk. This web site is not endorsed by, directly affiliated with, maintained, authorized, or sponsored by Deezer. All product and company names are the registered trademarks of their original owners. The use of any trade name or trademark is for identification and reference purposes only and does not imply any association with the trademark holder of their product brand.