The Configuration Editor provides a user-friendly interface for managing Torrentarr's configuration through the WebUI. All changes are saved to the config.toml file and can trigger live reloads of affected components without requiring a full application restart.
The Configuration Editor replaces manual TOML editing with a structured form interface featuring:
- Organized Sections: Core settings, WebUI, qBittorrent, and per-instance Arr configurations
- Live Validation: Real-time field validation with helpful error messages
- Intelligent Reload: Automatic detection of which components need reloading after save
- Visual Feedback: Dirty state tracking, save confirmation, and unsaved changes warnings
- Theme Support: Live theme switching without page reload
Navigate to the Config page via the WebUI sidebar:
http://<host>:6969/ui → Config
Authentication: If WebUI.Token is set, you must authenticate before accessing this page (Bearer token in Authorization header or cookie).
The editor is organized into three primary sections accessible via summary cards:
Core application configuration including logging, disk space management, loop timers, and auto-update settings.
Key Fields:
- Console Level: Log verbosity (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG, TRACE)
- Logging: Enable writing logs to files (
~/logs/or/config/logs) - Completed Download Folder: Path where qBit completes downloads (must match Arr's path)
- Free Space: Desired free space threshold (e.g.,
50G,-1to disable) - Free Space Folder: Directory to monitor for free space checks
- Auto Pause/Resume: Automatically pause torrents when disk space is low
- No Internet Sleep Timer (s): Delay before retrying when connectivity is lost
- Loop Sleep Timer (s): Interval between torrent processing passes
- Search Loop Delay (s): Delay between automated search requests
- Failed Category: qBit category for marking failed torrents
- Recheck Category: qBit category triggering force recheck
- Tagless: Enable operation without relying on Arr tags
- Ignore Torrents Younger Than (s): Grace period for new torrents before evaluation
- Ping URLs: Comma-separated hostnames for connectivity checks (e.g.,
one.one.one.one, dns.google.com) - FFprobe Auto Update: Automatically download/update bundled ffprobe binary
- Auto Update Enabled: Enable background auto-update worker
- Auto Update Cron: Cron expression for update checks (default:
0 3 * * 0= Sundays at 3 AM)
Example:
[Settings]
ConsoleLevel = "INFO"
Logging = true
CompletedDownloadFolder = "/mnt/downloads"
FreeSpace = "100G"
FreeSpaceFolder = "/mnt/downloads"
AutoPauseResume = true
NoInternetSleepTimer = 300
LoopSleepTimer = 30
SearchLoopDelay = 60
FailedCategory = "failed"
RecheckCategory = "recheck"
Tagless = false
IgnoreTorrentsYoungerThan = 600
PingURLS = ["one.one.one.one", "dns.google.com"]
FFprobeAutoUpdate = true
AutoUpdateEnabled = true
AutoUpdateCron = "0 3 * * 0"Validation:
CompletedDownloadFoldermust not be empty orCHANGE_MEFreeSpacemust be-1or a number with optional suffix (K, M, G, T, P)FreeSpaceFolderrequired whenFreeSpace != "-1"- All timer fields must be non-negative numbers
AutoUpdateCronmust contain 5 or 6 space-separated fields
WebUI server configuration including host, port, token, theme, and view preferences.
Key Fields:
- WebUI Host: Bind address (default:
0.0.0.0for all interfaces) - WebUI Port: Port number (default:
6969, range: 1-65535) - WebUI Token: Optional bearer token for API/UI authentication (auto-generated if empty)
- Live Arr: Enable real-time Arr data (bypasses database cache, increases API load)
- Group Sonarr by Series: Group episodes by series and seasons in collapsible sections
- Theme: Visual theme (
LightorDark) — changes apply immediately
Example:
[WebUI]
Host = "0.0.0.0"
Port = 6969
Token = "abc123def456..."
LiveArr = false
GroupSonarr = true
Theme = "Dark"Validation:
Hostmust not be emptyPortmust be between 1 and 65535Tokenaccepts any string (empty = no authentication)
Special Behavior:
- Theme: Changes apply immediately via JavaScript (no save required)
- Host/Port/Token: Trigger WebUI restart after save
qBittorrent connection details and qBit-managed categories.
Key Fields:
- Disabled: Disable Torrentarr's qBittorrent integration (headless search-only mode)
- Host: qBittorrent WebUI host or IP address
- Port: qBittorrent WebUI port (default: 8080)
- UserName: qBittorrent WebUI username (optional if auth bypassed)
- Password: qBittorrent WebUI password (optional if auth bypassed)
- Managed Categories: Tag-based input for categories managed directly by qBit (independent of Arr instances)
Managed Categories:
This field allows qBittorrent to manage categories with custom seeding settings, independent of Radarr/Sonarr/Lidarr. Use this for torrents not managed by Arr instances (e.g., manually added torrents, private tracker downloads).
- Tag Input UI: Add categories by typing and pressing Enter or comma
- Visual Tags: Categories display as removable chips/tags
- Quick Removal: Click × on any tag to remove it
- Category Validation: System prevents conflicts between Arr-managed and qBit-managed categories
Example:
[qBit]
Disabled = false
Host = "localhost"
Port = 8080
UserName = "admin"
Password = "adminpass"
ManagedCategories = ["downloads", "private-tracker", "manual"]Validation:
Hostmust not be emptyPortmust be between 1 and 65535ManagedCategoriescannot overlap with Arr instance categories
Each Radarr, Sonarr, or Lidarr instance is configured independently via dedicated modal dialogs.
Adding Instances:
- Click Add Instance button under "Radarr Instances" or "Sonarr Instances"
- New instance created with default name (e.g.,
Radarr-1,Sonarr-2) - Instance opens automatically for configuration
Deleting Instances:
- Click Delete button on instance card
- Confirm deletion (cannot be undone)
- Instance removed from config and UI
Renaming Instances:
- Open instance modal
- Edit Display Name field
- Press Enter or blur field to apply
- Instance key updated in config (e.g.,
Radarr-1→Radarr-4K) - Automatic Cleanup: Old section and all subsections are automatically removed when you save
Important: The system now explicitly tracks renamed instances to ensure complete cleanup:
- All old configuration keys are marked for deletion
- Subsections (Search, Torrent, SeedingMode, Trackers) are automatically removed
- No orphaned config sections remain after rename
Key Fields:
- Display Name: Friendly name for this instance (also used as config key)
- Managed: Toggle whether Torrentarr actively manages this instance
- URI: Arr instance URL (e.g.,
http://localhost:7878) - API Key: Arr API key from Settings → General → Security
- Category: qBittorrent category applied by this Arr instance
- Re-search: Re-run searches for failed torrents after Torrentarr removes them
- Import Mode: Preferred import mode (
Move,Copy, orAuto) - RSS Sync Timer (min): Interval between RSS sync requests (0 = disabled)
- Refresh Downloads Timer (min): Interval between queue refresh requests (0 = disabled)
- Arr Error Codes To Blocklist: Comma-separated list of Arr error messages triggering blocklist
Example:
[Radarr-4K]
Managed = true
URI = "http://localhost:7878"
APIKey = "abc123..."
Category = "radarr-4k"
ReSearch = true
ImportMode = "Auto"
RssSyncTimer = 5
RefreshDownloadsTimer = 5
ArrErrorCodesToBlocklist = [
"Not an upgrade for existing movie file(s)",
"Not a preferred word upgrade for existing movie file(s)",
"Unable to determine if file is a sample"
]Validation:
URIandAPIKeyrequired whenManaged = trueCategorymust not be empty- Timer fields must be non-negative numbers
Configure automated searching for missing media, quality upgrades, and request integrations.
Search Behavior:
- Search Missing: Search for missing media items
- Also Search Specials (Sonarr only): Include season 0 specials
- Unmonitored: Include unmonitored items in searches
- Do Upgrade Search: Search for improved releases even if file exists
- Quality Unmet Search: Re-search when quality requirements not met
- Custom Format Unmet Search: Re-search when custom format score too low
- Force Minimum Custom Format: Auto-remove torrents not meeting minimum custom format score
Search Configuration:
- Search Limit: Maximum concurrent search tasks (default: 5)
- Search By Year: Order searches by release year
- Search In Reverse: Reverse search order (oldest → newest)
- Search Requests Every (s): Delay between individual search requests (default: 300)
- Search Again On Completion: Restart search loop after exhausting year range
Quality Profiles:
- Use Temp Profile For Missing: Switch to temporary profiles when searching
- Keep Temp Profile: Don't revert to main profile after using temp profile
- Main Quality Profile: Comma-separated primary profile names
- Temp Quality Profile: Comma-separated temporary profile names (paired with main profiles)
Sonarr-Specific:
- Search By Series: Strategy for episode searches (
smart,true,false)smart= auto (series search for multiple episodes, episode search for single)true= always search entire seriesfalse= always search individual episodes
- Prioritize Today's Releases: Prioritize items released today (RSS-style)
Example:
[Radarr-4K.Search]
SearchMissing = true
Unmonitored = false
SearchLimit = 5
SearchByYear = true
SearchInReverse = false
SearchRequestsEvery = 300
DoUpgradeSearch = false
QualityUnmetSearch = false
CustomFormatUnmetSearch = false
ForceMinimumCustomFormat = false
SearchAgainOnSearchCompletion = true
UseTempForMissing = false
KeepTempProfile = false
MainQualityProfile = []
TempQualityProfile = []Validation:
SearchLimitmust be at least 1SearchRequestsEverymust be at least 1 second
Integrate Ombi to automatically search for pending requests.
Key Fields:
- Search Ombi Requests: Enable Ombi integration
- Ombi URI: Ombi server URL (e.g.,
http://localhost:5000) - Ombi API Key: Ombi API key
- Approved Only: Only process approved requests
- Is 4K Instance: Treat this config as 4K-specific
Example:
[Radarr-4K.Search.Ombi]
SearchOmbiRequests = true
OmbiURI = "http://localhost:5000"
OmbiAPIKey = "ombi_key_here"
ApprovedOnly = true
Is4K = trueIntegrate Overseerr/Jellyseerr to automatically search for pending requests.
Key Fields:
- Search Overseerr Requests: Enable Overseerr integration
- Overseerr URI: Overseerr server URL (e.g.,
http://localhost:5055) - Overseerr API Key: Overseerr API key
- Approved Only: Only process approved requests
- Is 4K Instance: Treat this config as 4K-specific
Example:
[Radarr-4K.Search.Overseerr]
SearchOverseerrRequests = true
OverseerrURI = "http://localhost:5055"
OverseerrAPIKey = "overseerr_key_here"
ApprovedOnly = true
Is4K = trueConfigure how Torrentarr evaluates and manages torrents.
File Filtering:
- Case Sensitive Matches: Enable case-sensitive regex matching
- Folder Exclusion Regex: Comma-separated regex patterns to exclude folders (e.g.,
\bextras?\b, \bsamples?\b) - File Name Exclusion Regex: Comma-separated regex patterns to exclude files (e.g.,
\bsample\b, \btrailer\b) - File Extension Allowlist: Comma-separated allowed extensions (e.g.,
.mp4, .mkv, .srt) — empty = allow all
Torrent Health:
- Auto Delete: Automatically delete unrecognized files
- Ignore Torrents Younger Than (s): Grace period before evaluating torrents (default: 600)
- Maximum ETA (s): Torrents with ETA above this are considered stalled (default: 604800 = 7 days)
- Maximum Deletable Percentage: Upper bound completion % for deletion (0.99 = 99%)
- Do Not Remove Slow: Ignore slow torrents when pruning
- Stalled Delay (min): Minutes to allow stalled torrents before action (-1 = disabled, 0 = infinite)
- Re-search Stalled: Re-run searches for stalled torrents
Tracker Management:
- Remove Dead Trackers: Remove trackers flagged as dead
- Remove Tracker Messages: Comma-separated tracker status messages triggering removal (e.g.,
skipping tracker announce (unreachable))
Example:
[Radarr-4K.Torrent]
CaseSensitiveMatches = false
FolderExclusionRegex = ["\\bextras?\\b", "\\bsamples?\\b"]
FileNameExclusionRegex = ["\\bsample\\b", "\\btrailer\\b"]
FileExtensionAllowlist = [".mp4", ".mkv", ".sub", ".srt"]
AutoDelete = false
IgnoreTorrentsYoungerThan = 600
MaximumETA = 604800
MaximumDeletablePercentage = 0.99
DoNotRemoveSlow = true
StalledDelay = 15
ReSearchStalled = false
RemoveDeadTrackers = false
RemoveTrackerWithMessage = ["skipping tracker announce (unreachable)", "No such host is known"]Validation:
- All numeric fields must be non-negative
MaximumDeletablePercentagemust be between 0 and 100
Configure per-instance seeding policies.
Key Fields:
- Download Rate Limit Per Torrent: Bytes/s download limit (-1 = unlimited)
- Upload Rate Limit Per Torrent: Bytes/s upload limit (-1 = unlimited)
- Max Upload Ratio: Maximum upload ratio (-1 = unlimited)
- Max Seeding Time (s): Maximum seeding duration (-1 = unlimited)
- Remove Torrent (policy): Removal policy:
-1= do not remove1= remove on ratio2= remove on time3= remove on ratio OR time4= remove on ratio AND time
Example:
[Radarr-4K.Torrent.SeedingMode]
DownloadRateLimitPerTorrent = -1
UploadRateLimitPerTorrent = -1
MaxUploadRatio = 2.0
MaxSeedingTime = 604800
RemoveTorrent = 3Validation:
- All fields must be -1 or greater
RemoveTorrentmust be -1, 1, 2, 3, or 4
Define custom per-tracker seeding policies and tagging rules.
Key Fields:
- Name: Tracker name (for display purposes)
- URI: Tracker URL (used for matching)
- Priority: Tracker priority (higher = preferred)
- Sort Torrents: Reorder matching torrents in qBittorrent queue by tracker priority
- Maximum ETA (s): Override global ETA limit for this tracker
- Download Rate Limit: Override global download limit
- Upload Rate Limit: Override global upload limit
- Max Upload Ratio: Override global upload ratio
- Max Seeding Time (s): Override global seeding time
- Add Tracker If Missing: Automatically add this tracker to matching torrents
- Remove If Exists: Remove torrents from this tracker
- Super Seed Mode: Enable super seeding for this tracker
- Add Tags: Comma-separated tags to apply to torrents from this tracker
Example:
[[Radarr-4K.Torrent.Trackers]]
Name = "Premium Tracker"
URI = "https://premium.tracker.com/announce"
Priority = 10
SortTorrents = false
MaximumETA = 86400
DownloadRateLimit = -1
UploadRateLimit = -1
MaxUploadRatio = 3.0
MaxSeedingTime = 1209600
AddTrackerIfMissing = false
RemoveIfExists = false
SuperSeedMode = false
AddTags = ["premium"]Validation:
NameandURIrequired- All numeric fields must be non-negative or -1
UI Features:
- Add Tracker: Click "+ Add Tracker" to create new tracker config
- Delete Tracker: Click trash icon on tracker card to remove
- Collapsible Cards: Each tracker is a collapsible card showing name in header
Standard text field for strings.
<input type="text" value="..." />Numeric field with spinner controls.
<input type="number" value="42" />Toggle boolean values.
<input type="checkbox" checked />Masked text field (shows bullets).
<input type="password" value="***" />Special field for API keys and tokens with:
- Visibility Toggle: Show/hide value
- Refresh Button: Generate new random key (32-character hex)
Example: WebUI.Token, Arr.APIKey, Ombi.OmbiAPIKey
Dropdown for predefined options (using react-select with theme-aware styling).
Examples:
- Console Level:
CRITICAL,ERROR,WARNING,NOTICE,INFO,DEBUG,TRACE - Import Mode:
Move,Copy,Auto - Theme:
Light,Dark - Search By Series (Sonarr):
smart,true,false
Interactive chip/tag-based input for managing arrays of strings.
Features:
- Visual Tags: Values display as styled chips with × remove buttons
- Quick Add: Type and press Enter or comma to add new tags
- Backspace Delete: Press Backspace on empty input to remove last tag
- Duplicate Prevention: Automatically prevents adding duplicate values
- Theme Support: Tags styled according to current theme
Examples:
- Managed Categories (qBit):
["downloads", "private-tracker", "manual"] - Arr Error Codes To Blocklist:
["Not an upgrade", "Unable to determine if sample"]
Usage:
- Click in the input field
- Type a category name (e.g.,
downloads) - Press Enter or comma to add the tag
- Click × on any tag to remove it
- Press Backspace with empty input to remove the last tag
The editor validates fields on change and before save, displaying inline error messages.
Validation Types:
- Type Validation: Ensure value matches expected type (string, number, boolean)
- Range Validation: Check numeric fields fall within valid ranges (e.g., port 1-65535)
- Conditional Validation: Some fields required only when related fields are set
- Custom Validation: Field-specific logic (e.g., cron expression format)
| Field | Rule |
|---|---|
CompletedDownloadFolder |
Must not be empty or CHANGE_ME |
FreeSpace |
Must be -1 or number with optional K/M/G/T/P suffix |
FreeSpaceFolder |
Required when FreeSpace != "-1" |
WebUI.Port, qBit.Port |
Must be 1-65535 |
Arr.URI |
Required when Arr.Managed = true |
Arr.APIKey |
Required when Arr.Managed = true |
Arr.Category |
Must not be empty |
Search.SearchLimit |
Must be ≥ 1 |
AutoUpdateCron |
Must contain 5 or 6 space-separated fields |
Torrent.MaximumDeletablePercentage |
Must be 0-100 |
Torrent.SeedingMode.RemoveTorrent |
Must be -1, 1, 2, 3, or 4 |
Validation errors are displayed:
- Inline: Below affected field with red text
- On Save: Modal alert with all errors listed
Example Error:
WebUI.Port: WebUI Port must be between 1 and 65535.
Radarr-4K.URI: URI must be set to a valid URL when the instance is managed.
When you click Save + Live Reload:
- Client-Side Validation: All fields validated; save blocked if errors exist
- Change Detection: Compares current form state vs. original config
- Diff Calculation: Generates minimal change set (only modified fields)
- API Request:
POST /api/configwith{"changes": {...}} - Server-Side Validation: Backend validates and persists to
config.toml - Reload Detection: Server determines which components need reloading
- Reload Execution: Server reloads affected components
- Response: Success message with reload type
The backend uses intelligent reload detection to minimize disruption:
| Change Type | Reload Type | Behavior |
|---|---|---|
Frontend-only (WebUI.Theme, WebUI.LiveArr, WebUI.GroupSonarr) |
frontend |
No reload (changes apply in browser) |
WebUI Server (WebUI.Host, WebUI.Port, WebUI.Token) |
webui |
Restart WebUI server (brief downtime) |
Single Arr Instance (e.g., Radarr-4K.*) |
single_arr |
Reload only that Arr instance |
Multiple Arr Instances (e.g., Radarr-4K.* + Sonarr-TV.*) |
multi_arr |
Reload each affected instance sequentially |
Global Settings (Settings.*, qBit.*) |
full |
Reload all components (entire manager) |
{
"status": "ok",
"configReloaded": true,
"reloadType": "single_arr",
"affectedInstances": ["Radarr-4K"]
}Response Headers:
X-Config-Reloaded: true
Cache-Control: no-cache, no-store, must-revalidate
The following keys cannot be modified via the WebUI:
Settings.ConfigVersion(managed automatically by migration system)
Attempts to modify protected keys return 403 Forbidden.
Configuration modals now preserve their state when you switch tabs or windows:
Persistent State:
- Open Modals: Remain open when switching between tabs or minimizing the browser
- Entered Data: All field values are preserved across tab switches
- Unsaved Changes: Maintained even if you switch to another application
Benefits:
- Fill out long configuration forms without losing progress
- Reference other applications while configuring
- Switch tabs to check settings in other systems
- Resume configuration exactly where you left off
Note: Modal state is preserved only within the Config tab. Navigating to a different WebUI page (Processes, Logs, etc.) will close modals as expected.
The editor tracks whether unsaved changes exist:
Indicators:
- Save Button State: Enabled when changes exist, disabled when clean
- Browser Warning: "You have unsaved changes" prompt if navigating away
- Visual Feedback: No explicit "unsaved changes" banner (rely on button state)
Change Detection:
- Compares flattened current state vs. original state
- Detects added, modified, and removed keys
- Array fields compared via JSON serialization
Escape Routes:
- Save: Apply changes and clear dirty state
- Reload: Refresh page to discard changes (browser prompts confirmation)
- Escape: Close any open modal
- Enter: Commit changes (on rename fields)
- Escape: Revert to original value (on rename fields)
Hover over field labels to see tooltips with detailed descriptions (defined in webui/src/config/tooltips.ts).
Example:
"Settings.FreeSpace": "Desired free space threshold (use K, M, G, T suffix). Set to -1 to disable the free space guard."Below each field is a short auto-generated description:
- Checkbox: "Enable or disable {label}."
- Other: "Set the {label} value."
For complex fields, custom descriptions override the default (e.g., Search.SearchBySeries shows strategy options).
Fetch current configuration from disk.
Endpoint: GET /api/config
Authentication: Required (Bearer token)
Response:
{
"Settings": {
"ConsoleLevel": "INFO",
"Logging": true,
"CompletedDownloadFolder": "/mnt/downloads",
...
},
"WebUI": {
"Host": "0.0.0.0",
"Port": 6969,
...
},
"qBit": {
"Host": "localhost",
"Port": 8080,
...
},
"Radarr-4K": {
"Managed": true,
"URI": "http://localhost:7878",
...
},
...
}Error:
{
"error": "Failed to load configuration"
}Apply changes to configuration and trigger reload.
Endpoint: POST /api/config
Authentication: Required (Bearer token)
Request Body:
{
"changes": {
"Settings.LoopSleepTimer": 60,
"Radarr-4K.Search.SearchLimit": 10,
"WebUI.Theme": "Dark"
}
}Dotted Key Format: Use dot notation for nested keys (e.g., Radarr-4K.Torrent.AutoDelete).
Deletion: Set value to null to delete key (e.g., {"WebUI.Token": null}).
Response:
{
"status": "ok",
"configReloaded": true,
"reloadType": "multi_arr",
"affectedInstances": ["Radarr-4K"]
}Validation Error:
{
"error": "Please resolve the following issues:\nWebUI.Port: WebUI Port must be between 1 and 65535."
}Protected Key Error:
{
"error": "Cannot modify protected configuration key: Settings.ConfigVersion"
}Test connection to Arr instance without saving configuration.
Endpoint: POST /api/arr/test-connection
Authentication: Required (Bearer token)
Request Body:
{
"arrType": "radarr",
"uri": "http://localhost:7878",
"apiKey": "abc123..."
}Response (Success):
{
"success": true,
"version": "4.3.2.6857",
"qualityProfiles": [
{"id": 1, "name": "HD-1080p"},
{"id": 4, "name": "Ultra-HD"}
]
}Response (Failure):
{
"success": false,
"message": "Connection refused"
}- Navigate to Config page
- Scroll to Radarr Instances section
- Click Add Instance
- Instance modal opens with default name (
Radarr-1,Radarr-2, etc.) - Configure fields:
- Rename instance (e.g.,
Radarr-4K) - Set URI (e.g.,
http://localhost:7878) - Set API Key (copy from Radarr Settings → General → Security)
- Set Category (e.g.,
radarr-4k)
- Rename instance (e.g.,
- Configure optional settings (Entry Search, Torrent, Seeding, Trackers)
- Close modal
- Click Save + Live Reload
- New Radarr instance starts managing downloads
- Navigate to Config page
- Click Configure on Settings card
- Change Loop Sleep Timer (s) (e.g.,
30→60) - Close modal
- Click Save + Live Reload
- Backend performs full reload (all instances restart)
- Navigate to Config page
- Click Configure on Web Settings card
- Change WebUI Port (e.g.,
6969→8080) - Close modal
- Click Save + Live Reload
- WebUI server restarts on new port
- Browser redirects to
http://<host>:8080/ui
- Navigate to Config page
- Click Configure on Web Settings card
- Change Theme dropdown (
Light/Dark) - Theme applies immediately (no save required)
- Close modal
- Optional: Click Save + Live Reload to persist theme preference
- Open Radarr/Sonarr instance modal
- Scroll to Request Integration: Ombi section
- Enable Search Ombi Requests
- Set Ombi URI (e.g.,
http://localhost:5000) - Set Ombi API Key (copy from Ombi Settings → API)
- Enable Approved Only (recommended)
- Set Is 4K Instance (if applicable)
- Close modal
- Click Save + Live Reload
- Torrentarr begins polling Ombi for pending requests
- Open Radarr/Sonarr instance modal
- Scroll to Trackers section
- Click Add Tracker
- New tracker card appears
- Configure tracker:
- Name:
IPTorrents - URI:
https://iptorrents.com/announce.php - Priority:
10 - Max Upload Ratio:
2.0 - Add Tags:
ipt
- Name:
- Repeat for additional trackers
- Close modal
- Click Save + Live Reload
- Tracker rules apply to matching torrents
Symptom: Loading spinner never disappears
Causes:
- Invalid TOML Syntax: Config file has syntax errors
- Permission Issues: Torrentarr cannot read
config.toml - WebUI Token: Token mismatch or missing authentication
Solutions:
- Check browser console for API errors
- Verify
config.tomlsyntax:toml-lint ~/config/config.toml - Check file permissions:
ls -la ~/config/config.toml - Regenerate token: Remove
WebUI.Tokenfrom config, restart Torrentarr
Symptom: Save button completes but changes not reflected after reload
Causes:
- Validation Errors: Silent validation failures
- Write Permissions: Torrentarr cannot write to
config.toml - Config Version Mismatch: Automatic migration overwrites changes
Solutions:
- Check for validation error messages on page
- Verify write permissions:
touch ~/config/config.toml && rm ~/config/config.toml - Check logs for migration warnings:
tail -f ~/logs/Main.log
Symptom: Save succeeds but components don't reload
Causes:
- Wrong Reload Type: Frontend-only changes don't reload backend
- Instance Not Found: Renamed instance doesn't exist in manager
- Process Crashed: Arr instance crashed during reload
Solutions:
- Check response JSON for
reloadTypeandaffectedInstances - Verify instance exists: Check Processes page
- Check logs:
tail -f ~/logs/Main.logand~/logs/<ArrName>.log
Symptom: Clicking outside modal doesn't close it
Causes:
- Unsaved Changes: No warning but modal remains open
- JavaScript Error: React component error prevents close
Solutions:
- Press Escape key to force close
- Check browser console for React errors
- Refresh page to reset state
Symptom: Field shows error even after correcting value
Causes:
- Dependent Fields: Another field still invalid
- Cache Issue: React state not updating
- Conditional Validation: Related field triggers validation
Solutions:
- Review all error messages (may be multiple)
- Refresh page to reset validation state
- Check related fields (e.g.,
FreeSpace→FreeSpaceFolder)
Symptom: After changing WebUI.Port, cannot access WebUI
Causes:
- Port Already In Use: Another service using target port
- Firewall Blocking: Firewall blocks new port
- WebUI Restart Failed: Server crashed during restart
Solutions:
- Check logs:
tail -f ~/logs/WebUI.log - Verify port availability:
netstat -tulpn | grep <port> - Edit config manually:
nano ~/config/config.toml, revert port - Restart Torrentarr:
systemctl restart torrentarr(systemd) or restart Docker container
- Test Arr Connections: Use
/api/arr/test-connectionendpoint (future feature) before saving - Incremental Changes: Make small changes and test before bulk updates
- Backup Config: Keep a backup copy of
config.tomlbefore major changes - Monitor Logs: Watch logs during/after config changes to catch issues
- Avoid Direct Edits: Use WebUI instead of manual TOML editing (prevents syntax errors)
- Theme Changes: Theme is the only setting that applies without save
- Global vs. Instance: Understand which changes trigger full reload vs. instance reload
- Secure Fields: Use refresh button to generate strong random keys
- Tracker Priorities: Higher priority trackers preferred when multiple matches exist
- Validation First: Fix all validation errors before attempting save
- Configuration File Reference – Manual TOML editing guide
- Environment Variables – Environment-based configuration
- Quality Profiles – Setting up quality profiles
- Processes Page – Monitor Arr instance health
- Logs Page – View configuration reload logs
- WebUI Overview – Introduction to the WebUI
- Arr Views – Browse Radarr/Sonarr/Lidarr libraries
- First Run Guide – Initial configuration walkthrough
- Migration Guide – Upgrading from older configs