⚡ nzbfast

The fast Usenet downloader - user manual

1 · Welcome

nzbfast downloads from Usenet as fast as your line, your providers, and your machine allow - and usually that means as fast as your line. It is a single self-contained program: the engine, a web dashboard, a poster-wall media browser, a built-in indexer, realtime preview, native PAR2 repair, and native RAR extraction are all inside one executable. There is nothing else to install.

What makes it fast is architecture, not tweaks:

Measured against the field on identical hardware, jobs and providers, nzbfast has finished a 190 GB download in around 5 minutes on a 10 GbE line, with the leading alternatives 30–220% behind on the same tests where they completed them at all. The figures are in §3.

2 · Quick start

macOS

  1. Open nzbfast-<version>-macos.dmg and drag NzbFast into Applications (universal: Apple Silicon + Intel).
  2. First launch: macOS warns that nzbfast isn't Apple-notarized yet. Right-click the app → Open, or open System Settings → Privacy & Security, scroll down, and click Open Anyway. This is a one-time step.
  3. The app window shows the dashboard with a welcome card. Click it and add at least one Usenet server (host, port 563, username, password). You can add more later in Settings.
  4. Drop an .nzb anywhere on the dashboard, or just double-click .nzb files in Finder. Downloads land in ~/Downloads/nzbfast. Quit from the menu; downloads resume where they left off.

Prefer no app? The plain zip (binary + Start nzbfast.command launcher, same engine) still works as before. The steps are below, under "From a terminal".

Windows

  1. Run nzbfast-setup-<version>.exe. It installs for your user only (no administrator password). Because this release is not yet code-signed, SmartScreen may show "Windows protected your PC". Click More infoRun anyway.
  2. nzbfast lives in the system tray: double-click the tray icon (or use Open Dashboard in its right-click menu) to open the dashboard, then add your Usenet server from the welcome card. The tray menu also has Pause/Resume, your downloads folder, and Quit.
  3. Double-clicking a .nzb file queues it. Windows Defender may ask once to allow local network listening. Allow it.

Prefer a portable copy? The -windows-x64.zip still works: unzip anywhere and double-click nzbfast.exe (or Start nzbfast.bat) for the terminal wizard.

From a terminal (any platform)

nzbfast setup            # interactive server setup (writes config.local.json)
nzbfast serve --open     # start the daemon and open the dashboard
TipAlready run SABnzbd or NZBGet? Skip typing credentials: Settings → Usenet servers → Import from SABnzbd / NZBGet… finds your existing installation and copies its servers over. There is also nzbfast import-sab on the command line.

3 · How nzbfast works

A quick vocabulary so the rest of the manual reads easily:

TermMeaning
Provider / serverA Usenet service you have an account with (Newshosting, Eweka, XS News…). Each allows some number of simultaneous connections.
BackboneThe infrastructure behind a provider. Several brands often resell the same backbone, useful to know because two providers on one backbone miss the same articles. See Server diversity.
NZBA small XML file listing the articles that make up a post. This is what you feed nzbfast.
PAR2Recovery data posted alongside a release. nzbfast verifies against it during the download and repairs automatically when articles are damaged or missing.
Store-mode RARMost releases are packed into RAR volumes without compression. nzbfast recognises this and writes the inner file directly to its final location while downloading, with no unpack step afterwards.

The pipeline runs download → decode → verify → extract concurrently. The Pipeline card on the dashboard shows all three lanes moving at once. When the last byte arrives, verification is already done and the file is already extracted; a typical job's "post-processing" time is zero. If repair is needed, only then are volumes materialised to disk, repaired in place by the native GF(2¹⁶) engine (renamed or byte-shifted obfuscated data is found and adopted by a sliding block scan), and re-extracted, all automatically.

Interrupted downloads (crash, power loss, kill -9) resume from the article journal: bytes already on disk are never fetched twice. The journal records where every article's bytes physically landed (even bytes that were direct-extracted into the final file), so a resume rebuilds from local disk and re-verifies everything it restored against the PAR2 block map before trusting it.

How that compares

Measured against SABnzbd 5.0.4 and NZBGet 26.2 on the same machine, the same providers and the same NZBs, timed to a usable file (download, verify, repair and extract all included), because that is when the job is actually done:

Job sizenzbfastNZBGet 26.2SABnzbd 5.0.4
7 GB13.7 s+26%+39%
35 GB67 s+61%+325%
87 GB272 s+36%+160%
190 GB9 m 00 s+30%+111%

The gap is the post-processing the others still have to do after the last byte lands. Both competitors were tuned for the comparison, not left on defaults. SABnzbd in particular ships with request pipelining off, which costs it dearly, so it was switched on.

Two differences matter as much as the times:

Crash resume, measuredKill a download mid-flight (kill -9 at 15 GB of a 34.5 GB job) and the resume re-fetches ~0.3 GB (only the articles genuinely in flight at the kill) against NZBGet's 0.2 GB in the same test. This used to be a loss we published (15.3 GB re-fetched, when the journal couldn't account for direct-extracted bytes); the placement journal fixed it: the resume restores those bytes from the local output files and re-verifies every restored byte against the PAR2 block map before trusting it. Every scenario we lose is published alongside the wins, with the full method and raw numbers.

4 · The dashboard

Open http://localhost:6789 (or your machine's address from another device; the phone layout adapts automatically). Everything updates live, once a second. The cards, top to bottom:

Header bar

Throughput

Live MB/s with a scrolling chart; the dashed watermarks mark this session's high/low, the faint line is a moving average. Below it, a histogram shows how the session's speed samples distribute: typical vs peak. Widen the window and the charts show more history (up to an hour).

Stat tiles

Downloaded this session, queue depth, completed/failed counts, session peak speed.

Resources: one machine, four ceilings

CPU, RAM (against nzbfast's memory budget), disk write rate and network on one normalized chart, with real values in the legend and a low-disk warning. No other NZB client shows you this; it exists to prove a point: nzbfast will max your line, not your machine.

Pipeline: stages overlap

Three lanes: download, verify (PAR2 blocks checked), extract. On a healthy job all three move together.

Providers

Per-server live rate, connection utilisation, share of traffic, session GB, and a lifetime article-completion score (colored when a server drops below 98%). A stacked area chart shows each provider's contribution over time. Rows re-order by live performance every 10 s (configurable in Settings → Interface) so your fastest provider is always on top.

Queue

Browse index

Search everything the built-in indexer has catalogued from your watched groups (see Automation) and download with one click, no external indexer needed. The status line shows scan progress; Scan now forces a pass.

Watchlist

Add titles by name, including ones not posted yet. When a matching release appears in the index it is grabbed automatically, with quality preferences and upgrade rules (a better copy replaces a worse one).

History

Recent downloads with status, size, location; failed jobs offer Retry (resumes from the journal). Encrypted archives show a 🔑 unlock control: enter the password and the job finishes in place. The verify-health strip charts bad PAR2 blocks per download: a rising tail means articles are arriving damaged.

Data usage

Per-provider daily bars and Today / 7-day / 30-day totals, essential for metered and block accounts. Block accounts show lifetime usage against their size.

Log, System benchmark, Connection tuning, Server diversity

An in-page log viewer, and the three self-measurement tools described in Performance tools.

5 · Adding downloads

MethodHow
Drag & dropDrop one or more .nzb files anywhere on the dashboard.
Watch folderSet a folder in Settings; any .nzb saved into it is picked up within 5 seconds and the file removed. Point your browser's download directory at it for one-click grabs from indexer sites.
From a URLPaste an NZB link (API mode=addurl, or via any connected app).
Browse indexClick any complete release in the Browse card.
Watchlist / RSSAutomatic; see Automation.
Sonarr/Radarr etc.They send grabs straight to the queue; see §11.
Command linenzbfast get file.nzb downloads without the daemon.

Categories, priorities, passwords

6 · The poster wall

Click 🎬 wall in the header. The wall turns your index into a media browser: every recognised film and TV release as a poster tile with rating, year, genres, cast and synopsis: your newsgroups, browsable as a catalogue.

7 · Preview & verify

You don't have to wait for a download to finish to know it's the right file. Open it while it downloads, check the content, language and quality are what you expected, and cancel early if they aren't, instead of finding out after the full download.

Player noteVLC, IINA, mpv and Infuse all open /stream URLs. To check from another machine use your machine's LAN address in place of localhost.
Auth noteWith an API key set, opening a parked library entry over /stream/<id> requires a per-job token (?t=…): players can't send API keys, so the /m3u handoff and the .strm pointer embed it for you; minting it (/m3u) requires the key. Plain byte-serving of an already-active download stays open, and keyless installs behave as before.

8 · Usenet servers

Settings → Usenet servers is the full editor: add, edit, remove, reorder, and switch any server in or out of the pool. Each server has:

FieldNotes
Host / portUse SSL port 563. TLS costs nothing measurable: nzbfast always encrypts.
Username / passwordStored locally in config.local.json, never shown back to the browser. Leaving password blank on edit keeps the stored one.
ConnectionsPer-server simultaneous connections. Use Connection tuning (§13) to find each provider's sweet spot rather than guessing high.
Level (tier)0 = primary; higher levels are fill servers, only asked for articles every lower level missed. Put unlimited accounts at 0, block accounts at 1+.
Block size (GB)For block (pay-per-GB) accounts: nzbfast tracks lifetime usage against this and stops using the server when spent (warning at 85%).

Two further per-server options have no dashboard control yet: add them by hand to that server's entry in config.local.json (see §17) and restart.

KeyNotes
bind_ipBind this server's outgoing connections to a specific local address, for multi-homed boxes and VPN split tunnels. The address family also picks the target family: a v4 bind connects to the server's v4 address.
socks5Send this server's NNTP traffic through a SOCKS5 proxy: host:port, or user:pass@host:port. The hostname is resolved by the proxy, so there is no local DNS leak.
RecommendationTwo providers on different backbones beat three on the same one. Run Server diversity (§13) to see which of your providers actually diversify your coverage and which are redundant copies of each other.

9 · Settings reference

Nearly everything is configurable from the dashboard, under ⚙ Settings; the four exceptions are listed at the end of this section. Values marked live apply immediately; restart values apply on the next launch. Every change made here is persisted to settings.json and survives restarts (UI values win over command-line flags).

Speed & scheduling live

SettingWhat it does
Speed limitCap in bytes/sec (50M, 1G, 0 = unlimited). Remote apps may send percentages; set Line speed so they translate correctly.
Auto speedRTT-governed cap that yields to other household traffic and re-expands when the line is quiet.
Auto-defer slow downloadsA job stuck on one slow server while others wait is moved to the back of the queue (progress kept). See §13.
Prefetch on idle serversServers useless to the active job start the next queued one. See §13.
Check for updates / Update check URLNotify-only update notices. See §14.
Line speedYour connection's rated speed, enabling percentage limits from SABnzbd-compatible apps.
Weekly scheduleRow editor for time-of-week rules: pause, resume, or set a speed limit at given days/times (local time). E.g. limit to 20 MB/s on weekdays 9–17, unlimited otherwise.

Next download live

Connections (per server), window (pipelining depth per connection), decoders (parallel decode threads). Sampled when each job starts. Defaults are right for most lines; use the tuning tools before raising blindly.

Fast verify (CRC32) (on by default) claims PAR2 blocks by CRC32 while the download is still running, which is 2-3x faster on a slow CPU. Every article's own checksum is still verified, and the final settle pass always uses full MD5, so this trades no correctness. Untick it to do per-block MD5 during the download too.

Disk & quota live

Minimum free space (pause new jobs below it), download quota per day or month (UTC; Force jobs bypass), memory limit, the engine's RAM budget (default: ¼ of RAM, clamped; raise it on a big-RAM box for maximum speed on huge jobs, and see what low memory costs before lowering it) restart.

Move completed to: after unpack, cleanup and renaming, finished downloads move here - a NAS share, a media drive, wherever your library lives. The category layout is preserved (a job that finished under tv/ lands under tv/ at the destination), and history follows the move, so connected apps import from and delete at the new location. If the destination is unreachable when a job finishes (share offline, out of space), the files stay in the download folder and the job still completes normally. Empty = off. Per-category destinations route specific categories elsewhere (tv=/Volumes/NAS/TV, movies=/Volumes/NAS/Movies); each listed path is that category's folder, so no extra category subfolder is created inside it. Unlisted categories follow Move completed to.

Nested archive depth (default 5) is how many archive-in-archive layers are unpacked automatically: a RAR set containing a 7z containing another RAR is normal on Usenet, and nzbfast follows the chain without a second pass. At the limit the deepest archive is simply left in place, unpacked no further, and the download still completes. Raise it only for unusually deep releases.

Naming & cleanup live

Rename finished downloads (on by default) gives the folder and the main file a clean, informative name: a film becomes Example Movie (2024), TV keeps Show - S01E02. Obfuscated or unrecognised names are left exactly as posted rather than guessed at.

SettingWhat it does
Include resolutionAdds 1080p, 2160p… to the name. On by default; the other four tags are off.
Include video codecx265, x264, AV1
Include audio codecAtmos, DTS-HD, AC3
Include sourceBluRay, WEB, REMUX
Include release groupThe -GROUP tag at the end.
Remove junk filesOn by default. Deletes leftover .par2, .nzb, .sfv, .nfo and sample clips from finished film/TV folders. Never the video or its subtitles.
Keep only the media fileOff by default, and destructive: permanently deletes everything in the folder except the video(s) and subtitles. Every episode of a season pack is kept. Supersedes Remove junk files when both are on.

The whole group runs after repair and unpack and before Move completed to, and is skipped entirely for a job still waiting on a password. Both delete steps apply only to releases recognised as film or TV: a software payload or an unclassifiable (obfuscated) set is never swept.

Folders & processing

Download folder restart, watch folder, post-processing script (run after every job with SABnzbd-compatible arguments and SAB_* environment; existing SAB scripts work unchanged), cleanup extensions (junk files deleted after completion), Smart Folders and TV filing (see §10).

Indexing live

SettingWhat it does
GroupsNewsgroups the built-in indexer scans (e.g. alt.binaries.teevee).
Scan intervalSeconds between passes (default 900).
Backfill articlesHeaders fetched on a group's very first scan.
Deepen per scanEach pass also indexes this many older articles, growing your searchable history in the background until Max age is reached (default 200,000 per pass ≈ tens of millions of articles per day of uptime).
Max ageIgnore posts older than this (90d, 6m, 2y), capping index size and scan time.
Trim to the age windowOn by default. Also deletes already-stored releases once they age past Max age, so the index holds roughly that window instead of growing forever. Off = only new posts are gated, and what is already stored stays. Dead junk fragments (hidden, still incomplete after a week) are reaped either way.
Ingest gatesJSON rules filtering what enters the index: kinds (obfuscated junk is dropped by default), year/resolution/language, size bounds.
Scan now / deep rescanRun a pass immediately; with a depth, re-scan that many recent headers.
OMDb key / metadata refresh / wipeWall enrichment controls (§6). Wipe rebuilds the database from scratch: the recovery path if it is ever corrupted.

Library, Security, Interface

Library: categories treated as instant library entries + re-check interval. Security: the full API key (everything) and the NZB key (add-only, safe to give indexer sites), both rotatable live. Interface: click sounds, desktop notifications on completion, provider re-sort interval.

Speed units live decides how every speed in the dashboard is shown: megabytes (MB/s, the download-manager norm, the default) or megabits (Mb/s, how ISPs quote line speeds). File sizes stay in bytes either way. This is a property of the daemon, not of your browser, so it applies to every device looking at this install.

Advanced: settings with no dashboard control

Four settings have no UI control and no command-line flag. Set them through the API (§16), e.g. /api?mode=config&name=verify_mode&value=lean&apikey=…. Like every other setting they persist to settings.json.

NameWhat it does
verify_modefull | fast | lean (default fast). lean is the slow-CPU boost: like fast, but it also skips the per-article yEnc CRC once PAR2 covers a file, leaving one CRC32 layer instead of two. PAR2-less downloads keep their article CRCs, and end-of-job verification and repair are unchanged either way. The Fast verify tick above is the same control for full vs fast.
auto_retry_minsCooldown before the one automatic retry a first failure gets when articles were missing (default 20). Propagation lag is a real cause of missing articles and clears on its own; the journal makes the rerun fetch only what is still absent. Password and takedown failures never qualify.
index_scan_parHow many groups the indexer scans in parallel (default 3, clamped 1-8).
oracle_sampleIdle STAT budget for the availability oracle (§13), probes per hour per server. Default 300, max 3600, 0 disables sampling entirely.

10 · Automation

Watchlist

The simplest automation: add a title on the dashboard, set quality preferences, done. New releases are grabbed as they appear in your indexed groups; better-quality copies upgrade earlier grabs; a calendar view shows what's coming.

RSS feeds

Settings → RSS: any newznab/indexer RSS URL with per-feed interval, category and filter rules (title patterns, size bounds). Matching items are downloaded automatically.

Smart Folders

Rules evaluated when a job is added: match by pattern/keywords and size, assign a category (first match wins). With TV filing on, finished TV episodes are renamed and filed as Show/Season 01/Show - S01E02.mkv, ready for Plex or Jellyfin without an external tool.

Scheduler

The weekly schedule (see §9) automates pause/resume/speed by time of day.

Scripts

A post-processing script receives SABnzbd's positional arguments and SAB_* environment variables: the large ecosystem of SAB scripts runs as-is.

11 · Sonarr, Radarr & friends

nzbfast speaks the SABnzbd API natively, so every *arr works out of the box, and it can act as their indexer too.

As the download client

  1. In Sonarr/Radarr: Settings → Download Clients → add SABnzbd.
  2. Host: your nzbfast machine · Port: 6789 · API key: your full API key (Settings → Security; the QR/copy control is next to it).
  3. Category as desired (e.g. tv / movies). Test → green check → Save.

Queue, history, per-job status, "remove & delete", retry and category routing all behave as the *arrs expect.

As an indexer (newznab)

  1. Settings → Indexers → add Newznab.
  2. URL: http://<host>:6789/ · API path: /api · key: your API key.
  3. nzbfast serves caps, search, tvsearch and movie queries from its own index of your watched groups, and /getnzb/<id> hands back the NZB.
Why bother?A self-hosted indexer of exactly the groups you care about: no accounts, no API hit limits, retention as deep as you let it scan.

12 · Phone & remote apps

nzbfast implements both major remote-control protocols, so nearly every mobile/tablet app works. Pick whichever protocol your app supports:

Apps that speak NZBGet (nzb360, LunaSea, NZB Unity…)

Field in the appValue
TypeNZBGet
Host / portyour machine : 6789
Usernameanything (e.g. nzbfast)
Passwordyour API key

The full JSON-RPC surface these apps use is served: status, queue with reorder/pause/delete, history, add-NZB, speed limit, pause/resume, log.

Apps that speak SABnzbd

Field in the appValue
TypeSABnzbd
Host / portyour machine : 6789
API keyyour API key (or the NZB key for add-only access)

The dashboard on your phone

Just open http://<machine>:6789 in a mobile browser. The whole dashboard and wall have a touch layout. The Settings → Remote access panel shows the exact URLs and a QR code to scan.

13 · Performance tools

System benchmark

One click measures your three ceilings: network throughput (a real 8-second multi-connection probe), CPU verification rate, and disk write speed. It leads with the answer: your expected maximum download speed and which ceiling is the limit. The shortest bar is your bottleneck; the others show their headroom. Schedule it (6-hourly → weekly) and every run is logged to a history table, so you can see when your provider, ISP or hardware changed behaviour. Scheduled runs only happen while the queue is idle.

Connection tuning

Measures one provider at rising connection counts and recommends the setting: more sockets help until the provider or your line saturates, and some providers punish over-asking. Test all compares every provider, then bursts them all together to check the pool saturates your line.

Server diversity

STAT-samples articles across ages on every server and clusters providers by shared gaps: providers with ~100% shared missing articles are the same backbone (redundant for recovery); independent ones genuinely extend your coverage. Ends with a plain-language recommendation.

Automatic queue intelligence

The availability oracle

Takedowns are the main reason a Usenet download fails, and they are predictable: the same release goes missing on one backbone while another still has it. nzbfast keeps a small ledger of what your own providers actually answered for, and spends a tiny idle budget of STAT probes (a few hundred an hour per server, never during a download) to keep it current. It never downloads payload to find out.

What you get from it:

The verdict is a prediction from evidence, not a guarantee. For a hard answer on one NZB, nzbfast check (§15) counts the actual articles.

Memory budget: what low memory costs

All engine caches share one budget (default ¼ of physical RAM, clamped to 256 MB–16 GB). Set it explicitly with Memory limit in Settings, or --mem-limit on the command line.

nzbfast is built to soak your network and your disk at the same time, and RAM is what lets it do both in one pass: articles are decoded, verified and written straight to their final offsets, so archive volumes need never touch the disk at all. Starve it of memory and nothing breaks: every cache has a spill path, and the engine degrades to more disk I/O rather than swapping or failing. But that spill is not free, and on big jobs you can measure it.

Measured on one machine and one line (M1 Ultra, 10 GbE), same files at each budget. Every run produced a correct, fully verified, extracted result:

Job sizePlenty of RAM2 GB budget
≈ 8 GB machine
1 GB budget
≈ 4 GB machine
256 MB budget
≈ 2 GB NAS
7 GB15 s15 s15 s15 s
35 GB65 s70 s70 s65 s
87 GB148 s206 s +39%196 s +32%180 s +22%
190 GB330 s427 s +29%402 s +22%411 s +25%

Peak memory tracks the budget, not the job: that 190 GB download completes in about 1.1 GB of RAM. What you trade for it is time, and only on large jobs.

RecommendationGive nzbfast roughly 2 GB of budget per 100 GB of the largest job you download, and leave the default alone otherwise. ¼ of RAM is already the right answer on most machines. In practice: 4 GB RAM covers jobs up to ~35 GB at full speed; 8–16 GB keeps 100 GB-plus jobs there too; a 2 GB NAS will finish anything you throw at it, but treat it as a background downloader rather than something that will saturate a fast line.

On a small NAS, also drop Connections (2–4) along with the budget. At a 256 MB budget and 2 connections, peak memory stays near 190 MB, comfortably inside what a 2 GB NAS has spare. Be aware that at that point the connection count, not the memory, is what limits you: the same 35 GB job took 286 s instead of 65 s. That is the honest shape of the trade: it will always finish, and finish correctly; it just won't soak the line.

Benchmarks are re-run for each release; method and per-machine figures are published alongside the results.

14 · Updates

15 · Command line

Everything the daemon does is also scriptable. The everyday commands:

CommandPurpose
nzbfast setupInteractive server setup.
nzbfast serveRun the daemon (dashboard + API + automation). --open opens the browser; see --help for the full flag list; every dashboard setting has a flag twin.
nzbfast get file.nzbDownload one NZB, full pipeline, no daemon. --preflight aborts early if the post can't complete; --password for encrypted sets.
nzbfast check file.nzbAvailability verdict (COMPLETE / REPAIRABLE / IMPOSSIBLE) without downloading payload.
nzbfast verify DIRVerify files against the PAR2 set in a directory.
nzbfast sysbenchThe system benchmark + diversity report, in the terminal.
nzbfast index / searchScan groups into the index / search it, without the daemon.
nzbfast import-sabImport servers from a SABnzbd ini.

Also available: inspect, probe, bench, bench-cpu, soak, fetch, spots/spot-search/spot-get (Spotnet), make-release-nzb/make-test-nzb (test fixtures), and post (uploads files as yEnc articles and writes the matching NZB; an operations tool, it requires an explicit --post-server and never picks a server for you). Every command takes --config and --help.

16 · API overview

Base endpoint: http://host:6789/api?mode=…&apikey=…&output=json. It is SABnzbd-compatible, so existing SAB integrations work unchanged. Two keys: the API key (full control) and the NZB key (add-only: addfile/addurl).

AreaModes
Queuequeue (with name=delete/pause/resume/priority/switch), pause, resume, addfile, addurl, retry, set_password
Infohistory, status/fullstatus, stats, version, server_stats, usage, log, warnings
Configget_config, config&name=<setting>&value=… (every Settings field), server_save/delete/test/enable/reorder, import_probe/apply
Index & wallindex_search, index_get, index_stats, index_scan_now, wall, wall_search/fix/refresh/art, plus newznab at /api?t=caps|search|tvsearch|movie and /getnzb/<id>
Automationwatchlist, watchlist_check_now, watch_calendar, feeds, smart_folders, schedule
Diagnosticssysbench, bench_history, connladder, pooltest, diversity, update_check, update_apply
NZBGet JSON-RPC/jsonrpc: status, listgroups, history, append, editqueue, rate, pause, log (Basic auth: any user, API key as password)
Preview / playback/stream/<nzo_id> (HTTP ranges; starting a parked library job needs ?t= token or key), /m3u/<id> (needs key; mints the token), /wall, /art/…

17 · Files & locations

FileContents
config.local.jsonServer credentials and per-server options. Created by the wizard; editable in Settings. Keep it private.
settings.jsonEvery setting changed in the dashboard. Lives next to the config; UI values override command-line flags. Delete a key (or the file) to fall back to flags/defaults.
index.dbThe release index (SQLite) + wall metadata. Safe to delete: it rebuilds from scanning (Settings → Indexing → Wipe does this for you).
<config>/.spool/Queue state (survives restarts), per-job NZBs, usage ledger, benchmark history, poster art cache.
Article journalInside each job's output folder while incomplete; powers crash resume and retry. Removed on success.
External toolsNone needed: RAR extraction and PAR2 repair are native. If an exotic set ever needs an external unrar or par2 as a fallback, nzbfast looks next to its executable, then on $PATH.

18 · Troubleshooting

SymptomCheck
Slow downloadsRun System benchmark; it names the bottleneck outright. If it's network: run Connection tuning, check per-server connection counts, and confirm your providers aren't all one backbone (Server diversity).
Slow only on very large jobs
(NAS or low-RAM machine)
Expected, and measurable: a starved memory budget spills caches to disk and costs 20–40% past ~87 GB. See Memory budget for the figures and how much RAM to give it. Smaller jobs are unaffected.
Download fails "articles missing"The post has expired or was taken down on your providers. A second provider on a different backbone rescues most of these. nzbfast check predicts this before downloading, and the wall's availability dot (§13) flags the likely-gone ones in advance. A first failure of this shape retries itself once after a cooldown, since propagation lag looks identical and clears on its own.
Finished archive wants a passwordHistory row shows 🔑: enter the password there; the job completes in place.
Sonarr/Radarr can't connectPort 6789 reachable? API key correct (full key, not NZB key)? Client type set to SABnzbd?
Browse card stays smallThe indexer grows in the background. Check Settings → Indexing groups are set, and give Deepen per scan time to accumulate history. "Scan now" forces a pass; the status line shows live progress.
Wall shows wrong/no artworkDetail sheet → ✎ Fix match or ↻ Refresh metadata. Movie lookups improve with a free OMDb key.
Daemon won't start: port in useAnother instance is running, or change --port.
Where are the logs?The Log card on the dashboard, or the terminal/logfile you launched serve with.
Still stuck?The Log card usually names the culprit - include its tail when reporting an issue, along with your nzbfast --version.

This manual ships with every release. Settings, endpoints and defaults referenced here match the version it shipped with.