Skip to content

LargeModGames/spotatui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

spotatui

A Spotify client for the terminal written in Rust, powered by Ratatui.

A community-maintained fork of spotify-tui, actively developed with new features like native streaming, synced lyrics, and real-time audio visualization.

Crates.io Upstream Songs played using Spotatui spotatui Contributors Upstream Contributors

Demo

Song History

Song History

Table of Contents

Help Wanted

spotatui is currently maintained by a solo developer. More contributors would be hugely appreciated! Here's how you can help:

  • Star the repo to help others discover the project
  • Report bugs or request features in Issues
  • Join the community in Discussions
  • Submit a PR for code, docs, or themes

See CONTRIBUTING.md for more details!

Performance

spotatui is extremely lightweight compared to the official Electron client.

Mode RAM Usage
Native Streaming (Base) ~48 MB
With Synced Lyrics ~48 MB
With System-Wide Visualizer ~56 MB

Tested on Arch Linux (Hyprland).

Privacy Notice

Anonymous Global Counter: spotatui includes an opt-in feature that contributes to a global counter showing how many songs have been played by all users worldwide. This feature:

  • Is completely anonymous - no personal information, song names, artists, or listening history is collected
  • Only sends a simple increment when a new song starts playing
  • Is enabled by default but can be opted out at any time
  • Can be disabled by setting enable_global_song_count: false in ~/.config/spotatui/config.yml

We respect your privacy. This is purely a fun community metric with zero tracking of individual users.

Migrating from spotify-tui

If you used the original spotify-tui before:

  • The binary name changed from spt to spotatui.
  • Config paths changed:
    • Old: ~/.config/spotify-tui/
    • New: ~/.config/spotatui/

You can copy your existing config:

mkdir -p ~/.config/spotatui
cp -r ~/.config/spotify-tui/* ~/.config/spotatui/

You may be asked to re-authenticate with Spotify the first time.

Installation

# Cargo (recommended)
cargo install spotatui

# Arch Linux (AUR)
yay -S spotatui

Or download pre-built binaries from GitHub Releases.

See the Installation Wiki for platform-specific requirements and building from source.

Connecting to Spotify

Run spotatui and follow the on-screen instructions to connect your Spotify account.

You'll need to create a Spotify Developer app at the Spotify Dashboard.

See the Installation Wiki for step-by-step setup.

Usage

The binary is named spotatui.

Running spotatui with no arguments will bring up the UI. Press ? to bring up a help menu that shows currently implemented key events and their actions. There is also a CLI that is able to do most of the stuff the UI does. Use spotatui --help to learn more.

See Keybindings Wiki for the full list of keyboard shortcuts.

Here are some example to get you excited.

spotatui --completions zsh # Prints shell completions for zsh to stdout (bash, power-shell and more are supported)

spotatui play --name "Your Playlist" --playlist --random # Plays a random song from "Your Playlist"
spotatui play --name "A cool song" --track # Plays 'A cool song'

spotatui playback --like --shuffle # Likes the current song and toggles shuffle mode
spotatui playback --toggle # Plays/pauses the current playback

spotatui list --liked --limit 50 # See your liked songs (50 is the max limit)

# Looks for 'An even cooler song' and gives you the '{name} from {album}' of up to 30 matches
spotatui search "An even cooler song" --tracks --format "%t from %b" --limit 30

Native Streaming

spotatui can play audio directly without needing spotifyd or the official Spotify app. Just run spotatui and it will appear as a Spotify Connect device.

  • Works with media keys, MPRIS (Linux), and macOS Now Playing
  • Premium account required

See the Native Streaming Wiki for setup details.

Configuration

A configuration file is located at ${HOME}/.config/spotatui/config.yml.

See the Configuration Wiki for the full config file reference.

You can also configure spotatui in-app by pressing Alt-, to open Settings.

See Themes Wiki for built-in presets (Spotify, Dracula, Nord, etc.).

Limitations

This app uses the Web API from Spotify, which doesn't handle streaming itself. You have three options for audio playback:

  1. Native Streaming (NEW!) - spotatui can now play audio directly using its built-in streaming feature. See Native Streaming below.
  2. Official Spotify Client - Have the official Spotify app open on your computer
  3. Spotifyd - Use a lightweight alternative like spotifyd

If you want to play tracks, Spotify requires that you have a Premium account.

Deprecated Spotify API Features

Note: As of November 2024, Spotify deprecated and removed access to certain API endpoints for new applications. The following features are included in this app but will only work if your Spotify Developer application was created before November 27, 2024:

  • Audio Visualization (press v): Now uses local real-time FFT analysis of your system audio. The visualization no longer depends on Spotify's deprecated Audio Analysis API.

    Platform Support:

    Platform Status Notes
    Windows Works out of the box Uses WASAPI loopback
    Linux Works out of the box Uses PipeWire/PulseAudio monitor devices
    macOS Requires setup Needs a virtual audio device (see below)

    macOS Users: macOS doesn't natively expose system audio loopback. To use audio visualization, install a virtual audio device like BlackHole (free) or Loopback (paid). Configure it to capture system audio and set it as your default input device.

    Note: The audio visualization is system-wide - it captures all audio playing on your system, not just Spotify. This means it will also react to YouTube videos, games, or any other audio source!

  • Related Artists: When viewing an artist page, the "Related Artists" section shows similar artists based on Spotify's recommendation algorithm. This feature only works if your Spotify Developer application was created before November 27, 2024.

For more information, see Spotify's announcement about API changes.

Using with spotifyd

Note: If you're using native streaming, you don't need spotifyd!

Follow the spotifyd documentation to get set up.

After that there is not much to it.

  1. Start running the spotifyd daemon.
  2. Start up spotatui
  3. Press d to go to the device selection menu and the spotifyd "device" should be there - if not check these docs

Libraries used

Development

  1. Install OpenSSL
  2. Install Rust
  3. Install xorg-dev (required for clipboard support)
  4. Linux only: Install PipeWire development libraries (required for audio visualization)
    # Debian/Ubuntu
    sudo apt-get install libpipewire-0.3-dev libspa-0.2-dev
    
    # Arch Linux
    sudo pacman -S pipewire
    
    # Fedora
    sudo dnf install pipewire-devel
  5. Clone or fork this repo and cd to it
  6. And then cargo run

See CONTRIBUTING.md for pull request guidelines.

Windows Subsystem for Linux

You might get a linking error. If so, you'll probably need to install additional dependencies required by the clipboard package

sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev

Maintainer

Maintained by LargeModGames.

Originally forked from spotify-tui by Alexander Keliris.

spotatui Contributors

Looking for contributors! spotatui is actively maintained but could use your help. Whether it's bug fixes, new features, documentation, or testing - all contributions are welcome!

LargeModGames
LargeModGames

๐Ÿ’ป ๐Ÿ“– ๐Ÿšง ๐Ÿค” ๐Ÿš‡ โš ๏ธ
MysteriousWolf
MysteriousWolf

๐Ÿ’ป
rawcode1337
rawcode1337

๐Ÿ’ป ๐Ÿ›
copeison
copeison

๐Ÿ“ฆ
jacklorusso
jacklorusso

๐Ÿ“–
H41L33
H41L33

๐Ÿ“–

Want to see your name here? Check out our open issues or the Roadmap below!


Upstream Contributors (spotify-tui)

Thanks to all the contributors who built the original spotify-tui that this project is forked from:

Alexander Keliris
Alexander Keliris

๐Ÿ’ป ๐Ÿ“– ๐ŸŽจ ๐Ÿ“ ๐Ÿค” ๐Ÿš‡ ๐Ÿ“ฆ ๐Ÿ‘€
Mickael Marques
Mickael Marques

๐Ÿ’ต
Grzegorz Koperwas
Grzegorz Koperwas

๐Ÿ“–
Austin Gassert
Austin Gassert

๐Ÿ’ป
Calen Robinette
Calen Robinette

๐Ÿ’ป
M*C*O
M*C*O

๐Ÿš‡
Andrew Chin
Andrew Chin

๐Ÿ’ป
Sam Naser
Sam Naser

๐Ÿ’ป
Micha
Micha

๐Ÿ’ป
neriglissar
neriglissar

๐Ÿ’ป
Timon
Timon

๐Ÿ’ป
echoSayonara
echoSayonara

๐Ÿ’ป
D-Nice
D-Nice

๐Ÿ“– ๐Ÿš‡
Grzegorz Pawlik
Grzegorz Pawlik

๐Ÿ’ป
Lennart Bernhardt
Lennart Bernhardt

๐Ÿ’ป
Arnaud Lefebvre
Arnaud Lefebvre

๐Ÿ’ป
tem1029
tem1029

๐Ÿ’ป
Peter K. Moss
Peter K. Moss

๐Ÿ’ป
Geoff Shannon
Geoff Shannon

๐Ÿ’ป
Zachary Mayhew
Zachary Mayhew

๐Ÿ’ป
jfaltis
jfaltis

๐Ÿ’ป
Marcel Schramm
Marcel Schramm

๐Ÿ“–
Fangyi Zhou
Fangyi Zhou

๐Ÿ’ป
Max
Max

๐Ÿ’ป
Sven van der Vlist
Sven van der Vlist

๐Ÿ’ป
jacobchrismarsh
jacobchrismarsh

๐Ÿ’ป
Nils Rauch
Nils Rauch

๐Ÿ’ป
Nick Stockton
Nick Stockton

๐Ÿ’ป ๐Ÿ› ๐Ÿšง ๐Ÿ’ฌ ๐Ÿ“–
Stuart Hinson
Stuart Hinson

๐Ÿ’ป
Sam Calvert
Sam Calvert

๐Ÿ’ป ๐Ÿ“–
Jeroen Wijenbergh
Jeroen Wijenbergh

๐Ÿ“–
Kimberley Cook
Kimberley Cook

๐Ÿ“–
Audrey Baxter
Audrey Baxter

๐Ÿ’ป
Norman
Norman

๐Ÿ“–
Peter Maatman
Peter Maatman

๐Ÿ’ป
AlexandreS
AlexandreS

๐Ÿ’ป
Finn Vos
Finn Vos

๐Ÿ’ป
Carlos Hernandez
Carlos Hernandez

๐Ÿ“ฆ
Pedro Alves
Pedro Alves

๐Ÿ’ป
jtagcat
jtagcat

๐Ÿ“–
Benjamin Kitor
Benjamin Kitor

๐Ÿ’ป
Aleลก Najmann
Aleลก Najmann

๐Ÿ“– ๐Ÿ“ฆ
Jeremy Stucki
Jeremy Stucki

๐Ÿ’ป
(ยดโŒฃ`สƒฦช)
(ยดโŒฃ`สƒฦช)

๐Ÿ’ป
Artem Polishchuk
Artem Polishchuk

๐Ÿ“ฆ
Chris Sosnin
Chris Sosnin

๐Ÿ’ป
Ben Buhse
Ben Buhse

๐Ÿ“–
Sean Li
Sean Li

๐Ÿ’ป
TimotheeGerber
TimotheeGerber

๐Ÿ’ป ๐Ÿ“–
Ferdinand Ratajczak
Ferdinand Ratajczak

๐Ÿ’ป
Sheel Choksi
Sheel Choksi

๐Ÿ’ป
Michael Hellwig
Michael Hellwig

๐Ÿ“–
Oliver Daniel
Oliver Daniel

๐Ÿ’ป
Drew Fisher
Drew Fisher

๐Ÿ’ป
ncoder-1
ncoder-1

๐Ÿ“–
Macguire Rintoul
Macguire Rintoul

๐Ÿ“–
Ricardo Holguin
Ricardo Holguin

๐Ÿ’ป
Keisuke Toyota
Keisuke Toyota

๐Ÿ’ป
Craig Astill
Craig Astill

๐Ÿ’ป
Onielfa
Onielfa

๐Ÿ’ป
usrme
usrme

๐Ÿ“–
Sergey A.
Sergey A.

๐Ÿ’ป
Hideyuki Okada
Hideyuki Okada

๐Ÿ’ป
kepae
kepae

๐Ÿ’ป ๐Ÿ“–
ร‰rico Nogueira Rolim
ร‰rico Nogueira Rolim

๐Ÿ’ป
Alexander Meinhardt Scheurer
Alexander Meinhardt Scheurer

๐Ÿ’ป
Ondล™ej Kinลกt
Ondล™ej Kinลกt

๐Ÿ’ป
Kryan90
Kryan90

๐Ÿ“–
n-ivanov
n-ivanov

๐Ÿ’ป
bi1yeu
bi1yeu

๐Ÿ’ป ๐Ÿ“–
May
May

๐Ÿ’ป
Bruno A. Muciรฑo
Bruno A. Muciรฑo

๐Ÿ’ป
Finn Hediger
Finn Hediger

๐Ÿ’ป
dp304
dp304

๐Ÿ’ป
Marco Micera
Marco Micera

๐Ÿ“–
Marco Ieni
Marco Ieni

๐Ÿš‡
Artรบr Kovรกcs
Artรบr Kovรกcs

๐Ÿ’ป
Antony Kellermann
Antony Kellermann

๐Ÿ’ป
Rasmus Pedersen
Rasmus Pedersen

๐Ÿ’ป
noir-Z
noir-Z

๐Ÿ“–
David Bailey
David Bailey

๐Ÿ“–
sheepwall
sheepwall

๐Ÿ’ป
Hwatwasthat
Hwatwasthat

๐Ÿ’ป
Jesse
Jesse

๐Ÿ’ป
Sang
Sang

๐Ÿ“–
Yuuki Takahashi
Yuuki Takahashi

๐Ÿ“–
Alejandro Angulo
Alejandro Angulo

๐Ÿ’ป
Anton Kostin
Anton Kostin

๐Ÿ“–
Justin Sexton
Justin Sexton

๐Ÿ’ป
Jiati Le
Jiati Le

๐Ÿ“–
Matthew Cobbing
Matthew Cobbing

๐Ÿ’ป
Milo
Milo

๐Ÿš‡
Diego Veralli
Diego Veralli

๐Ÿ’ป
Maja Bojarska
Maja Bojarska

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

Star History

Star History Chart

Roadmap

The goal is to eventually implement almost every Spotify feature.

High-priority features:

  • Add songs to a playlist
  • Scroll through result pages in every view

See the Roadmap Wiki for the full API coverage table.

About

A fully standalone Spotify client for the terminal. Native streaming included, no daemon required.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Languages