your terminal, your vibe — a beautiful, feature-rich Spotify TUI player written in Rust.
Vibes is a terminal-based UI (TUI) client for Spotify designed with aesthetics and functionality in mind. Built with Rust, Ratatui, and Crossterm, it delivers a smooth, native-feeling music experience directly in your terminal.
Whether you're coding, writing, or just browsing, Vibes provides an immersive interface complete with animated equalizers, dynamic playback controls, and a vibrant neon-dark theme. Say goodbye to heavy desktop applications and control your music lightning-fast from your keyboard.
| Feature | Description |
|---|---|
| 🔍 Search | Instantly search tracks across Spotify's entire catalog. |
| ❤ Liked Songs | Browse, scroll, and play your saved tracks directly. |
| 📋 Playlists | View all your custom and followed playlists and their songs. |
| 🎵 Queue Management | View your upcoming tracks and seamlessly add new songs to your queue. |
| 🌊 Vibes Discovery | Mood-based song recommendations (Chill, Hype, Focus, Happy, Dark). |
| ≋ Animated UI | Includes a live dancing cat/monkey visualizer, rotating quotes, and an animated equalizer bar! |
| 🎧 Full Playback | Non-blocking controls for play/pause, skip, seek, and volume adjustments. |
| ✨ Optimistic UI | Immediate visual feedback when skipping tracks or changing states. |
| ❓ Built-in Help | Press ? anytime for an interactive keybindings menu. |
- Rust 1.75+ installed via rustup.
- Spotify Premium account (Note: Spotify API enforces Premium for playback control).
- Docker (Optional, but highly recommended for the local Redis token cache).
To access the Spotify API, you need your own client credentials.
- Go to the Spotify Developer Dashboard.
- Click Create app.
- Fill in the App Name and Description (e.g., "Vibes Terminal").
- Under Redirect URIs, add exactly:
http://127.0.0.1:8989/login. - Save your app and navigate to the Settings page.
- Copy the Client ID and Client Secret.
Clone the repository and create a .env file in the root directory:
git clone https://github.com/yourusername/vibes.git
cd vibes
touch .envPaste your credentials into the .env file:
SPOTIFY_CLIENT_ID=your_client_id_here
SPOTIFY_CLIENT_SECRET=your_client_secret_here
SPOTIFY_REDIRECT_URI=http://127.0.0.1:8989/login
REDIS_URL=redis://127.0.0.1:6379
RUST_LOG=vibes=infoVibes uses Redis to securely cache your Spotify login token so you don't have to log in every time you open the app.
docker compose up -dcargo runWhen building the release binary, you must ensure that the .env file is located in the same directory where you execute the binary, or that the environment variables are exported globally.
# Compile optimized build
cargo build --release
# Copy the .env file next to the binary (so it can read your credentials)
cp .env target/release/
# Run the binary directly
cd target/release
./vibesOn the first run, Vibes will automatically open your default web browser asking you to grant permissions to your Spotify account. Click Agree. The browser will redirect to localhost:8989 and the terminal will automatically log you in.
| Key | Action |
|---|---|
↑ / k |
Navigate up |
↓ / j |
Navigate down |
← / h |
Navigate left / go back |
→ / l |
Navigate right |
Enter |
Select / Play track |
Esc / b |
Back / Cancel search / Close help |
Space |
Pause / Resume playback |
n |
Next track |
p |
Previous track |
f / → |
Seek forward 10s |
r / ← |
Seek backward 10s |
+ / = |
Volume up |
- |
Volume down |
l |
Like / Unlike current track |
a |
Add selected track to queue |
s |
Focus Search input |
1 |
Menu: Search |
2 |
Menu: Liked Songs |
3 |
Menu: Playlists |
4 |
Menu: Queue |
5 |
Menu: Vibes (Moods) |
? |
Toggle help popup |
e |
Toggle big EQ player view |
q |
Quit application |
Having issues? Here are the most common problems and how to fix them.
- Cause: Your saved Spotify token has expired or is invalid.
- Fix: The app is designed to auto-refresh tokens. However, if the error persists, open your terminal and clear the cache using Redis, or simply delete the token:
Restart
docker exec -it vibes-redis-1 redis-cli del vibes:spotify_tokencargo runand log in through the browser again.
- Cause: Spotify API requires an "active device" to trigger playback, but doesn't consider the API itself a physical player.
- Fix: Open the official Spotify app on your phone, desktop, or web browser. Play any song for 1 second, then pause it. Now your device is "active", and you can control it from Vibes.
- Cause: You started playing a single song manually via the Spotify app, so the active Spotify queue context is empty.
- Fix: Start playing a song directly from within the Vibes app (e.g., press
Enteron a song in Search or Liked Songs). Vibes automatically feeds the next 50 tracks to Spotify, immediately fixing the queue and enabling the Next/Prev buttons.
- Cause: Your terminal emulator does not fully support Unicode or strict monospace fonts.
- Fix: Ensure you are using a modern terminal (like iTerm2, Alacritty, Kitty, or Windows Terminal) and a patched Nerd Font (e.g., FiraCode Nerd Font). Expand your terminal window to ensure sidebar elements aren't squished.
- Cause: Missing dependencies or outdated Rust version.
- Fix: Run
rustup updateto ensure you are on Rust 1.75 or newer. Also, ensure you don't have brokenCargo.lockfiles; trycargo cleanand run again.
- Logs location: If the app crashes, it writes an error trace to
/tmp/vibes.log. - View logs: Run
tail -f /tmp/vibes.login another terminal window while running the app to see live API activity and error notices.
Vibes runs purely on asynchronous Rust (tokio), separating UI rendering (ratatui) from API network calls (rspotify).
src/
├── main.rs # Entry point, terminal setup, panic hook
├── app/ # Main event loop, global state, UI dispatch
├── spotify/ # Spotify API wrappers, OAuth caching, pagination
├── ui/ # Render logic, neon theme, dynamic layouts
├── events/ # Keyboard mapping
├── cache/ # Redis local token store
└── config/ # Dotenv configuration
MIT