Spun: a CD-shaped music player for Linux with Cider integration
A CD-shaped music player for Linux, with local playback and Cider integration.
At a glance
- What is it?
- Spun renders your album art as a spinning CD, vinyl record, cassette or TP-7-style recorder, and it can drive Apple Music through Cider's local API on port 10767. It builds from source, and its PolyForm Noncommercial licence means it is not OSI open source.
- Who is it for?
- Adopt Spun if you run a Qt 6.8+ Linux desktop, already keep Cider open for Apple Music, and want a local player whose interface is the point rather than a list of rows. Do not adopt it if you need a packaged installer, a permissive OSI licence, or a player you can ship inside a commercial product; PolyForm Noncommercial 1.0.0 rules that out, and Nix even requires NIXPKGS_ALLOW_UNFREE=1.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 15 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Spun is for, and who it is aimed at
Most Linux music players present a library: columns, cover thumbnails, a queue. Spun presents a physical object. The README describes it as "a music player for Linux with CD, vinyl, cassette and recorder views", and the album artwork is placed on a spinning disc, record, tape or TP-7-inspired recorder. The interface follows Material Design 3, and optional 3D players add depth and lighting that tracks Noctalia's wallpaper palette.
The target user is narrower than "Linux desktop owner". Spun is developed on CachyOS with Hyprland and Noctalia, and the README warns that desktop integration can vary elsewhere. It assumes a modern Qt 6.8+ stack, a C++20 toolchain, and a willingness to build from source. In exchange you get four playback surfaces that share controls, album details, lyrics and a Mini mode, plus four input paths: local files, YouTube Music browsing, Jellyfin, Navidrome or Subsonic servers, and Apple Music through Cider. If your interest is a player that looks like a piece of hardware on your desk, that combination is unusual. If your interest is a stable package in your distribution's repositories, it is not there yet.
How the media views and the Cider queue actually work
The four views are not skins over one widget. Each has its own transport behaviour. In CD mode, Stop pauses and returns to the start, and the lid latch pauses before opening. In vinyl mode you drag the needle to seek and play, and the 3D turntable's cue lever lifts or lowers the needle to pause or play. The cassette's top buttons play, pause, seek ten seconds in either direction, and stop; pressing Stop again opens the door. The 500 RPM setting and the rotation speeds affect visual speed only, which the README states explicitly.
Local playback is file-based. Files are not copied or modified. Imports show progress, skip songs already in the queue, and can be cancelled without leaving a partial import. Directory symlinks inside an added folder are not followed, which is a deliberate boundary rather than an oversight.
Cider is a separate process. You sign in there, and Cider handles authentication and streaming, so it must remain running. For search, browsing and the full queue, Spun talks to Cider's local API on port 10767 and you approve the connection inside Cider. Older Cider builds use an app token created under Settings, Connectivity, Manage External Application Access, with playback, queue, library and audio access allowed. One detail matters when debugging: basic playback controls use Linux's media-player interface, so working playback alone does not confirm API access.
Building Spun from source on Arch, Fedora and Nix
There is no packaged installer. The README says Spun builds from source, and the repository carries scripts/build.sh, scripts/install-launcher.sh and scripts/run.sh. On Arch or CachyOS, install the build dependencies first; the package list includes qt6-base, qt6-declarative, qt6-multimedia, qt6-svg, qt6-wayland, taglib and qt6-quick3d.
sudo pacman -S --needed base-devel git cmake ninja python qt6-base qt6-declarative qt6-multimedia qt6-svg qt6-wayland taglib qt6-quick3dFedora users get the equivalent set through dnf, with qt6-qtbase-devel, qt6-qtdeclarative-devel, qt6-qtmultimedia-devel, qt6-qtsvg-devel, qt6-qtwayland, taglib-devel and qt6-qtquick3d-devel. Then clone and build:
git clone https://github.com/yappologistic/Spun.git
cd Spun
./scripts/build.sh -DBUILD_TESTING=OFF
./scripts/install-launcher.shThe launcher points at the folder you built in. If you move that folder, run ./scripts/install-launcher.sh again. To start Spun you can open it from the application menu or run ./scripts/run.sh from its folder. If Qt Quick 3D is missing or unwanted, add -DSPUN_ENABLE_3D=OFF to the build command; the project includes 3D only when Qt Quick 3D is available.
Nix users with flakes enabled run from the cloned source folder. The noncommercial licence means Nix treats the package as unfree, so the opt-in is required:
NIXPKGS_ALLOW_UNFREE=1 nix run --impure .The flake supports x86_64 and aarch64 Linux, includes Wayland and X11 plugins, and forces no display backend. On Ubuntu 22.04 and 24.04 the default repositories are a dead end: they do not provide Qt 6.8+ or TagLib 2.0+. You install a newer Qt SDK separately and point CMake at it with -DCMAKE_PREFIX_PATH=/path/to/Qt/gcc_64, and build TagLib 2.x from upstream. If TagLib lives in a custom prefix, its lib/pkgconfig directory goes into PKG_CONFIG_PATH, and pkg-config --modversion taglib must report 2.0 or newer.
Where Spun stops being the right tool
The licence is the first boundary. Spun is source-available under PolyForm Noncommercial 1.0.0. Personal and other permitted noncommercial use is free, but the README states plainly that this is not an OSI-approved open-source license. Anyone evaluating Spun for a commercial product, a paid support contract, or a distribution that only ships OSI-approved licences should stop here. The Nix instructions make the consequence concrete: the flake needs NIXPKGS_ALLOW_UNFREE=1 to evaluate.
The second boundary is packaging. There is no packaged installer and no retrieved release artefacts, so updates mean pulling the repository and rebuilding. The launcher stores a path to your build folder, which breaks silently if you move it until you rerun install-launcher.sh.
The third is the Cider dependency. Apple Music playback requires the appropriate access through Cider, and Cider must stay running. Available actions depend on your Cider version and permissions, so a feature that works for one user may be absent for another. Spun does not authenticate against Apple Music itself.
Finally, the development environment is CachyOS with Hyprland and Noctalia, and the README does not claim broad desktop testing. If you are on a desktop where Qt Wayland integration is uneven, treat the interface as unverified rather than supported.
Spun against Elisa, Amberol and Cider itself
Elisa is the closest comparison in intent: a KDE music player that indexes a local library and presents it as a browsable collection. Spun does not index into a library view; it puts one record on a platter and gives you a needle. Elisa is packaged by distributions and licensed permissively, while Spun is built from source under a noncommercial licence. If you want your music catalogued and searchable, Elisa's approach fits better.
Amberol is a smaller GTK player with a similar one-album-at-a-time focus and a deliberately reduced feature set. The difference is scope: Amberol plays local files, while Spun adds YouTube Music browsing, Jellyfin, Navidrome and Subsonic connections, and the Cider bridge. Spun is the larger surface with the larger dependency list.
Cider is not a competitor so much as a component. It is the Apple Music client that authenticates and streams; Spun is a front end that drives it through the local API on port 10767. Running Cider alone gives you Apple Music without the four media views. Running Spun without Cider gives you local files and the server integrations, and the Cider option simply does nothing.
Maintenance, licensing and what an upgrade costs you
The repository is not archived, and the last push was on 2026-09-16. There are no retrieved releases, so the version you run is the commit you cloned. Upgrading is a git pull followed by a rebuild through scripts/build.sh and, if the folder moved, scripts/install-launcher.sh. There is no migration path to manage because there is no installed package and no documented database format; the README says your music files are not copied or modified, so the risk of an upgrade sits in the build, not in your library.
The licence deserves a plain reading rather than a summary. PolyForm Noncommercial 1.0.0 permits personal and other permitted noncommercial use for free, and the README points to a license section and a licenses/ directory in the repository for details. The practical implication for a team is that the noncommercial restriction is the deciding factor, not the source availability. Nothing in the repository describes commercial licensing terms, so if you need them, the repository is the place to look.
Editorial conclusion
Adopt Spun if you run a Qt 6.8+ Linux desktop, already keep Cider open for Apple Music, and want a local player whose interface is the point rather than a list of rows. Do not adopt it if you need a packaged installer, a permissive OSI licence, or a player you can ship inside a commercial product; PolyForm Noncommercial 1.0.0 rules that out, and Nix even requires NIXPKGS_ALLOW_UNFREE=1. Before committing, verify three things on your own machine: that pkg-config --modversion taglib reports 2.0 or newer, that Qt 6.8+ with Quick Controls, Multimedia and SVG is the Qt CMake actually finds, and that Cider's local API on port 10767 accepts Spun after you approve it in Cider. Playback working over the media-player interface proves nothing about API access.
Frequently asked questions
How do I install Spun on Linux?
There is no packaged installer; the README says Spun builds from source. Install the Qt 6.8+ and TagLib 2.0+ development packages for your distribution, then clone the repository and run ./scripts/build.sh -DBUILD_TESTING=OFF followed by ./scripts/install-launcher.sh. Nix users with flakes enabled can run NIXPKGS_ALLOW_UNFREE=1 nix run --impure . from the cloned source folder.
Does Spun work with Apple Music through Cider?
Yes, with conditions. You sign in to Cider first, keep Cider running, and choose Cider in Spun; Cider handles authentication and streaming. For search, browsing and the full queue you enable Cider's local API, connect from Spun's Queue, and approve Spun in Cider, which talks to the API on port 10767.
Is Spun open source?
No, in the OSI sense. The README describes Spun as source-available under PolyForm Noncommercial 1.0.0 and states directly that this is not an OSI-approved open-source license. Personal and other permitted noncommercial use is free, and the Nix flake requires NIXPKGS_ALLOW_UNFREE=1 because of the licence.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/yappologistic-spun)