Navidrome Integration

Use Cliamp to connect to a Navidrome server and stream music from your library. Navidrome is a self-hosted music server that supports the Subsonic API.

Quick start: Run cliamp setup. Enter the server URL, username, and password. The TUI validates the connection and writes the [navidrome] block. Manual steps follow.

Setup

Set these three environment variables before you start Cliamp:

export NAVIDROME_URL="http://your-server:4533"
export NAVIDROME_USER="your-username"
export NAVIDROME_PASS="your-password"

Then start Cliamp without file arguments:

cliamp

You can combine local files with a Navidrome session:

NAVIDROME_URL=http://localhost:4533 NAVIDROME_USER=admin NAVIDROME_PASS=secret cliamp ~/Music/extra.mp3

How It Works

When these environment variables are set, Cliamp authenticates with the Navidrome server through the Subsonic API. At startup, it gets playlists and shows them in the TUI.

Use the arrow keys to browse playlists. Press Enter to load one. Cliamp adds its tracks to the local playlist and starts playback. The server streams audio as MP3.

Controls

When focused on the provider panel:

Key Action
Up Down / j k Navigate playlists
Enter Load the selected playlist
Tab Switch between provider and playlist focus
N Open the Navidrome browser

After you load a playlist, Cliamp returns to the standard playlist view. Use the usual controls for seek, volume, EQ, shuffle, repeat, queue, and search.

Press N at any time, or from the provider panel, to open the full-screen Navidrome browser. Browse the library in three modes:

Browser controls

Mode menu:

Key Action
/ j k Navigate
Enter Select mode
Esc / N Close browser

Artist or album list:

Key Action
/ j k Navigate
Enter / Drill in
s Cycle album sort order (album list only)
Esc / Back

Track list:

Key Action
/ j k Navigate
Enter Append selected track to playlist
a Append all tracks to playlist
R Replace playlist with all tracks and start playing
Esc / Back

Album sort order

In the global album list, press s to cycle through sort modes:

Value Description
alphabeticalByName A to Z by album title (default)
alphabeticalByArtist A to Z by artist name
newest Most recently added
recent Most recently played
frequent Most frequently played
starred Starred / favourited
byYear Chronological by release year
byGenre Grouped by genre

Cliamp saves the selected sort as browse_sort in the [navidrome] section of ~/.config/cliamp/config.toml. It restores the sort at the next start.

Architecture

The integration uses a Provider interface in the playlist package:

type Provider interface {
    Name() string
    Playlists() ([]PlaylistInfo, error)
    Tracks(playlistID string) ([]Track, error)
}

The Navidrome client (external/navidrome/client.go) implements this interface. It creates authenticated Subsonic API requests with MD5 token authentication (password + random salt). It parses JSON responses into playlist and track structs.

Bubbletea commands get playlists and tracks asynchronously. The UI remains responsive while the server responds.

To support another Subsonic-compatible server, such as Airsonic or Gonic, implement the same Provider interface for that server API.

Requirements

You need only a running Navidrome instance. The client uses the Go standard net/http and crypto/md5 packages. The Navidrome server must have the Subsonic API enabled. This is the default.