While it’s easy to switch between TV and movie streaming platforms thanks to a plethora of free alternatives, the same cannot be said for music streaming services. Music services involve intricate elements such as discovering new tracks, managing metadata, creating playlists, and ensuring synchronization across devices. Additionally, maintaining a music library on your hard drive requires a certain level of commitment. However, I’ve found a combination of tools that work exceptionally well for my music streaming needs. Below, you’ll find a comprehensive walkthrough to help you set up your own music stream.
Using Navidrome as Your Core Backend
Every music streaming service relies on a robust backend architecture. Platforms like Spotify, Apple Music, and YouTube Music depend on extensive infrastructure to handle users’ libraries, manage metadata, and facilitate seamless audio streaming. When creating your own music streaming stack, Navidrome serves as that essential backend component.
Navidrome, as a self-hosted music server, systematically scans and organizes your music library while providing a streaming interface compatible with web, desktop, and mobile applications. Thanks to its support for the Subsonic API, you can connect to innovative players that offer a user experience comparable to that of Spotify.

For optimal use, it’s advisable to utilize Docker Compose, especially if you’re considering expanding your stack with automation tools like Lidarr and various download clients in the future.
This guide utilizes a Mac environment for demonstration; however, the steps are consistent for Linux users and straightforward for Windows as well.
Before proceeding to install Navidrome, it’s crucial to establish a well-organized folder structure to maintain your music files, downloads, and service data effectively. You can initiate this by opening the Terminal and entering the following command:
mkdir -p ~/docker/music-servercd ~/docker/music-servermkdir -p musicmkdir -p downloadsmkdir -p compose
The music folder will house your actual audio files, while the downloads folder will facilitate automation in the future. Now, navigate to the compose directory by entering:
cd ~/docker/music-server/compose
Create your Docker Compose file by running:
nano docker-compose.yml
Insert the following configuration into your file:
services: navidrome: image: deluan/navidrome:latest container_name: navidrome ports: - "4533:4533" volumes: - navidrome_data:/data -../music:/music restart: unless-stoppedvolumes: navidrome_data:
After saving the file, initiate Navidrome by running:
docker compose up -d
This command will download the Navidrome image and automatically start the container. To access it, open your web browser and go to http://localhost:4533.
You will be prompted to create an admin account. Once logged in, Navidrome will automatically scan your music folder. If you have pre-existing music files, they will be integrated into your library right away.

Congratulations! You now have a fully functional music streaming backend running on your local machine. Feel free to upload music files in formats such as FLAC or MP3, and Navidrome will stream them on demand.
However, while Navidrome operates as the backend, it lacks an appealing user interface that can compete with platforms like Spotify. To enhance your streaming experience, you’ll want to integrate a better frontend solution.
Integrating Feishin for an Enhanced User Experience
Though Navidrome provides a built-in web interface, it prioritizes functionality over aesthetics. While it serves its purpose, it does not meet the expectations users have for modern streaming services.
This is where Feishin comes in. It is a sleek, dedicated player compatible with Subsonic, offering a modern interface complete with smooth animations and robust queue management. Feishin closely resembles Spotify and supports features like albums, artists, playlists, and intuitive playback controls.
Importantly, Feishin connects seamlessly to Navidrome, allowing for instant music streaming. To install Feishin, revisit your Docker Compose file and modify it to include Feishin:
services: navidrome: image: deluan/navidrome:latest container_name: navidrome ports: - "4533:4533" volumes: - navidrome_data:/data -../music:/music restart: unless-stopped feishin: image: ghcr.io/jeffvli/feishin:latest container_name: feishin ports: - "9180:9180" restart: unless-stoppedvolumes: navidrome_data:
Once you’ve added Feishin, start it by executing:
docker compose up -d
After launching Feishin, open your browser and navigate to http://localhost:9180. Set it up to connect with Navidrome by selecting Subsonic as the server type and entering the Navidrome address http://localhost:4533 if hosting locally. Log in using the credentials created during your Navidrome setup.

Upon establishing the connection, Feishin will automatically load your entire music library, including your artists, albums, and playlists.
Streamlining Your Library Management with Lidarr
As managing a music library manually can quickly become tedious, integrating Lidarr can significantly simplify the task. Lidarr automates the management by monitoring the artists you follow, automatically searching for and downloading their albums, and organizing them in your music library. When new tracks are added, Navidrome detects them immediately, and they seamlessly appear in Feishin.

Edit your Docker Compose file one last time to incorporate Lidarr:
services: navidrome: image: deluan/navidrome:latest container_name: navidrome ports: - "4533:4533" volumes: - navidrome_data:/data -../music:/music restart: unless-stopped feishin: image: ghcr.io/jeffvli/feishin:latest container_name: feishin ports: - "9180:9180" restart: unless-stopped lidarr: image: linuxserver/lidarr:latest container_name: lidarr ports: - "8686:8686" volumes: - lidarr_config:/config -../music:/music -../downloads:/downloads restart: unless-stoppedvolumes: navidrome_data: lidarr_config:
Launch Lidarr by entering:
docker compose up -d
Then, in your browser, navigate to http://localhost:8686. Using the interface, you can start adding your favorite artists, and Lidarr will take care of managing your library without further input. By integrating with a download client, Lidarr handles the entire process from track discovery to organization.
Continuously Enhance Your Music Stack
At this juncture, you have a fully operational self-hosted music streaming system. Navidrome manages your library’s backend, Feishin enhances user interaction, and Lidarr automates library upkeep. For many users, this setup is more than sufficient to rival Spotify, especially if you have an existing music collection.
I have intentionally curated my setup to focus on these core components, aiming for simplicity and reliability. However, if you wish to further enhance your listening experience, several upgrades could bring it closer to a full-fledged streaming service.
Currently, your server is accessible solely within your home network. Enabling remote access allows you to stream your library from anywhere. Solutions like Tailscale or WireGuard deliver a secure link to your home server, enabling access via your phone, laptop, or work computer. This upgrade can significantly enhance usability but requires meticulous configuration to mitigate potential security risks when accessing your server externally.
Further polishing your organization can elevate your experience to match commercial streaming services. Automatic album art retrieval, consistent artist names, and well-structured libraries are achievable through tools like beets. This command-line metadata manager integrates with MusicBrainz to tag tracks, resolve naming inconsistencies, retrieve album artwork, and enforce a uniform folder layout.
Replicating the music discovery features of platforms like Spotify is challenging but achievable. Spotify’s robust recommendations derive from years of listening patterns and proprietary algorithms. However, open-source options such as ListenBrainz can track your listening habits and offer tailored recommendations. Additionally, tools like Explo can create playlists in Navidrome based on these insights.
While self-hosting might appear daunting, it opens opportunities to save on subscription fees while enjoying greater control over your media. For example, self-hosting with solutions like Immich allows you to manage photos independently of Google Photos, and you can implement your document management system using tools like Papra.
Leave a Reply