OpenSourcePicks

Open source alternatives to popular software, with live GitHub data

GitHub stats refreshed every day

gonic

Small Subsonic-compatible music server in Go that browses by folder or by tags

Open source alternative to

Visit gonicGitHubDocumentation

Main features

  • Subsonic API server tested with many third-party clients
  • Browsing by folder tree or by tags
  • On-the-fly transcoding with a cache
  • Subsonic jukebox mode for gapless playback on the server
  • Podcasts with optional purge of old episodes
  • Multiple users with their own transcoding settings and playlists
  • Last.fm and ListenBrainz scrobbling
  • Multi-valued genre and artist tags
  • Several music folders with optional aliases
  • Playlists stored as m3u files
  • Web interface for users, scans and Last.fm setup

What gonic does

gonic is a music server that implements the Subsonic API and little else around it. It has no web player of its own: you listen through any Subsonic client, and the small web interface exists for administration, such as managing users, starting scans and connecting Last.fm. The README lists clients it is tested with, including airsonic-refix (a web player), Amperfy, Symfonium, DSub, Sublime Music, Strawberry, Ultrasonic and Music Assistant.

What sets gonic apart from tag-only servers is folder browsing. It keeps your directory tree intact, so a library organized by genre, decade or source folders appears in clients exactly as it is on disk. Browsing by tags is available too, using TagLib for MP3, Opus, FLAC, APE, M4A, WAV and other formats.

Library and listening features

Several music folders can be configured, each with an optional alias so clients show a friendly name. Since version 0.16 gonic can treat genres, artists and album artists as multi-valued, either from proper multi-value tags written by tools like MusicBrainz Picard or beets, or by splitting a field on a delimiter you choose. The album-artist tag is respected so compilation appearances do not crowd the artist list.

Transcoding happens on the fly with FFmpeg, and results are cached; each user sets their own transcoding preferences. gonic also downloads podcasts, can purge episodes nobody has played after a set number of days, and stores playlists as m3u files in a folder you choose. A jukebox mode plays music gaplessly on the server itself through mpv, controlled from a Subsonic client. Plays can be scrobbled to Last.fm and ListenBrainz, and artist biographies and similar artists come from the Last.fm API.

Self-hosting gonic

gonic is a single Go program with a SQLite database. The official Docker image sentriz/gonic is built for amd64, arm64 and 32-bit ARM, which covers Raspberry Pi boards; the wiki also covers building from source with Go 1.25 or later, running under systemd, and distribution packages. FFmpeg is optional and only needed for transcoding; mpv is only needed for jukebox mode. Every setting is available as a command-line flag, an environment variable or a config file entry.

The author reports that a library of about 50,000 tracks takes around ten minutes for the first scan and a few seconds for incremental scans. Automatic scanning is off by default: you enable a scan interval or a file-system watcher. The default login is admin/admin and should be changed right away.

When browsing by folder, gonic expects each album to sit in its own folder, with no other album’s files in it.

Hosted version

The developers do not run a hosted service, so using gonic means running it on your own server, NAS or computer.

Limitations

Without a built-in player, you need to install a Subsonic client on every device, or host a separate web client such as airsonic-refix. Documentation consists of the README and a short wiki. The one-album-per-folder rule may require reorganizing some collections.

Who it suits

gonic suits people who care about their folder structure, already use Subsonic apps, and want a server that runs comfortably on a Raspberry Pi or a small VPS. If you prefer a built-in web player and tag-based browsing, choose Navidrome. Both can stand in for Spotify when the music is your own.

Technical details

Self-hosting needs

  • FFmpeg (optional
  • for transcoding)
  • mpv (optional
  • for jukebox)

Built with

  • Go

GitHub topics

  • airsonic
  • docker
  • docker-compose
  • dsub
  • ffmpeg
  • go
  • golang
  • internet-radio
  • lastfm
  • listenbrainz
  • music
  • music-server
  • music-streaming
  • musicbrainz

Reviewed by the OpenSourcePicks editors from the project's repository and documentation. Something out of date? Tell us.