Shelfarr Docs

Configuration

A field-by-field reference for every Shelfarr setting — its type, default and what it does. Use it while configuring integrations, paths, queue behaviour, result selection, notifications and authentication.

⚙️
Most settings live in Admin → Settings. Download clients are managed under Admin → Download Clients, and per-indexer routing under Admin → Download Routing. Per-user API tokens are created from Profile → API tokens.
🧩
You don't need everything. A minimal setup is one indexer (or a direct source), one download client, and your output paths. Everything else is optional and has a sensible default.

Indexers #

Shelfarr searches indexers through Prowlarr or Jackett. Pick one provider with indexer_provider.

SettingTypeDefaultDescription
indexer_providerstring(empty)Active provider: prowlarr, jackett or none. Leave unset on upgrades to keep legacy Prowlarr config.
prowlarr_urlstring(empty)Base URL for Prowlarr (e.g. http://localhost:9696).
prowlarr_api_keystring(empty)API key from Prowlarr → Settings → General.
prowlarr_tagsstring(empty)Comma-separated tag IDs or names to filter indexers (empty = all).
jackett_urlstring(empty)Base URL for Jackett (e.g. http://localhost:9117).
jackett_api_keystring(empty)API key from the Jackett dashboard.
jackett_indexer_filterstringallTorznab indexer filter. Use all or a Jackett filter such as tag:books.

Download Clients #

Each client is created in Admin → Download Clients. Supported adapters: qbittorrent, decypharr, deluge, transmission (torrent) and sabnzbd, nzbget (usenet).

FieldRequiredDescription
nameRequiredDisplay name shown in Shelfarr (e.g. Home qBittorrent).
client_typeRequiredWhich adapter to use, from the list above.
urlRequiredBase URL including protocol and port.
usernameOptionalRequired by clients that use user/password authentication.
passwordOptionalPassword for authenticated clients. Stored encrypted.
api_keyOptionalAPI key used by SABnzbd. Stored encrypted.
categoryOptionalCategory/tag applied in the download client, for routing and filtering.
download_pathOptionalClient-specific completed download path override.
enabledRequiredWhen disabled, Shelfarr won't use the client for new downloads.
priorityRequiredOrder within the same type. Lower values are preferred first.
torrent_verification_max_attemptsOptionalTorrent clients only. Times Shelfarr re-checks a torrent was accepted (default 10).
torrent_verification_wait_timeOptionalTorrent clients only. Seconds between verification attempts (default 2).
🧭
Use Admin → Download Routing to send specific indexers to specific clients per download type.

Audiobookshelf #

Optional. When configured, Shelfarr triggers library scans after a download lands and enriches metadata.

SettingTypeDefaultDescription
audiobookshelf_urlstring(empty)Base URL for Audiobookshelf (e.g. http://localhost:13378).
audiobookshelf_api_keystring(empty)API token from Audiobookshelf user settings.
audiobookshelf_audiobook_library_idstring(empty)Library ID for audiobooks.
audiobookshelf_ebook_library_idstring(empty)Library ID for ebooks.
audiobookshelf_library_sync_intervalinteger3600Seconds between automatic library sync jobs.

Metadata Sources #

Open Library is always available. Hardcover is optional and used first when metadata_source is auto.

SettingTypeDefaultDescription
metadata_sourcestringautoPrimary source: auto (Hardcover first, Open Library fallback), hardcover or openlibrary.
hardcover_api_tokenstring(empty)API token from hardcover.app/account/api.
hardcover_search_limitinteger10Max search results from Hardcover.
open_library_search_limitinteger20Max search results from Open Library.

Direct Downloads #

Optional sources that download directly, without an indexer or download client. Anna's Archive and Z-Library cover ebooks; LibriVox provides free public-domain audiobooks.

SettingTypeDefaultDescription
anna_archive_enabledbooleanfalseEnable Anna's Archive as an additional ebook search source.
anna_archive_urlstringhttps://annas-archive.seBase URLs to try. Shelfarr uses the first reachable URL.
anna_archive_api_keystring(empty)Member API key (requires a donation).
flaresolverr_urlstring(empty)FlareSolverr endpoint for bypassing DDoS protection (e.g. http://flaresolverr:8191).
zlibrary_enabledbooleanfalseEnable the unofficial Z-Library fallback. May break if the service changes.
zlibrary_urlstring(built-in list)Base URLs to try. Shelfarr uses the first that accepts your login.
zlibrary_emailstring(empty)Z-Library account email used for login.
zlibrary_passwordstring(empty)Z-Library account password. Stored encrypted.
librivox_enabledbooleanfalseEnable LibriVox as a free public-domain audiobook source.
librivox_urlstringhttps://librivox.orgLibriVox base URL.
librivox_search_limitinteger20Maximum number of LibriVox audiobook results to return.

Output Paths & Templates #

Where completed books are placed, and how their folders and filenames are named.

SettingTypeDefaultDescription
audiobook_output_pathstring/audiobooksDestination directory for completed audiobooks.
ebook_output_pathstring/ebooksDestination directory for completed ebooks.
audiobook_path_templatestring{author}/{title}Folder template for audiobooks.
ebook_path_templatestring{author}/{title}Folder template for ebooks.
audiobook_filename_templatestring{author} - {title}Filename template for audiobooks (extension appended automatically).
ebook_filename_templatestring{author} - {title}Filename template for ebooks (extension appended automatically).
download_remote_pathstring(empty)Download client host path, for remote path mapping.
download_local_pathstring/downloadsContainer-visible path where downloaded files appear.

Template variables — available in both path and filename templates:

{author}Primary author
{authorSort}Sortable author
{title}Book title
{titleSort}Sortable title
{year}Publish year
{publisher}Publisher
{language}Language code
{series}Series name
{seriesSort}Sortable series
{seriesNum:00}Padded number
{narrator}Narrator
⚠️
Templates must include {title}. Optional suffix text is allowed inside braces, e.g. {series/} or {series - }, which is dropped when the value is empty. Path templates cannot contain .. or start with /.

Download Settings #

SettingTypeDefaultDescription
preferred_download_typesjson["torrent","usenet","direct"]Download types in preference order. Higher-ranked types win when multiple result types are available.
download_check_intervalinteger60Seconds between download status checks.
download_enqueue_timeout_minutesinteger5Minutes a download may stay queued before being flagged as never dispatched.
post_processing_source_path_retriesinteger10Retries while waiting for completed download files to appear.
remove_completed_usenet_downloadsbooleantrueRemove completed usenet jobs from the client after import.

Queue & Retry #

SettingTypeDefaultDescription
immediate_search_enabledbooleanfalseSearch immediately when a request is created, instead of waiting for the queue cycle.
auto_approve_requestsbooleanfalseAutomatically enqueue searches for requests created by non-admin users.
queue_batch_sizeinteger5Requests processed per queue run.
rate_limit_delayinteger2Seconds between API calls.
max_retriesinteger10Retry attempts before a request is flagged for attention.
retry_base_delay_hoursinteger24Base delay before retrying not-found requests.
retry_max_delay_daysinteger7Maximum retry delay cap.

Auto-Selection #

When enabled, Shelfarr picks the best result automatically instead of waiting for admin review.

SettingTypeDefaultDescription
auto_select_enabledbooleanfalseAutomatically select the best result without admin review.
auto_select_min_seedersinteger1Minimum seeders required for torrent auto-selection.
auto_select_confidence_thresholdinteger90Minimum confidence score (0–100) for auto-selection.

Format Preferences #

Comma-separated format lists. Approved/rejected lists gate auto-selection; preferred lists are ranked best→worst.

SettingTypeDefaultDescription
ebook_preferred_formatsjson[]Ebook formats in preference order, best to worst.
ebook_approved_formatsjson[]Ebook formats that may be auto-selected (blank = allow any).
ebook_rejected_formatsjson[]Ebook formats that must never be auto-selected.
audiobook_preferred_formatsjson[]Audiobook formats in preference order, best to worst.
audiobook_approved_formatsjson[]Audiobook formats that may be auto-selected (blank = allow any).
audiobook_rejected_formatsjson[]Audiobook formats that must never be auto-selected.
audiobook_prefer_single_filebooleanfalsePrefer single-file releases (e.g. .m4b) over chapter-split releases.
audiobook_prefer_higher_bitratebooleanfalsePrefer higher bitrate releases when bitrate can be inferred from the title.

Language & Matching #

SettingTypeDefaultDescription
default_languagestringenDefault language for new requests.
enabled_languagesjson["en"]Languages selectable when creating requests.
min_match_confidenceinteger50Minimum confidence score (0–100) to display a search result.

Notifications #

In-app notifications are always on. The events below are comma-separated: request_created, request_completed, request_failed, request_attention.

SettingTypeDefaultDescription
discord_enabledbooleanfalseSend native Discord webhook notifications.
discord_webhook_urlstring(empty)Incoming Discord webhook URL for the target channel.
discord_eventsstringrequest_created,request_completed,request_failed,request_attentionComma-separated Discord events to send.
webhook_enabledbooleanfalseSend generic JSON webhook notifications.
webhook_urlstring(empty)Webhook endpoint URL. A JSON payload is sent per enabled event.
webhook_tokenstring(empty)Optional Bearer token for webhook authentication.
webhook_eventsstringrequest_created,request_completed,request_failed,request_attentionComma-separated webhook events to send.
webhook_topicstring(empty)Optional topic field in the payload (required by ntfy on the base URL).
telegram_enabledbooleanfalseEnable the Telegram command and notification integration.
telegram_update_modestringpollingHow updates are received: polling (local) or webhook (public HTTPS).
telegram_bot_tokenstring(empty)Bot token from BotFather.
telegram_bot_usernamestring(empty)Bot username without @.
telegram_webhook_secretstring(empty)Secret checked against X-Telegram-Bot-Api-Secret-Token (webhook mode).
telegram_allowed_chat_idsstring(empty)Fallback allowlist of group chat IDs. Prefer pairing-code approval.
telegram_request_usernamestring(empty)Shelfarr username that owns Telegram group requests. Defaults to the first admin.
telegram_notification_eventsstringrequest_completed,request_failed,request_attentionEvents sent back to the authorized group that created the request.

Security #

SettingTypeDefaultDescription
auth_disabledbooleanfalseDisable password auth (username-only, trusted networks only). Can also be set via DISABLE_AUTH.
session_max_age_daysinteger30Session lifetime before forced re-login.
login_lockout_thresholdinteger5Failed attempts before temporary lockout.
login_lockout_duration_minutesinteger15Lockout duration in minutes.
allow_user_uploadsbooleanfalseAllow non-admin users to upload book files directly to fulfill requests.
api_tokenstring(generated)Legacy global API token. Prefer per-user tokens from Profile → API tokens.

OIDC / SSO Authentication #

Single sign-on via OpenID Connect — works with Authentik, Authelia, Keycloak and others.

SettingTypeDefaultDescription
oidc_enabledbooleanfalseEnable OpenID Connect single sign-on.
oidc_auto_redirectbooleanfalseAuto-start OIDC sign-in for unauthenticated users. Use /session/new?local=1 for the local form.
oidc_provider_namestringSSODisplay name shown on the login button.
oidc_issuerstring(empty)Issuer URL (e.g. https://auth.example.com/realms/master).
oidc_client_idstring(empty)Client ID from your identity provider.
oidc_client_secretstring(empty)Client secret from your identity provider.
oidc_scopesstringopenid profile emailSpace-separated scopes to request.
oidc_link_existing_usersbooleanfalseLink an unlinked local user whose username matches the OIDC username or email prefix.
oidc_auto_create_usersbooleanfalseAuto-create new users on first OIDC login.
oidc_default_rolestringuserDefault role for auto-created users (user or admin).

Health & Updates #

SettingTypeDefaultDescription
health_check_intervalinteger300Seconds between system health checks (default: 5 minutes).
github_repostringPedro-Revez-Silva/shelfarrRepository used for update-availability checks.