Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 08:49
· 176 commits to main since this release
v2.0.0
7d7daf8

The WaveFlow web player: mixes made from your listening above a grid of albums

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 B into 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, .m3u import 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.0

The 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_CLIENTS lists the apps treated this way; set it empty to answer every app in full.
  • getPlayQueue answers 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 PATH or 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.0

The same image, digest for digest, is on Docker Hub:

docker pull instazdll/waveflow-server:2.0.0

Also published as latest in both, for linux/amd64 and linux/arm64 (a Raspberry Pi 4 or 5 on a 64-bit system).