LAZYSPOTIFY(1)

NAME

lazyspotifyTerminal Spotify client for macOS and Linux

SYNOPSIS

$brew install lazyspotify

INFO

268 stars
7 forks
0 views

DESCRIPTION

Terminal Spotify client for macOS and Linux

README

lazyspotify logo

lazyspotify

A terminal Spotify client.

Release Release workflow Build Debian package Build RPM package License

LazySpotify

Requirements

  • A Spotify Premium account.
  • A working system keyring.
  • The patched lazyspotify-librespot daemon (only if you are installing from source or running an unpackaged build)
  • On Linux, one of wl-clipboard, xclip, or xsel if you want clipboard support on the auth screen.

Install

Homebrew

brew tap dubeyKartikay/lazyspotify
brew install lazyspotify

Arch Linux

yay -S lazyspotify-bin

GitHub Releases

Download the latest package from GitHub Releases.

  • macOS: signed .zip
  • Ubuntu/Debian: .deb
  • Fedora/RHEL: .rpm
  • Arch: .tar.gz

Example package installs:

sudo dpkg -i lazyspotify-*.deb
sudo dnf install ./lazyspotify-*.rpm

Build From Source

Build the app:

git clone https://github.com/dubeyKartikay/lazyspotify.git
cd lazyspotify
make build

Then build the patched daemon from dubeyKartikay/go-librespot and point librespot.daemon.cmd at that binary in your config.

If you build lazyspotify yourself and do not compile in a packaged daemon path, librespot.daemon.cmd is required.

Demos

Play A Track From Playlist > Track

Play a track from a playlist

Player Controls

Player controls

Library Navigation

Library navigation

Search

Search navigation

Set Up Your Spotify Client ID

lazyspotify requires your own Spotify app client ID.

  1. Open the Spotify Developer Dashboard.
  2. Create a new app with:
    • App name: lazyspotify
    • App description: terminal based spotify client
    • Website: https://github.com/dubeyKartikay/lazyspotify
    • Redirect URIs: http://127.0.0.1:8287/callback
    • APIs used: Web API, Web Playback SDK
  3. Copy the app's Client ID.
  4. Put the Client ID in config.yml or export it as an environment variable. See Configuration.

Minimal config:

auth:
  client_id: your_spotify_app_client_id

Environment override:

export AUTH_CLIENT_ID=your_spotify_app_client_id

If you change auth.host, auth.port, or auth.redirect-endpoint, update the Spotify app Redirect URI to match exactly.

Configuration

Config file locations:

  • macOS: ~/Library/Application Support/lazyspotify/config.yml
  • Linux: ~/.config/lazyspotify/config.yml

If the file is missing, lazyspotify creates config.yml with:

auth:
  client_id: your_spotify_app_client_id

Then replace your_spotify_app_client_id with your Spotify app Client ID.

Minimal config for package installs:

auth:
  client_id: your_spotify_app_client_id

Minimal config for source or manual installs:

auth:
  client_id: your_spotify_app_client_id

librespot: daemon: cmd: - /absolute/path/to/lazyspotify-librespot

The generated daemon config is written automatically under the librespot/ subdirectory inside the app config directory. You usually do not need to edit it manually.

Auth Settings

KeyRequiredDefaultNotes
log_levelNoERRORApp log level for lazyspotify.
auth.client_idYesnoneYour Spotify app client ID.
auth.hostNo127.0.0.1Host used for the local OAuth callback server.
auth.portNo8287Port used for the local OAuth callback server.
auth.redirect-endpointNo/callbackCallback path for Spotify OAuth.
auth.timeoutNo30Auth server shutdown timeout in seconds.
auth.keyring.serviceNospotifyKeyring service name for stored tokens.
auth.keyring.keyNotoken-v2Keyring key for stored tokens.

Librespot Settings

KeyRequiredDefaultNotes
librespot.hostNo127.0.0.1Host for the local playback API server.
librespot.portNo4040Port for the local playback API server.
librespot.timeoutNo180Playback API timeout in seconds.
librespot.retry-delayNo100Retry delay in milliseconds.
librespot.max-retriesNo3Retry count for daemon calls.
librespot.seek-step-msNo5000Seek step size in milliseconds.
librespot.volume-stepNo3276Volume step used for volume controls.
librespot.daemon.cmdSometimesnoneRequired for source/manual installs unless a packaged daemon path was compiled into the binary.
librespot.daemon.log_levelNoERRORLog level written into the generated librespot daemon config.
librespot.daemon.zeroconf_enabledNofalseEnables zeroconf in the daemon config.

Environment variables can override config values by replacing . and - with _. Examples: LOG_LEVEL, AUTH_CLIENT_ID, LIBRESPOT_DAEMON_LOG_LEVEL.

Run

Start the app with:

lazyspotify

If you built from source:

./target/lazyspotify

Print build metadata:

lazyspotify version

Development

make run
go test ./...

SEE ALSO

clihub4/15/2026LAZYSPOTIFY(1)