🎧☁️ Modern Music Server and Streamer compatible with Subsonic/Airsonic
Go to file
Deluan c4eab5db86 Update dhowden/tag library, to fix extracting images from Ogg files
see https://github.com/dhowden/tag/issues/64
2020-04-11 23:40:35 -04:00
.github Changes when pipelines are triggered: 2020-04-04 16:39:43 -04:00
assets Add warning when using external assets 2020-01-24 20:35:27 -05:00
bin chore: remove unused script 2020-02-22 20:29:57 -05:00
conf Refactor a bit how ffmpeg is used to get metadata 2020-04-11 13:08:21 -04:00
consts Remove duplicated fscache creation 2020-04-09 13:15:01 -04:00
contrib Simplify the openrc unit 2020-04-09 19:21:23 -04:00
db Add `created` and `changed` fields to playlists responses 2020-04-11 18:58:43 -04:00
engine Removed Playlist.GetWithTracks, not needed anymore 2020-04-11 19:05:51 -04:00
log Don't set a playerId cookie it cannot register the player 2020-04-04 20:26:36 -04:00
model Removed Playlist.GetWithTracks, not needed anymore 2020-04-11 19:05:51 -04:00
persistence Keep the order of the playlist when adding new songs. Also allow adding a song more than once 2020-04-11 21:24:15 -04:00
scanner Add a test 2020-04-11 13:08:21 -04:00
server Make fields `songCount`, `duration`, `created` and `changed` mandatory in playlists responses (fixes #164) 2020-04-11 19:15:15 -04:00
static Fix typo 2020-04-05 17:49:14 -04:00
tests Fix tests in pipeline 2020-04-06 17:01:48 -04:00
ui Update themes doc, link to documentation site 2020-04-11 13:13:53 -04:00
utils feat: expose album, song and artist annotations in the RESTful API 2020-03-28 19:22:55 -04:00
.dockerignore feat: add health check to docker image 2020-03-26 15:15:40 -04:00
.gitignore chore: add a docker-compose.override.yml file, to support local testing 2020-02-06 12:12:10 -05:00
.goreleaser.yml build: always add latest tag to version 2020-03-18 21:05:17 -04:00
.nvmrc Upgrade Node to 13.12 2020-04-02 19:41:10 -04:00
Dockerfile Upgrade Node to 13.12 2020-04-02 19:41:10 -04:00
LICENSE Change license to GPLv3 2020-01-22 14:48:38 -05:00
Makefile Download and install latest Jamstash when calling `make Jamstash-master` 2020-04-06 00:40:51 -04:00
Procfile.dev Add ui subfolder, bootstrapped a "hello-world" React-Admin app, changed Makefile to start both apps in dev mode 2020-01-14 15:34:59 -05:00
README.md Update link to Subsonic API compatibility doc 2020-04-11 13:19:58 -04:00
docker-compose.yml Add BaseURL configuration (fixes #103) 2020-04-03 19:05:38 -04:00
go.mod Update dhowden/tag library, to fix extracting images from Ogg files 2020-04-11 23:40:35 -04:00
go.sum Update dhowden/tag library, to fix extracting images from Ogg files 2020-04-11 23:40:35 -04:00
lefthook.yml Re-stage files after formatting 2020-04-08 13:23:39 -04:00
main.go Add BaseURL configuration (fixes #103) 2020-04-03 19:05:38 -04:00
reflex.conf Ignore data folder when watching for changes in folders (when in dev mode) 2020-04-09 16:48:04 -04:00
wire_gen.go Create and configure image cache 2020-04-05 22:02:06 -04:00
wire_injectors.go Add BaseURL configuration (fixes #103) 2020-04-03 19:05:38 -04:00

README.md

Navidrome Music Streamer

Last Release Build Docker Pulls Dev Chat Subreddit

Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. It's like your personal Spotify!

Any feedback is welcome! If you need/want a new feature, find a bug or think of any way to improve Navidrome, please fill a GitHub issue or join the discussion in our Subreddit. If you want to contribute to the project in any other way (ui/backend dev, translations, themes), please join the chat in our Discord server.

Features

  • Handles very large music collections
  • Streams virtually any audio format available
  • Reads and uses all your beautifully curated metadata (id3 tags)
  • Multi-user, each user has their own play counts, playlists, favourites, etc..
  • Very low resource usage: Ex: with a library of 300GB (~29000 songs), it uses less than 50MB of RAM
  • Multi-platform, runs on macOS, Linux and Windows. Docker images are also provided
  • Ready to use Raspberry Pi binaries available
  • Automatically monitors your library for changes, importing new files and reloading new metadata
  • Themeable, modern and responsive Web interface based on Material UI, to manage users and browse your library
  • Compatible with all Subsonic/Madsonic/Airsonic clients. See bellow for a list of tested clients
  • Transcoding/Downsampling on-the-fly. Can be set per user/player. Opus encoding is supported
  • Integrated music player (WIP)

Navidrome should be compatible with all Subsonic clients. The following clients are tested and confirmed to work properly:

For more options, look at the list of clients maintained by the Airsonic project. Please open an issue if you have any trouble with the client of your choice.

Road map

This project is being actively worked on. Expect a more polished experience and new features/releases on a frequent basis. Some upcoming features planned:

  • Complete WebUI, to browse and listen to your library
  • Last.FM integration
  • Smart/dynamic playlists (similar to iTunes)
  • Support for audiobooks (bookmarking)
  • Jukebox mode
  • Sharing links to albums/songs/playlists
  • Podcasts

Installation

Various options are available:

Pre-built executables

Just head to the releases page and download the latest version for you platform. There are builds available for Linux (amd64 and arm), macOS and Windows (32 and 64 bits). For Raspberry Pi (tested with Raspbian Buster on Pi 4), use the Linux arm builds.

Remember to install ffmpeg in your system, a requirement for Navidrome to work properly. You may find the latest static build for your platform here: https://johnvansickle.com/ffmpeg/

If you have any issues with these binaries, or need a binary for a different platform, please open an issue

Docker

Docker images are available. They include everything needed to run Navidrome. Example of usage:

# This is just an example. Customize it to your needs.

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"
    environment:
      # All options with their default values:
      ND_MUSICFOLDER: /music
      ND_DATAFOLDER: /data
      ND_SCANINTERVAL: 1m
      ND_LOGLEVEL: info  
      ND_PORT: 4533
      ND_TRANSCODINGCACHESIZE: 100MB
      ND_SESSIONTIMEOUT: 30m
      ND_BASEURL: ""
    volumes:
      - "./data:/data"
      - "/path/to/your/music/folder:/music:ro"

To get the cutting-edge, latest version from master, use the image deluan/navidrome:develop

Build from source

You will need to install Go 1.14 and Node 13.12.0. You'll also need ffmpeg installed in your system. The setup is very strict, and the steps bellow only work with these specific versions (enforced in the Makefile)

After the prerequisites above are installed, clone this repository and build the application with:

$ git clone https://github.com/deluan/navidrome
$ cd navidrome
$ make setup        # Install tools required for Navidrome's development 
$ make buildall     # Build UI and server, generates a single executable

This will generate the navidrome executable binary in the project's root folder.

Running for the first time

Start the server with:

./navidrome

The server should start listening for requests on the default port 4533

After starting Navidrome for the first time, go to http://localhost:4533. It will ask you to create your first admin user.

For more options, run navidrome --help

Running as a service

Check the contrib folder for startup files for your init system.

Screenshots

Subsonic API Version Compatibility

Check the up to date compatibility table for the latest Subsonic features available.