Repository navigation
v2.0.0
WaveFlow Server 2.0.0
The first stable release. WaveFlow Server streams the music you own to your browser, your phone and your desktop, from one Rust binary and SQLite, and answers the Subsonic apps you already use. Since the last beta it has grown a library browser, artist pages, smart playlists, podcasts, internet radio, statistics and mixes, and it measures the real quality of your lossless files. Four Subsonic apps were run against it before this release, and every server defect they found is fixed.
New since 2.0.0-beta.1
- Artist pages: biographies and similar artists from Last.fm, portraits from Deezer and fanart banners from TheAudioDB once you switch them on, or a portrait and a banner you choose yourself.
- The real quality of your files: every lossless file is measured from its audio in the background, and a FLAC that was once an MP3 is shown for what it is.
- Your library, your way: browse by folders as well as by tags, split a joined credit such as
Artist A, Artist Binto two artists, and see on one page what needs a decision. - Smart playlists that fill themselves from rules, podcasts, and internet radio, all playable from the play bar.
- Discovery: listening statistics, mixes made from your own listening, similar songs drawn from your library, and lyrics from LRCLIB, when you switch it on, for a file that has none.
- Playlists and sharing: a track can appear twice in a playlist, public playlists for the other accounts,
.m3uimport and export, and share links that open a player page in any browser. - Scanning that keeps up: only what changed is read again, one damaged folder no longer stops the rest, a watcher picks up new files, and a missing file keeps its favourites, playlist entries and play history until it returns. A purge can be undone for a week.
- Playback: AAC alongside MP3 and Opus, server-side volume levelling for Subsonic apps, and ReplayGain in the web player.
- The web player: a Songs page with search as you type, synced lyrics with an immersive view, technical details and a quality meter, a Settings page, and an artist's most played tracks.
- Safer by default: sign-in is protected against guessing, a one-time token guards the first-run setup, and a lost or compromised instance key can be replaced.
- Outside Docker: the server finds FFmpeg beside its own executable, and laptop mode (
WAVEFLOW_LAPTOP=true) keeps its data in your user folder, listens only on this computer, and never starts twice. It prepares the double-click downloads planned for a later release. - The source is one click away: the sign-in page and Settings link to the source of the exact version running, as its AGPL licence asks.
Fixed
- DSub: its shares screen no longer crashes, an album can be shared, starred composers no longer appear as starred artists, and a track with no album can be reached by folders.
- A removed track is refused by every read and by every write that targets it, while its favourites and ratings stay attached and come back with the file. Saving a play queue is the exception: the queue is saved without the tracks that went.
- An album whose files have all gone no longer stays listed, empty.
- iPhone players seeking in a converted stream get a proper answer.
- Search no longer finds an album by the title of a track that was removed.
- A genre written twice in one file no longer stops a whole scan batch.
Install
docker run -d --name waveflow \
-p 4533:4533 \
-v waveflow-data:/data \
-v /path/to/music:/music:ro \
ghcr.io/instazdll/waveflow-server:2.0.0The image runs on linux/amd64 and linux/arm64, which includes a Raspberry Pi 4 or 5 with a 64-bit system. It is the same image, digest for digest, on Docker Hub as instazdll/waveflow-server:2.0.0, and latest now follows this release.
Open http://your-host:4533: the setup screen asks for the one-time token the server wrote to /data/setup-token. The README has the next steps.
Upgrading from a beta
Pull 2.0.0 and start it on the same data volume. The server copies the database and its key aside before it migrates, so a failed upgrade can be rolled back from that copy. Keep waveflow.db and instance.key together in your backups: the Subsonic passwords and scrobbling links in the database are sealed with that key, share links are derived from it, and the server refuses a mismatched pair at startup.
Two changes a client may notice:
- DSub is answered in plain Subsonic. It receives no OpenSubsonic fields, and its XML comes as
text/xml.WAVEFLOW_SUBSONIC_LEGACY_CLIENTSlists the apps treated this way; set it empty to answer every app in full. getPlayQueueanswers no element at all before a queue has been saved, as the Subsonic reference does.
Tested with
Symfonium 15.1.0 and DSub 5.5.3 on Android, Feishin 1.17.0 on Windows, and Juliet 8 on an iPhone, on 2026-10-27 and 2026-10-28. What each app does and does not use is in the compatibility matrix.
Known limitations
- Juliet sends the account password as an API key once it has read the server's extensions, and crashes when that is refused. A seek made after that point fails; everything before it works.
- No 32-bit ARM image: a Raspberry Pi running a 32-bit system needs a 64-bit one.
- The image needs FFmpeg, which it carries; a binary run outside Docker needs FFmpeg and ffprobe on
PATHor beside it.
Full changelog: CHANGELOG.md · v2.0.0-beta.1...v2.0.0
Container image
docker pull ghcr.io/instazdll/waveflow-server:2.0.0The same image, digest for digest, is on Docker Hub:
docker pull instazdll/waveflow-server:2.0.0Also published as latest in both, for linux/amd64 and linux/arm64 (a Raspberry Pi 4 or 5 on a 64-bit system).
