Free · Open source · No accounts

Your music.
Your sources.
Your server.

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

Spinet

Plays what you already have

A local copy first, your server next, online last. Nothing is fetched twice.

Follows you between devices

Playlists, likes and play counts sync through your own server.

Files that make sense elsewhere

Downloads carry real title, artist and cover art — not just a filename.

What it does

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.

Find what you own

Filter any list by title or artist, and search your whole server library rather than one folder at a time.

Correct covers and tags

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.

Background playback

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.

Playlists that behave

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.

Updates you control

The app checks GitHub for a new release, verifies the download against a published SHA-256, and asks before installing anything.

Download

Latest release, straight from GitHub.

Windows

Checking latest release…

Installer (.msi) Portable (.zip)

The portable build keeps its settings beside it — run it from a USB stick and leave nothing behind.

Android

Checking latest release…

APK

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.

Run your own server

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.

  1. Get a machine

    An Oracle Cloud Always Free instance costs nothing and is enough. Any box that runs Docker works.

  2. Get a hostname

    A free Duck DNS name is fine — the certificate is issued automatically either way. No domain purchase needed.

  3. Start the stack

    Clone the repo, set one line in .env, docker compose up -d.

  4. Point the app at it

    Settings → My Server → your host → Save. Every device you do this on shares the same library.

Full setup guide

Questions

Is it really free?

Yes. No ads, no subscription, no account, no paid tier. It is GPLv3 software — you can read the code, change it, and share it.

Do I need a server?

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.

Where does the music come from?

Whatever sources you enable: your own server, a folder on your device, and online sources resolved in-app. You decide what is turned on.

Can I download songs?

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.

Does it track me?

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.

Why is the Android build sideloaded?

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.

Start with the download.

Add a server when you want your library on more than one device.