Navidrome Configuration Options

How to customize Navidrome to your environment

Navidrome allows some customization using environment variables, loading from a configuration file or using command line arguments.

Configuration File

Navidrome tries to load the configuration from a navidrome.toml file in the current working directory, if it exists. You can create this file and put any of the configuration options below in it. Example of a configuration file (select your OS):

# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'

# IMPORTANT: Use single quotes for paths in Windows

MusicFolder = 'C:\Users\JohnDoe\Music'

# Set this to the path of your ffmpeg executable

FFmpegPath = 'C:\Program Files\ffmpeg\bin\ffmpeg.exe'
# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'
MusicFolder = '/Users/JohnDoe/Music'

# This is the default path for Homebrew installed ffmpeg

FFmpegPath = '/opt/homebrew/bin/ffmpeg'
# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'
MusicFolder = '/mnt/music'

You can also specify a different path for the configuration file, using the -c/--configfile option. Navidrome can load the configuration from toml, json, yml and ini files.

The example below assume you have created a navidrome.toml file in your home directory:

C:\> navidrome --configfile "c:\User\JohnDoe\navidrome.toml"
$ navidrome --configfile "/User/JohnDoe/navidrome.toml"
$ navidrome --configfile "/home/johndoe/navidrome.toml"

Command Line Arguments

You can set most of the config options below passing arguments to navidrome executable.

The example below shows how to set the MusicFolder using the command line, assuming you have your music library under your home directory:

C:\> navidrome --musicfolder "c:\User\JohnDoe\Music"
$ navidrome --musicfolder "/User/JohnDoe/Music"
$ navidrome --musicfolder "/mnt/music"

Please note that command line arguments must be all lowercase. For a list of all available command line options, just call navidrome --help.

Environment Variables

Any configuration option can be set as an environment variable, just add a the prefix ND_ and make it all uppercase. Ex: ND_LOGLEVEL=debug. See below for all available options

Available Options

Basic configuration

In config fileAs an env varDescriptionDefault Value
-ND_CONFIGFILELoad configurations from an external config file"./navidrome.toml"
MusicFolderND_MUSICFOLDERFolder where your music library is stored. Can be read-only. This becomes the default library when using multi-library setup"./music"
DataFolderND_DATAFOLDERFolder to store application data (DB)"./data"
CacheFolderND_CACHEFOLDERFolder to store cache data (transcoding, images…)"<DataFolder>/cache"
LogLevelND_LOGLEVELLog level. Useful for troubleshooting. Possible values: error, warn, info, debug, trace"info"
LogFileND_LOGFILEPath to log file for output. When specified, logs will be written to this file instead of stderrEmpty (log to stderr)
AddressND_ADDRESSAddress the server will bind to. Can be an IPv4, IPv6 or a UNIX socket file (unix:/path/to/file)0.0.0.0 and :: (all IPs)
BaseUrlND_BASEURLBase URL to configure Navidrome behind a proxy (examples: /music, https://music.example.com)Empty
PortND_PORTHTTP port Navidrome will listen to4533
EnableInsightsCollectorND_ENABLEINSIGHTSCOLLECTORControls whether the server will run its Anonymous Data Collection feature to help improve the project.true

Advanced configuration

In config fileAs an environment variableDescriptionDefault Value
AgentsND_AGENTSComma-separated list of metadata agents to use for retrieving artist information, biographies, and images. Available agents: lastfm, spotify, and deezer. The order determines priority - agents are tried in the specified order until one succeeds. Only enabled and configured agents will be used."lastfm,spotify,deezer"
AlbumPlayCountModeND_ALBUMPLAYCOUNTMODEChange how album play count is computed. When set to "normalized", album play count will be divided by the number of album tracks"absolute"
AuthRequestLimit*ND_AUTHREQUESTLIMITHow many login requests can be processed from a single IP during the AuthWindowLength. Set to 0 to disable the limit rater5
AuthWindowLength*ND_AUTHWINDOWLENGTHWindow Length for the authentication rate limit"20s"
AutoImportPlaylistsND_AUTOIMPORTPLAYLISTSEnable/disable .m3u playlist auto-importtrue
AutoTranscodeDownloadND_AUTOTRANSCODEDOWNLOADUse the client’s transcoding configuration for downloads, if the client does not specify the desired format. If false, the original format will be used, without any transcoding.false
DefaultPlaylistPublicVisibilityND_DEFAULTPLAYLISTPUBLICVISIBILITYSet imported playlists as public by defaultfalse
ArtistArtPriority*ND_ARTISTARTPRIORITYConfigure the order to look for artist images."artist.*, album/artist.*, external"
Backup.PathND_BACKUP_PATHPath to store backups. Set to "" to disable backups. Click here for details"" (disabled)
Backup.ScheduleND_BACKUP_SCHEDULESchedule for automatic backups. Use Cron syntax"" (disabled)
Backup.CountND_BACKUP_COUNTNumber of backups to keep0 (disabled)
CoverArtPriority*ND_COVERARTPRIORITYConfigure the order to look for cover art images. Use special embedded value to get embedded images from the audio filescover.*, folder.*, front.*, embedded, external
CoverJpegQualityND_COVERJPEGQUALITYSet JPEG quality percentage for resized cover art images75
Deezer.Enabled*ND_DEEZER_ENABLEDSet this to false to completely disable Deezer integration for artist imagestrue
Deezer.LanguageND_DEEZER_LANGUAGELanguage to be used by Deezer integration"en"
DefaultDownsamplingFormatND_DEFAULTDOWNSAMPLINGFORMATFormat to transcode to when client requests downsampling (specify maxBitrate without a format)"opus"
DefaultLanguageND_DEFAULTLANGUAGESets the default language used by the UI when logging in from a new browser. This value must match one of the file names in the resources/i18n. Ex: for Chinese Simplified it has to be zh-Hans (case sensitive)"en"
DefaultThemeND_DEFAULTTHEMESets the default theme used by the UI when logging in from a new browser. This value must match one of the options in the UI“Dark”
DefaultShareExpirationND_DEFAULTSHAREEXPIRATIONSets the default expiration time for new shares (public links). Accepts durations like “24h” or “45m”."8760h" (1 year)
DefaultDownloadableShareND_DEFAULTDOWNLOADABLESHARESets the default downloadable state for new shares (public links). When enabled, newly created shares will be downloadable by defaultfalse
DefaultUIVolumeND_DEFAULTUIVOLUMESets the default volume used by the UI when logging in from a new browser. This value must be between 0 and 100100
EnableArtworkPrecacheND_ENABLEARTWORKPRECACHEEnable image pre-caching of new added musictrue
EnableCoverAnimationND_ENABLECOVERANIMATIONControls whether the player in the UI will animate the album cover (rotation)true
EnableDownloadsND_ENABLEDOWNLOADSEnable the option in the UI to download music/albums/artists/playlists from the servertrue
EnableExternalServicesND_ENABLEEXTERNALSERVICESSet this to false to completely disable ALL external integrations, including the anonymous data collection and the nice login background imagestrue
EnableFavouritesND_ENABLEFAVOURITESEnable toggling “Heart”/“Loved” for songs/albums/artists in the UI (maps to “Star”/“Starred” in Subsonic Clients)true
EnableGravatarND_ENABLEGRAVATARUse Gravatar images as the user profile image. Needs the user’s email to be filledfalse
EnableLogRedactingND_ENABLELOGREDACTINGWhether or not sensitive information (like tokens and passwords) should be redacted (hidden) in the logstrue
EnableMediaFileCoverArt*ND_ENABLEMEDIAFILECOVERARTIf set to false, it will return the album CoverArt when a song CoverArt is requestedtrue
EnableNowPlayingND_ENABLENOWPLAYINGEnable/disable the Now Playing feature that tracks what songs users are currently listening to. When disabled, the “Now Playing” functionality and admin panel will be unavailabletrue
EnableReplayGainND_ENABLEREPLAYGAINEnable ReplayGain options in the UItrue
EnableScrobbleHistoryND_ENABLESCROBBLEHISTORYEnable/disable scrobble historytrue
EnableSharingND_ENABLESHARINGEnable the Sharing featurefalse
EnableStarRatingND_ENABLESTARRATINGEnable 5-star ratings in the UItrue
EnableTranscodingCancellationND_ENABLETRANSCODINGCANCELLATIONEnables transcoding cancellation when a client disconnects during streaming. When enabled, transcoding processes are stopped if the client closes the connection, saving server resources. Useful for preventing unnecessary transcoding work when users skip or stop playbackfalse
EnableTranscodingConfig*ND_ENABLETRANSCODINGCONFIGEnables transcoding configuration in the UIfalse
EnableUserEditingND_ENABLEUSEREDITINGEnable regular users to edit their details and change their passwordtrue
ExtAuth.TrustedSources*ND_EXTAUTH_TRUSTEDSOURCESComma separated list of IP CIDRs (or when listening on a UNIX socket the special value @) which are allowed to use reverse proxy authentication. Empty means “deny all”. Click here for details. Note: This option is unnecessary for most reverse proxy setups, only for authenticating reverse proxies.Empty
ExtAuth.UserHeader*ND_EXTAUTH_USERHEADERHTTP header containing the user name from an authenticating proxy. Click here for details."Remote-User"
FFmpegPathND_FFMPEGPATHPath to ffmpeg executable. Use it when Navidrome cannot find it, or you want to use a specific versionEmpty (search in the PATH)
GATrackingIDND_GATRACKINGIDSend basic info to your own Google Analytics account. Must be in the format UA-XXXXXXXXEmpty (disabled)
HTTPHeaders.FrameOptionsND_HTTPHEADERS_FRAMEOPTIONSAllows the X-Frame-Options header value to be set with a custom value. Ex: "SAMEORIGIN""DENY"
IgnoredArticlesND_IGNOREDARTICLESList of ignored articles when sorting/indexing artists"The El La Los Las Le Les Os As O A"
ImageCacheSizeND_IMAGECACHESIZESize of image (art work) cache. Set to "0" to disable cache"100MB"
Inspect.BacklogLimitND_INSPECT_BACKLOGLIMITBacklog limit for inspect request throttling100
Inspect.BacklogTimeoutND_INSPECT_BACKLOGTIMEOUTBacklog timeout for inspect request throttling"1m"
Inspect.EnabledND_INSPECT_ENABLEDEnable/disable inspect endpointstrue
Inspect.MaxRequestsND_INSPECT_MAXREQUESTSMaximum concurrent inspect requests1
Jukebox.EnabledND_JUKEBOX_ENABLEDEnable Jukebox mode (play audio on server’s hardware) Click here for detailsfalse
Jukebox.AdminOnlyND_JUKEBOX_ADMINONLYBy default, Jukebox mode is only available to Admins. Set this option to false to allow any valid user to control ittrue
Jukebox.Devices(cannot be set as an environment variable)List of devices that can be used by the Jukebox. Click here for detailsEmpty (auto detect)
Jukebox.DefaultND_JUKEBOX_DEFAULTDevice to use for Jukebox mode, if there are multiple Jukebox.Devices entries. Click here for detailsEmpty (auto detect)
LastFM.EnabledND_LASTFM_ENABLEDSet this to false to completely disable Last.fm integrationtrue
LastFM.ApiKey*ND_LASTFM_APIKEYLast.fm API KeyEmpty
LastFM.Secret*ND_LASTFM_SECRETLast.fm API SecretEmpty
LastFM.LanguageND_LASTFM_LANGUAGETwo letter-code for language to be used to retrieve biographies from Last.fm"en"
LastFM.ScrobbleFirstArtistOnlyND_LASTFM_SCROBBLEFIRSTARTISTONLYWhen enabled, only the first artist will be scrobbled for tracks with multiple artists, instead of the display artist or concatenated listfalse
ListenBrainz.BaseURLND_LISTENBRAINZ_BASEURLSet this to override the default ListenBrainz base URL (useful with self-hosted solutions like Maloja*https://api.listenbrainz.org/1/
ListenBrainz.EnabledND_LISTENBRAINZ_ENABLEDSet this to false to completely disable ListenBrainz integrationtrue
LyricsPriorityND_LYRICSPRIORITYControls the order and sources for fetching lyrics. Comma-separated list of sources checked in order: embedded (from tags), file extensions like .lrc, .txt, or any custom extension. Navidrome will search for lyrics files with the same name as the audio file but with the specified extension.".lrc,.txt,embedded"
MaxSidebarPlaylistsND_MAXSIDEBARPLAYLISTSSet the maximum number of playlists shown in the UI’s sidebar. Note that a very large number can cause UI performance issues.100
MPVPathND_MPVPATHPath to mpv executable. Used for Jukebox modeEmpty (search in PATH)
MPVCmdTemplateND_MPVCMDTEMPLATECmd template used to construct the call of the mpv executable. Used for Jukebox modempv --audio-device=%d --no-audio-display %f --input-ipc-server=%s
PasswordEncryptionKey*ND_PASSWORDENCRYPTIONKEYPassphrase used to encrypt passwords in the DB. Click here for details-
PID.AlbumND_PID_ALBUMSet the tag(s) to use as the Album ID. Click here for detailsmusicbrainz_albumid|albumartistid,album,albumversion,releasedate
PID.TrackND_PID_TRACKSet the tag(s) to use as the Track ID. Click here for detailsmusicbrainz_trackid|albumid,discnumber,tracknumber,title
PlaylistsPathND_PLAYLISTSPATHLimit where to search for and import playlists from. Can be a list of folders/globs (separated by : (or ; on Windows). Paths MUST be relative to MusicFolderEmpty (meaning any playlist files in your library will be imported)
PreferSortTagsND_PREFERSORTTAGSUse Sort_* tags to sort columns in the UI.false
Prometheus.EnabledND_PROMETHEUS_ENABLEDEnable extra endpoint with Prometheus metrics.false
Prometheus.MetricsPathND_PROMETHEUS_METRICSPATHCustom path for Prometheus metrics. Useful for blocking unauthorized metrics requests."/metrics"
Prometheus.PasswordND_PROMETHEUS_PASSWORDEnables Basic Auth protection for Prometheus endpoint. User will be navidrome. Leave empty to disable Basic Auth protection.Empty (no password/authentication)
RecentlyAddedByModTimeND_RECENTLYADDEDBYMODTIMEUses music files’ modification time when sorting by “Recently Added”. Otherwise use import timefalse
Scanner.EnabledND_SCANNER_ENABLEDEnable/disable the scanner. Set to false to disable automatic scanning of the music library.true
Scanner.ScheduleND_SCANNER_SCHEDULESchedule for automatic scans. Use Cron syntax0 (disabled)
Scanner.WatcherWaitND_SCANNER_WATCHERWAITTime to wait after a file change is detected before starting a scan. Useful to avoid scanning incomplete files. Set it to 0 to disable the watcher"5s"
Scanner.ScanOnStartupND_SCANNER_SCANONSTARTUPEnable/disable scanning the music library on startup. Set to false to disabletrue
Scanner.ArtistJoinerND_SCANNER_ARTISTJOINERCharacter string used to join multiple artists in display. Change this if you prefer a different separator between artist names" • "
Scanner.FollowSymlinksND_SCANNER_FOLLOWSYMLINKSWhether to follow symbolic links when scanning directories. When enabled, the scanner will traverse symlinked directories and include their contents in the library. When disabled, symlinked directories are ignored during scanningtrue
Scanner.PurgeMissingND_SCANNER_PURGEMISSINGControls when missing files, albums, and artists are purged from the database during scans. Possible values: "never" (default, just mark as missing), "always" (purge after every scan), "full" (purge only after a full scan)."never"
SearchFullStringND_SEARCHFULLSTRINGMatch query strings anywhere in searchable fields, not only in word boundaries. Useful for languages where words are not space separatedfalse
SessionTimeoutND_SESSIONTIMEOUTHow long Navidrome will wait before closing web ui idle sessions"48h"
ShareURLND_SHAREURLBase URL for shared links. Useful when your server address is not a public (ex: when using Tailscale). See discussion hereEmpty (use server address)
SmartPlaylistRefreshDelayND_SMARTPLAYLISTREFRESHDELAYHow often to refresh Smart Playlists. Check the smart playlists docs"5s"
Spotify.ID*ND_SPOTIFY_IDSpotify Client ID. Required if you want Artist imagesEmpty
Spotify.Secret*ND_SPOTIFY_SECRETSpotify Client Secret. Required if you want Artist imagesEmpty
Subsonic.AppendSubtitleND_SUBSONIC_APPENDSUBTITLEAppend the subtitle tag to the song title in all Subsonic API responsestrue
Subsonic.ArtistParticipationsND_SUBSONIC_ARTISTPARTICIPATIONSWhen Subsonic clients request artist’s albums, include albums where the artist participates (ex: Various Artists compilations)false
Subsonic.DefaultReportRealPathND_SUBSONIC_DEFAULTREPORTREALPATHSet to true to report the real path of the music files in the API. Can be customized individually for each client/player. This can be a security risk, so it is disabled by defaultfalse
Subsonic.LegacyClientsND_SUBSONIC_LEGACYCLIENTSList of clients that does not work with the new OpenSubsonic API improvements."DSub"
Tags(cannot be set as an environment variable)Configure custom tags to be imported from your music files. Click here for detailsEmpty
TLSCertND_TLSCERTPath for the TLS certificate file, which should include the signature chain if anyEmpty (disable TLS)
TLSKeyND_TLSKEYPath for the TLS key fileEmpty (disable TLS)
TranscodingCacheSizeND_TRANSCODINGCACHESIZESize of transcoding cache. Set to "0" to disable cache"100MB"
UILoginBackgroundUrlND_UILOGINBACKGROUNDURLChange background image used in the Login pagerandom music image from this Unsplash.com collection
UIWelcomeMessageND_UIWELCOMEMESSAGEAdd a welcome message to the login screenEmpty
UnixSocketPermND_UNIXSOCKETPERMSet file permissions for Unix Socket File.*"0660"

Notes

  • Durations are specified as a number and a unit suffix, such as “24h”, “30s” or “1h10m”. Valid time units are “s”, “m”, “h”.
  • Sizes are specified as a number and an optional unit suffix, such as “1GB” or “150 MiB”. Default unit is bytes. Note: “1KB” == “1000”, “1KiB” == “1024”
  • Transcoding can be required in some situations. For example: trying to play a WMA file in a webbrowser, will only work for natively supported formats by the browser you are using. (so playing that with Mozilla Firefox on Linux, will not work. Mozilla even has their own guide about audio codecs).

Last modified January 16, 2026: Fix dead link to insights docs (#268) (de5c693)