One library, three places
Search runs across every source you enable and merges the results. Playback prefers the copy you already hold: device, then your server, then online.
Free · Open source · No accounts
Spinet plays what is on your device, what is on a server you run, and what is online — and treats the three as one library. No ads, no subscription, no sign-in.
Windows · macOS · Linux · Android · GPLv3
A local copy first, your server next, online last. Nothing is fetched twice.
Playlists, likes and play counts sync through your own server.
Downloads carry real title, artist and cover art — not just a filename.
Search runs across every source you enable and merges the results. Playback prefers the copy you already hold: device, then your server, then online.
Filter any list by title or artist, and search your whole server library rather than one folder at a time.
Artwork and metadata come from iTunes, with karaoke and tribute recordings rejected rather than matched — and a re-fetch that ignores whatever a bad match left behind.
Keeps playing when the phone is locked, with notification and lock-screen controls. On the desktop: a mini player that stays on top, taskbar controls and media keys.
Create them, import from CSV or a link, drag to reorder, swap in alternate versions of a song. A playlist never holds the same song twice.
The app checks GitHub for a new release, verifies the download against a published SHA-256, and asks before installing anything.
Latest release, straight from GitHub.
The portable build keeps its settings beside it — run it from a USB stick and leave nothing behind.
Sideloaded, so Android asks for permission to install it. Updates afterwards happen inside the app.
macOS and Linux: the desktop build runs anywhere a JDK 17+ does — build it from source until packaged installers are published.
Every release ships a SHA256SUMS file. The in-app updater
checks downloads against it automatically; if you download by hand, you
can too.
Optional, and free. A small self-hosted library that stores your music and
serves it back to every device you use — upload from the phone, browse
folders as playlists, stream, delete. One docker compose up.
Setup walkthrough
Video coming soon — the written steps are in the server repo.
An Oracle Cloud Always Free instance costs nothing and is enough. Any box that runs Docker works.
A free Duck DNS name is fine — the certificate is issued automatically either way. No domain purchase needed.
Clone the repo, set one line in .env, docker compose up -d.
Settings → My Server → your host → Save. Every device you do this on shares the same library.
Yes. No ads, no subscription, no account, no paid tier. It is GPLv3 software — you can read the code, change it, and share it.
No. Without one Spinet still plays music on your device and online. The server is what makes a library — and your playlists, likes and play counts — follow you between devices.
Whatever sources you enable: your own server, a folder on your device, and online sources resolved in-app. You decide what is turned on.
Spinet can save audio from the sources it resolves, with title, artist and cover art embedded. Downloading copyrighted material may breach a provider's terms or your local law — that choice, and the responsibility for it, is yours. Spinet is a tool, not a licence.
No analytics, no telemetry, no account. The only things it contacts are the sources you enable, your own server, and GitHub when it checks for an update.
It is distributed as an APK from GitHub releases rather than a store listing. Android will ask you to allow the install once; updates after that are handled inside the app.
Add a server when you want your library on more than one device.