Swing Music

Self-hosted music player with a modern interface

Media Servers ★ 2.1k stars Easy setup MIT

Swing Music is a beautiful, self-hosted music player and streaming server for your local audio collection. It automatically organizes albums, artists, and folders and includes a polished web player.

Key features

  • Modern web player
  • Automatic library organization
  • Folder browsing
  • Single binary option

Pros & cons

Strengths

  • Attractive interface
  • Easy to deploy

Trade-offs

  • Younger project
  • No multi-user roles yet

Swing Music replaces

Last reviewed Sep 13, 2026 · 784 words

Swing Music has the nicest web player of any self-hosted music server I have run and no Subsonic API, and the second fact decides who should install it. Without Subsonic, none of the dozen mature phone apps that work with Navidrome will talk to it; your clients are the web interface and the project's own Android app. If you listen at a desk, on a TV browser, or on Android, that is fine and the interface will make you happy. If you want an iPhone app, a car head unit, or a Symfonium library, look elsewhere first.

Install: one port, two mounts

services:
  swingmusic:
    image: ghcr.io/swingmx/swingmusic:latest
    ports:
      - "1970:1970"
    volumes:
      - /srv/music:/music:ro
      - ./config:/config
    restart: unless-stopped

Port 1970 is the default, the music mount can be read-only, and the config directory holds the SQLite database, the image cache and settings. First launch walks you through creating an account and picking root directories, then a scan runs in the background. There is also a single-binary build for people who would rather not run Docker on a laptop; it takes --host and --port flags and stores its data next to the binary. The 256 MB of RAM the catalogue lists is realistic for a library of a few thousand albums; the thumbnail cache is the only thing that grows.

Folders are a first-class view, which changes the tagging story

Most music servers show you artists and albums and hide the filesystem, so an untagged folder of live bootlegs becomes a mess called "Unknown Artist". Swing Music keeps the folder browser as a top-level view alongside albums, artists and playlists. A half-tagged collection is therefore usable on day one, which is unusual, and the ordinary advice to fix your tags before you install becomes advice to fix them at your leisure.

It still reads tags for everything else. Album grouping uses album and album-artist fields, so compilations need ALBUMARTIST=Various Artists or they scatter, and embedded art is preferred over folder images. Genre and year drive the discovery sections on the home page. Lyrics from embedded tags and .lrc sidecar files display in the player, synced where the file supports it.

The interface is the reason to run it

The home page mixes recently added, recently played, and "because you listened to" rows, with proper artist pages including similar artists and a discography split by album, single and compilation. The now-playing view is full-screen art with a queue you can reorder. Keyboard shortcuts work, search is fast, and the whole thing renders well on a phone browser, which is how many people use it before the Android app. Playlists, favourites and listening history are per user.

Nothing here is a novel feature; the difference is that it is polished in a way self-hosted music servers rarely are, because the project has spent its effort on the front end rather than on client compatibility.

What it does not do yet

Accounts exist, but roles are basic: there is an admin who can manage users and rescan, and everyone else. There is no per-library access, so a shared family server cannot hide one person's collection from another. Transcoding is limited compared with Navidrome, which matters on mobile data with a lossless library. Scrobbling to Last.fm and similar services is newer and less proven. And the project began in 2022, so expect the scan logic and the database schema to keep changing between releases; take a copy of the config directory before each upgrade.

Against Navidrome and Jellyfin

Navidrome is the default for a reason: the Subsonic ecosystem gives it clients on every platform, transcoding profiles per user, and years of stability. Jellyfin covers music adequately if you already run it for video, though its music interface is the weakest part of the product. Swing Music is the choice for someone whose main listening is a browser or Android and who cares how the player looks. The library layout is the same for all three, so switching later costs a rescan, not a re-tagging.

What I'd do

If your library is on a NAS and you listen mostly on a laptop or Android phone, run Swing Music and enjoy it; the install is 10 minutes and it will be the server you show people. If any iPhone, car or smart speaker is involved, run Navidrome, and if the interface bothers you, run both against the same read-only music mount. They do not conflict, the second one costs 128 MB, and you will find out within a week which one you open.

Compare Swing Music

21 head-to-head comparisons.

Similar media servers apps