I’ve been on the hunt for an alternative desktop client to stream my Spotify library. You see, like countless others, I pay Spotify the monthly fee just to listen to music ad-free—that’s it. I don’t expect anything else from them other than ensuring the music playback is stellar and that I have access to their vast library all the time. Sure, the recommendations and playlists are a nice bonus but I’m not as invested in those as I am in my personal collection of nearly 2000 songs. Sadly for me, streaming music is not the sole focus of the company anymore and their quest to expand into podcasts, videos, etc. has deteriorated my perceived experience of music playback. I’m sure I’m not alone.
This change in direction is mainly visible in the apps, which are now quite bloated and have become such resource hogs. On my M1 MacBook Air, this is what the resource usage looks like when Spotify is in the background, minimized, and streaming my liked songs (which is how I use it 99% of the time):
I just wanted to listen to music and do other things. This seemed unacceptable. So, I came up with a checklist to evaluate potential alternatives:
- Play my liked songs, albums, and playlists
- Search and play tracks and albums
- Consume fewer resources and don’t hog my system
- Bonus
- Control music playback on connected devices
- Work with Raycast Spotify extension
- Offline playback
Initially, I was leaning towards alternative GUI clients, hoping there’d be something native built for macOS. But no dice. The closest thing was Jan Pochyla’s Psst which is written in Rust but it’s still in early development. So, I switched gears to TUIs—Terminal User Interfaces.
Thang Pham’s spotify_player seemed like the best choice for an actively developed cross-platform, open-source Spotify TUI client. It’s written in Rust and I hoped that meant it’s fast so I decided to give it a shot. Installing it was easy with Homebrew:
brew install spotify_player
Once installed, just type spotify_player
and hit enter. Follow the instructions to authenticate the client with your Spotify account and allow it to play back music. Thereafter, just enter spotify_player
to access the TUI.
It’s thankfully as fast as I hoped it’d be. The interface was very straightforward and not too difficult to navigate. Here’s a cheatsheet:
- Arrow keys to move up and down lists and Tab to move between panes
- g s to search for songs/playlists/albums etc.
- g y to access your liked songs
- Enter to start playing the song
- Space to pause/resume
- ? for a help page with a list of commands and shortcuts
- Backspace to go back between screens
- q to Quit
This is how it looks playing back an album:
While not surprising, I was glad to see that with iTerm2, spotify_player
renders the album art in the TUI. I’ve seen screenshots on Reddit that rendering images/videos in terminals is very much a thing but this is probably the first time I’m actively a consumer of such a capability. Here’s how my liked songs look:
And the search page:
To be frank, I had very low expectations regarding the supported features for such a TUI client but I was very surprised to find out it supports controlling remote playback and being controlled from other devices. This meant I could also control it from the Raycast extension eliminating the need to use the TUI most of the time. But, the real cherry on the top was the memory usage:
Quite dramatic: Just 42 MB of memory usage which is a 13X improvement! 🤯 All while enabling most things I care about.
Let’s take a look at my checklist once again:
- Play my liked songs, albums, and playlists
- Search and play tracks and albums
- Consume fewer resources and don’t hog my system
- Bonus
- Control music playback on connected devices
- Work with Raycast Spotify extension
- Offline playback
I don’t know about you but this was a slam dunk find for me. I’ve been using spotify_player
for a week now and while it does have occasional glitches when switching playback between devices, I found that being able to quit and reopen the TUI in 3 seconds is a very acceptable remedy in the worst case. The only thing missing is offline playback but I can imagine DRM making that difficult. It was going to be a bonus anyway.