11 minute read

Spotify is no more

After almost 10 years with Spotify, I finally switched to a self-hosted setup. No subscriptions, no worries, just my own music library running the way I want.

The changing-bug strikes once again. And this time, I’m changing something that has been with me for almost a decade: Spotify.

In the past

A long time ago, back when I still used Windows, the app I used to listen to music was Winamp—a classic! This is going to be relevant down below—keep reading—I’m not just mentioning this for the sake of mentioning it.

From what I can remember, Winamp was just a player. In the sense that it wasn’t really an app that would help me organize and categorize my music files. For some reason, that was ok by then to me.

I imagine I didn’t have a big library to take care of. And I surely wasn’t very picky with quality either.

Then I moved to macOS

At some point, I moved to macOS, so I had to say goodbye to Winamp. I believe the app I used for a long time in macOS was iTunes, naturally.

iTunes was a big improvement over Winamp when it comes to organization. It became obvious to me I had a library issue at hands too. Luckily for me, iTunes would help me fix it. It also became apparent to me that some files had really low quality like 128kbps or lower and some were much better like 320kbps.

At the time I listened to music in mainly two ways: while at my desk with iTunes, or on the go with an iPod Classic—love that thing!

The times of a permanent internet connection were far, but approaching at a great speed.

Then came the smartphone

To be honest, I can’t tell exactly when or why I stopped using iTunes, but my best guess is that my first smartphone, which was an Android, made it impossible to listen to my music with iTunes on the go.

With a smartphone on my pocket I didn’t have to carry both a phone and a music player. I could just carry one thing—how naive of me.

Google at the time had this service called Google Play Music (GPM). Some kind of “bring your own music” kind of service where you were supposed to upload your files—with an upper limit of 20.000 if I’m not mistaken—which made them available anywhere you had an internet connection and either a browser or an Android phone with GPM installed.

At the time, that was the perfect solution for me. And quite frankly it suited my needs for a long time. I had far less than 20K files on my account, and the service never let me down.

Then Google happened

That is of course, until Google decided to kill Google Play Music—as it usually does. All of a sudden, my trusty music player was no more.

By then, Spotify was already a thing, and the appeal was big for me. The fact that I didn’t have to maintain my own files and could have access even to artists I didn’t know, was quite impressive.

But I guess the best feature would have been something that worked awfully bad for plenty of years: news—more on that below!

The Spotify era

I started by using the free tier and after some time decided to kill the ads and embrace the subscription service. I believe it was my very first subscription ever too. And I was happy with it! Music is one of those things that have been with me for a very long time. When commuting, when working, as an alarm clock, when cooking or entertaining and for a short time as a “bedside speaker” too. So justifying less than 10€ per month was easy for me.

My first subscription receipt is from May 2016 at 7€/month. Two years later, it was already at 9€/month. At some point it made sense to upgrade to their “Duo” plan at just 12€/month and share it with my wife.

For the sake of making it simple, let’s just assume I paid 10€/month from start to finish. From May 2016 until Dec 2025 there are 117 months. At 10€ each, we’re talking about 1.170€ in total.

So roughly 1.200€ for almost 10 years of Spotify. While that’s not an outrageous value on my books, it’s certainly not a low value.

And speaking of value, one of the features I ended up liking the most—that is, when they finally fixed it—were the news. I mean, a way to check new releases from artists I follow. This was always very much hidden in the interface but there’s a navigation item you can go to to see a list of the most recent releases and easily add it to a playlist of yours so you don’t forget to listen. Quite handy!

Then came Linux

Before I set any wrong expectations, yes, Spotify does work on Linux.

But for some reason, the oficial Spotify app on my Omarchy setup was a bit too much for me to look at. The interface has seen some updates over the years, but I’m confident we can argue the current interface is far from clean. There are plenty of covers and plenty of images for an app that is supposed to serve me audio. Or at least it should be. Apparently now Spotify includes videos too. For some reason.

So I looked elsewhere, and in the theme of Omarchy—that is, TUIs and keyboard navigation—I found spotify-player. A TUI that would spawn both a back end and a front end. Meaning, the back end would connect to Spotify’s API and Connect API and the front end would allow you to play music just like a “device” would.

Actually, I never really got it to work the way it should. Spotify player uses librespot in the background—that’s the back end. But the implementation within Spotify player always failed to work for me. My front end would never connect to it in such a way that would actually allow me to play music. I could see my library but not listen to music.

Then I decided to spawn my own “server” for the front end, using librespot too, and it worked! I just needed to run librespot at startup and then connect to it from Spotify player and I was banging!
But then I noticed a disclaimer in the librespot documentation, right near the bottom:

Using this code to connect to Spotify’s API is probably forbidden by them. Use at your own risk.

I would let this slide any other time. But at this stage of my life this kept popping up in my head for a few days. Basically, if someone at Spotify decided that I wans’t worthy of their service, I could be “banned” and loose access not only to their service but also to my entire library from the past 10 years.

The feeling was quite itchy. So much so, that I had to do something, before something happened.

A self-hosted solution

Naturally, my first thought was: what’s the Google Play Music of 2025?

But shortly after, my brain reminded me that GPM died. And if that happened to GPM, it could just as likely happen to any other product. I needed more control.

The solution had to be self-hosted—something that I can fully control, open source and far from a tech giant’s hands.

I came across a selfhosted-music-overview repo that was very helpful. I cannot state this enough. Amazing work right there!

Did my research and settled for Jellyfin as my media server. It’s very popular on GitHub and serves not only as a music server but also as a media server in general—it’s a nice replacement for Plex too, if you use it. I don’t.

Installed it with Docker on my Synology NAS, pointed it at my music folder and shortly after I had Jellyfin scanning my entire library. Quite easy!


Oh right! Even though I had been using Spotify for almost a decade, I also kept my entire music library in my NAS without ever using it all this time. And I’m very much glad I did!


Installing and configuring Jellyfin wins the award for the easiest software I had recently used. Even running inside Docker and inside a NAS, accessing it from within the same network as the NAS was straight forward.

So Jellyfin is doing its thing. Now I need to figure out which clients I’m going to use. While Jellyfin has an official list of clients on their website, I ended up using Finamp for iOS—from Winamp to Finamp, see!

Finamp is a very clean and minimal player and allows for offline playing too, which I will be using a lot.

Although I could configure Jellyfin to accept outside connections, making it a real “streaming server”, the reality is that the only client that needed this feature was my phone. And for my phone alone I would rather manually download a bunch of albums than setting up a tunnel through Cloudflare and exposing my local server to the outside world. One less threat I need to worry about.

For the living room TV, Jellyfin has an official WebOS app that works quite well too.

And lastly, for my Linux machine—bonus points if you can see where this is going—I found jellyfin-tui. It’s even cleaner than spotify-player, in my opinion anyway, and the fact that I don’t need to worry about spawning a server manually is a big plus.

Takeaways

So I guess my theme for 2025 is “go back to where you were 20 years ago” when it comes to technology. But the reality is that although I have to maintain my own music library and my own NAS, the fact that I won’t have to toss another 12€ next month at Spotify is a nice feeling.

Plus, the fact that my music library is entirely my own and doesn’t depend on anyone else’s servers or devices is a very welcome addition too. I certainly explore more this approach going forward.

Jellyfin has been working smoothly in my NAS, which already has a somewhat beefy Home Assistant instance running, without even complaining.

Pro-tip: create read-only users for your devices and only allow your root user to manage your library.

I’m quite happy with my current setup and I’m sure I’ll keep using it for a very long time. Or so I hope.

And let me tell you, listening to FLAC files is very different from listening to 128kbps MP3 files. Now that storage is cheap and not an issue, there’s no need to cheap out on quality.

Photo of Pedro