A vim-modal Spotify client for the terminal.
Install · Features · Keybindings · Commands
Homebrew:
brew trust danfry1/tap # one-time: trust the third-party tap
brew install danfry1/tap/waxon
Recent Homebrew versions refuse to load formulae from third-party taps until they're trusted. If you see
Error: Refusing to load formula ... from untrusted tap, run thebrew trust danfry1/tapline above (once) and retry.
Go:
go install github.com/danfry1/waxon@latest
Binary: download from the Releases page.
waxon auth # Connect your Spotify account (one-time setup)
waxon # Launch the TUIRequires a Spotify Premium account and a terminal with true color support.
Navigate everything without leaving the home row — j/k to move, gg/G to jump, h/l to switch panes.
Full-screen album art rendered with Unicode half-blocks, gradient backgrounds, and a vinyl spinning mode.
Press l in Now Playing for time-synced lyrics (via lrclib — no account, no API key, nothing to set up). The current line lights up and the rest gently fade as the song plays.
Find tracks, artists, and albums across Spotify.
Explore discographies, browse full albums, and navigate with a browser-like back stack.
Vim-style commands for volume, shuffle, repeat, device switching, and more.
| Key | Action |
|---|---|
j / k |
Move down / up |
gg |
Go to top |
G |
Go to bottom |
Ctrl+u / Ctrl+d |
Half page up / down |
| Key | Action |
|---|---|
h / l |
Focus left / right pane |
Tab |
Cycle pane |
1 / 2 |
Library / queue section |
| Key | Action |
|---|---|
gl |
Go to library |
gq |
Go to queue |
gc |
Jump to currently playing track (loads its playlist/album if you've navigated away) |
gr |
Recently played |
| Key | Action |
|---|---|
Space |
Play / pause |
Enter |
Play selected |
n / p |
Next / previous track |
[ / ] |
Seek -5s / +5s |
| Key | Action |
|---|---|
o |
Context actions menu |
a |
Add to queue |
/ |
Filter current view |
s |
Spotify search |
D |
Device switcher |
: |
Command mode |
| Key | Action |
|---|---|
N |
Now Playing view |
f / a / o |
Like / queue / actions for the playing track (in Now Playing) |
V |
Toggle vinyl mode (in Now Playing) |
l |
Toggle synced lyrics (in Now Playing) |
Backspace / b |
Go back |
? |
Toggle help overlay |
q |
Quit |
Esc |
Close / cancel |
Enter command mode by pressing :, then type a command.
| Command | Description |
|---|---|
:vol <0-100> |
Set volume |
:shuffle |
Toggle shuffle |
:repeat off|all|one |
Set repeat mode |
:device |
Open device switcher |
:search <query> |
Search Spotify |
:recent |
Recently played |
:q |
Quit |
waxon works out of the box with no configuration — it ships with a shared client ID used by several open-source Spotify clients. Most users don't need to change anything.
If you'd prefer to use your own Spotify developer app:
-
Go to the Spotify Developer Dashboard and create an app
-
Set the redirect URI to
http://127.0.0.1:27228/callback -
Copy the Client ID and run setup with it:
SPOTIFY_CLIENT_ID=your_client_id waxon auth
The client ID is saved to ~/.config/waxon/config.json automatically, so you only need to set the environment variable once during setup.
| Variable | Description |
|---|---|
SPOTIFY_CLIENT_ID |
Override the saved Spotify Client ID |
WAXON_LOG |
Path to debug log file (e.g. /tmp/waxon.log) |
Built with Bubbletea, Bubbles, and Lip Gloss by Charmbracelet. Demo recordings made with VHS. Huge thanks to the Charm team for making terminal UIs a joy to build.
This project is licensed under the GNU General Public License v3.0.







