Mandarin 🦆

How cool would it be to have one app that plays music from any folder on your Android phone or tablet, connects to your own server at home or away, and plays to every Sonos room and UPnP/DLNA streamer in the house? WiiM, Chord Poly, AV receivers, even the telly. No subscriptions, no streaming accounts, and no monthly “we’ve updated our pricing” email.

Even better: bit-perfect USB DAC output. On Android. Yes, really. The app has its own USB audio driver, so Android’s mixer is out of the way. Files play at their native rate and depth, with DSD sent natively or as DoP. Volume starts low, so your ears and your DAC survive.

Don’t stop.

Playback

  • Gapless on Sonos and UPnP renderers, with instant skips
  • Each device gets the file as stored when it can take it, or FLAC at the best it supports when it can’t. Optional upsampling per renderer.
  • PEQ (up to 10 bands, with the curve drawn as you edit) and AutoEQ headphone profiles, per renderer or phone
  • Move what’s playing to another room or player, and group your Sonos rooms
  • Random Album Radio per player, for when the queue runs dry

More.

Away from home

  • Built-in Tailscale, so there are no ports to open and no router fiddling
  • Download albums to a folder of your choice, as the original files or Opus 256, and play them with no server at all
  • Today’s picks can be saved for offline automatically
  • Music already on your phone gets watched and played like the rest of your library

Discovery, or “I forgot I owned that”

  • Smart Picks: five records a day from your own library
  • Discover: new releases from the artists you actually listen to
  • Album of the Day, Label of the Week, Listen Later, Favourites, and “not played in six months” (the guilt row)
  • Pitchfork’s latest reviews and Best New Music in the app, with Play on anything you own. (Pitchfork links)
  • Album and artist write-ups from Wikipedia and Qobuz
  • A Record Labels screen with logos from Discogs and FanArt.tv
  • Share cards with where to hear an album and three acts to try next
  • Dynamic playlists, plus playlist import and export as a file you can pass on
  • A fully customisable home screen, Android Auto, and a wall display for an old TV or tablet

Library

  • Albums identified via MusicBrainz, with iTunes as a second opinion. Changes only apply at 96% confidence or better.
  • Edit titles, artists and years, and find missing covers. Your files are never touched.
  • A waveform seek bar drawn from your actual files

Setup: one Docker command on an always-on Linux box (NAS, Pi 4/5 on 64-bit, home server). Open it in a browser, create your account, and it starts scanning. Install the Android app (8.0+) and it finds the server by itself. Both update themselves, which is more than can be said for some.

Linux host only, sorry. Docker Desktop on Windows and Mac can’t do the host networking needed to find your speakers.

iOS: add it to your home screen from Safari and you get the same interface at home. For the full experience, a cheap Android phone or tablet is honestly worth it.

“But there’s already Roon + ARC, JPlay, Symfonium, Plex…” There is, and none of them are terrible. But none of them do all of this in one free package. And when you report a bug, I’ll actually fix it. Some of us are still waiting on Roon.

And no ridiculous claims about better sound quality. It plays your files, properly. That’s it.

So what is this miracle app?

I’m proud to announce…

Mandarin

(No, not the bad guy in Iron Man 3. Not the fruit either.)

Free. MIT licensed. In final beta.

Install guide and docs: Mandarin — install & docs

Feedback and bug reports are very welcome. Be nice, it’s my baby.

A few images.

3 Likes

Current version is v0.6.0-RC9

Time to just use and listen, home and away

Enjoy

New since the last beta

Everything added and improved from v0.5.50 to this release candidate.

Album of the day, kept by the server

One album for every device, chosen by the server at 00:01 and remembered through updates and restarts; once played, from anywhere, it’s gone until the next 00:01.

Not played in six months

Waits until Mandarin has six months of your listening, then offers the albums you haven’t heard since.

One album per folder

Two copies of a record in separate folders are two albums; disc folders such as Disc 1 or CD2 inside an album’s folder are one album, shown disc by disc.

Every tag kept

All of each file’s tags and identifiers — MusicBrainz IDs, barcode, catalogue number, ISRC, ReplayGain — read into the server’s database.

Library Scanner

Albums identified by what their files carry first, then by MusicBrainz and iTunes; ReplayGain measured for files without it. Under Music Folders in Settings.

Volume Levelling

ReplayGain set per device — Off, Track, Album or Auto — with a target from −14 to −25 LUFS and a level for tracks of unknown loudness.

DSD to renderers

A renderer that takes DSD files, such as a Chord Poly, is sent the DSF or DFF itself, at the DSD rates switched on for it.

Move to another device

Moving what’s playing to another room, renderer or phone carries the queue over and plays on from the same track and second.

Play to another phone

A phone running the app is a player for your other devices at home, under its own name, while the app runs.

Offline mode

One switch: only the music on the phone shows and the server isn’t asked. The app also opens with no signal and finds the server again by itself.

Share card saved

In the app, Download saves the card to the phone’s Pictures/Mandarin.

Help behind ⓘ

Every setting’s longer explanation opens from an ⓘ after its name, with a short line left under it.

Release candidates

The app, its update check and the server’s updater read 0.6.0-RC builds in order, so updates arrive one after another.