- Rust 67.1%
- Svelte 17.7%
- TypeScript 10.6%
- Kotlin 1.7%
- Python 1.4%
- Other 1.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .cargo | ||
| .forgejo | ||
| crates | ||
| docs | ||
| plugins | ||
| scripts | ||
| src-tauri | ||
| ui | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| GLOSSARY.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| svelte.config.js | ||
| tsconfig.json | ||
| vite.config.ts | ||
Medley
A music player for Linux desktops and Android phones and tablets that plays your Deezer music and your own music files side by side, in one library and one queue.
Medley is an unofficial app. It is not made, endorsed or supported by Deezer. Deezer is a trademark of Deezer S.A. Read Before you use it first.
What it does
- One library for your music folders (MP3, FLAC, WAV, Ogg Vorbis, M4A/AAC/ALAC, AIFF) and your Deezer favourites, saved albums, followed artists and playlists. It is remembered, so it shows at once and while offline.
- Search and browse Deezer's catalogue and your library: tracks, albums and artists.
- Playlists of your own, and your Deezer playlists kept in sync with Deezer. Sort and filter any playlist page without changing its stored order.
- A queue with play next, add to queue, shuffle, repeat, gapless playback, and radio when it runs out.
- Track matching (optional): the same song from Deezer and from your files becomes one entry; you choose which source plays first.
- Offline tracks: keep Deezer tracks in an encrypted cache that only Medley can play.
- Several devices: pair your computer and phone once, then hand playback over from one to the other (queue, track and position carry on), or control one from the other. See Devices.
- Themes: light, dark or follow the system, with a choice of accent colours.
- Desktop integration (Linux): media keys and the system media controls (MPRIS), notifications when the track
changes, and
deezer://links opening in Medley. - Phones and tablets (Android): the layout adapts to the screen, with a slide-in sidebar, an overlay queue and touch-sized controls, and music keeps playing in the background with playback controls in the notification.
- Plugins, installed from inside the app: time-synced lyrics, ListenBrainz scrobbling and Discord Rich Presence.
- Automatic updates (Linux): Medley tells you when a new version is out and installs it with one click.
Before you use it
Medley plays Deezer through Deezer's private API, the one Deezer's own apps use, not its public developer API. Be aware of what that means:
- It breaks Deezer's Terms of Use. They forbid getting around the protection on Deezer's content and using it outside Deezer's own service. Deezer may suspend or close an account that does, without notice or refund. You use Medley with your Deezer account at your own risk.
- It can stop working at any time, whenever Deezer changes its private API.
- Deezer playback needs a paid Deezer subscription (Premium or better). Without one you can still use Medley for your own music files.
- Personal use only. Deezer's music is licensed for you to listen to. Medley does not export or convert tracks, and its offline cache plays only inside Medley. Do not use Medley to copy or share music.
Your Deezer login stays on your computer: Medley signs in through Deezer's own login page in your browser and sends your login only to Deezer.
The decision to use the private API, and its tradeoffs, are recorded in ADR 0001.
Install
Download the latest version from the releases page. There are builds for 64-bit Linux and for Android:
-
AppImage (any distribution): make it executable and run it.
chmod +x medley_*_amd64.AppImage ./medley_*_amd64.AppImage -
.deb(Debian, Ubuntu, Linux Mint and others):sudo apt install ./medley_*_amd64.debMedley then appears in your applications menu.
-
Android (7.0 or newer): download
medley_*_android.apkand open it on your device. Android asks you to allow installing apps from your browser or file manager the first time. It does not update itself: install the newer APK over the old one, or follow the releases with an app like Obtainium.
There are no ready-made builds for Windows or macOS yet; see Development to build it yourself.
Updates
On Linux, Medley checks for a new version when it starts and offers to install it. You can also check in Settings →
Updates, or turn the check off there. The AppImage updates itself; the .deb asks for your password to install the
update. Updates are signed, and Medley refuses one that is not. On Android, install the newer APK over the old one.
Getting started
- Open Settings.
- Under Music folders, add the folders with your music. Medley reads their tags and artwork and never changes the
files. On Android, Add Music folder adds your device's
Musicfolder; allow access to audio when asked. - Under Accounts, log in to Deezer. Your browser opens Deezer's login page and sends you back to Medley. If that
does not work, you can paste your Deezer
arlcookie instead. - Use Search or Library in the sidebar to find something to play.
Other settings worth a look: the theme under Appearance, the streaming quality and output device under Playback, offline storage under Offline cache, and which source wins when you have the same song twice under Source ranking.
Devices
Medley devices on the same network can find each other directly, with no account or server in between.
- On both devices, open the devices button in the top bar (or Settings → Devices).
- On one device, start pairing: it shows a QR code and a short code. Scan the QR code on the other (Android), or type the code. Pairing is the one-time step that makes two devices trust each other.
- Paired devices show each other's playback. Use continue here to take over the other device's queue, or hand your own playback to it. You can also play, pause, skip, seek and change the volume of a paired device without moving the audio.
Each device plays with its own accounts and library: tracks it cannot play are matched by ISRC or by title, artist and duration, and skipped when nothing matches. A device only hears handoffs while Medley is running, so open Medley on the phone first. On Android, allow local network access when asked. Design: ADR 0009, ADR 0010.
Appearance
Settings → Appearance sets the scheme (System, Dark or Light) and the accent colour. It applies to the whole app, including plugin views, and is remembered per device.
Plugins
Settings → Plugins lists the plugins you can install. Before installing, Medley shows what a plugin wants to access (for example a website, or your files), and it installs only if you allow that. Plugins run in a sandbox and can reach nothing else.
| Plugin | What it does |
|---|---|
| Lyrics | Time-synced (or plain) lyrics from LRCLIB in the big player. |
| ListenBrainz | Scrobbles what you play to ListenBrainz. |
| Discord Rich Presence | Shows what you are playing on your Discord profile. |
Want to write one? See docs/plugin-manifest.md.
Keyboard shortcuts (desktop)
| Key | Action |
|---|---|
Space |
Play / pause |
Ctrl+→ / Ctrl+← |
Next / previous track |
/ or Ctrl+K |
Search |
While you type in a text field, keys it uses are left to it; Ctrl+K works everywhere.
Your data
Medley keeps its library, settings, plugins and offline cache in ~/.local/share/tech.sbdevelopment.medley on Linux.
Delete that folder to start over. On Android they are in the app's own storage: clear it under Settings → Apps →
Medley → Storage to start over.
Help and feedback
Found a bug or have an idea? Open an issue in the issue tracker.
Development
Building from source, the repository layout and how releases are made: see docs/development.md. Ideas for later are in docs/ideas.md.
License
MIT. The license covers Medley's code only, not any music or Deezer's services.