Skip to main content

Module Reference

Auto-generated

This page is generated from apps/backend/src/modules/module-registry/manifests.ts at build time. Do not edit it by hand — change the source and rebuild. This guarantees the reference always matches the code that ships.

UltraTorrent is built as a module registry. Each module declares a manifest — its id, whether it is required, its dependencies, the permissions it introduces and the API routes it owns. The registry resolves the dependency graph at boot and refuses to start on an unknown or circular dependency, so a broken module can never half-load.

  • 27 modules — 23 required, 4 optional.
  • Required modules are always on and cannot be switched off. Optional modules can be toggled, and a few ship off by default.

Dependency graph​

All modules​

ModuleIdRequiredOn by defaultDepends on
Authenticationauth✅✅—
Access control (RBAC)rbac✅✅auth
Account & securityaccount✅✅auth
Usersusers✅✅auth, rbac
Torrent engineengine✅✅auth
Dashboarddashboard✅✅auth, engine
Torrentstorrents✅✅auth, engine
Searchsearch✅✅auth
Categories & tagstaxonomy✅✅auth
RSS automationrss✅✅auth, engine
Automationautomation✅✅auth, engine
File managerfiles✅✅auth
API keysapi_keys✅✅auth
Notificationsnotifications✅✅auth, rbac
Audit logaudit✅✅auth
System healthsystem✅✅—
Settingssettings✅✅auth
Operations (Console API)operations✅✅auth
Module registrymodule_registry✅✅auth, rbac
Media Managermedia_manager—✅auth, files
Release Scoringrelease_scoring—✅auth, rss
Media Acquisition Intelligencemedia_acquisition_intelligence—✅auth, rbac, module_registry, audit, settings, rss, automation, release_scoring
Media Discoverymedia_discovery——auth, rbac, module_registry, audit, settings, media_manager, media_acquisition_intelligence, media_intake, rss
Media Server Analyticsmedia_server_analytics✅✅auth, rbac, module_registry, audit, settings, media_manager, automation
Subtitle Intelligencesubtitle_intelligence✅✅auth, rbac, files, audit, settings, media_manager
Library Cleanup Centerlibrary_cleanup✅✅auth, rbac, files, audit, settings, media_manager
Media Intake Enginemedia_intake✅✅media_manager, torrents

Authentication​

auth · required · enabled by default

Login, sessions, refresh-token rotation.

Owns routes: /api/auth

Access control (RBAC)​

rbac · required · enabled by default

Roles, permissions, and route guards.

Depends on: auth

Introduces permissions: roles.manage

Account & security​

account · required · enabled by default

Self-service profile, password, and 2FA.

Depends on: auth

Owns routes: /api/account

Users​

users · required · enabled by default

User management and role assignment.

Depends on: auth, rbac

Introduces permissions: users.view, users.manage

Owns routes: /api/users

Torrent engine​

engine · required · enabled by default

Engine provider abstraction (rTorrent) + registry.

Depends on: auth

Introduces permissions: system.view, engines.manage

Owns routes: /api/engines

Dashboard​

dashboard · required · enabled by default

Aggregated stats and recent activity.

Depends on: auth, engine

Introduces permissions: torrents.view

Owns routes: /api/dashboard

Torrents​

torrents · required · enabled by default

Torrent list, detail, lifecycle, bulk actions.

Depends on: auth, engine

Introduces permissions: torrents.view, torrents.add, torrents.delete

Owns routes: /api/torrents

search · required · enabled by default

Search persisted torrent snapshots.

Depends on: auth

Introduces permissions: torrents.view

Owns routes: /api/search

Categories & tags​

taxonomy · required · enabled by default

Organise torrents with categories and tags.

Depends on: auth

Introduces permissions: categories.manage, tags.manage

Owns routes: /api/categories, /api/tags

RSS automation​

rss · required · enabled by default

Feeds, ranked match candidates, and the Smart Match Builder.

Depends on: auth, engine

Introduces permissions: rss.view, rss.manage, rss.show_status.lookup, rss.show_status.refresh, rss.show_status.override

Owns routes: /api/rss

Automation​

automation · required · enabled by default

Trigger/condition/action rule engine.

Depends on: auth, engine

Introduces permissions: automation.view, automation.manage

Owns routes: /api/automation

File manager​

files · required · enabled by default

Path-safe browsing and file operations.

Depends on: auth

Introduces permissions: files.view, files.manage

Owns routes: /api/files

API keys​

api_keys · required · enabled by default

Personal API key issue/list/revoke.

Depends on: auth

Introduces permissions: apikeys.manage

Owns routes: /api/api-keys

Notifications​

notifications · required · enabled by default

Personal notifications. Each user chooses which events they want and where they arrive — in-app, email, Telegram or Discord. Recipients are fixed in code per event; there is no rule builder, audience designer or template editor.

Depends on: auth, rbac

Introduces permissions: notifications.view_own, notifications.manage_own, notifications.channels_manage_own

Owns routes: /api/account/notifications

Audit log​

audit · required · enabled by default

Append-only audit trail of sensitive actions.

Depends on: auth

Introduces permissions: audit.view

Owns routes: /api/audit

System health​

system · required · enabled by default

Liveness/readiness probes and health reporting.

Introduces permissions: system.view

Owns routes: /api/system

Settings​

settings · required · enabled by default

Key/value application settings.

Depends on: auth

Introduces permissions: settings.view, settings.manage

Owns routes: /api/settings

Operations (Console API)​

operations · required · enabled by default

Read-only aggregate snapshot and event stream for UltraTorrent Console.

Depends on: auth

Introduces permissions: console.view

Owns routes: /api/operations

Module registry​

module_registry · required · enabled by default

Enable/disable optional modules.

Depends on: auth, rbac

Introduces permissions: modules.view, modules.manage

Owns routes: /api/modules

Media Manager​

media_manager · optional · enabled by default

Scan, identify, enrich, and organise your media libraries: library scanning, filename identification, metadata/artwork/subtitles, duplicate detection, NFO generation, rename/move for media servers, and a health dashboard.

Depends on: auth, files

Introduces permissions: media_manager.view, media_manager.manage_libraries, media_manager.scan, media_manager.match, media_manager.edit_metadata, media_manager.manage_artwork, media_manager.manage_subtitles, media_manager.rename, media_manager.move_files, media_manager.generate_nfo, media_manager.manage_integrations, media_manager.delete, media_manager.admin, media_manager.imdb.view, media_manager.imdb.configure, media_manager.imdb.import_dataset, media_manager.imdb.search, media_manager.imdb.match

Owns routes: /api/media

Release Scoring​

release_scoring · optional · enabled by default

Explainable 0–100 scoring of RSS releases with reasons, warnings, and a recommendation.

Depends on: auth, rss

Introduces permissions: release_scoring.view, release_scoring.manage

Owns routes: /api/release-scoring

Media Acquisition Intelligence​

media_acquisition_intelligence · optional · enabled by default

Decides what media to acquire from library gaps, release quality, duplicate risk, watchlists, acquisition profiles, and automation context — explainable decisions, never direct file operations.

Depends on: auth, rbac, module_registry, audit, settings, rss, automation, release_scoring

Introduces permissions: media_acquisition.view, media_acquisition.manage_watchlist, media_acquisition.manage_profiles, media_acquisition.evaluate, media_acquisition.approve, media_acquisition.reject, media_acquisition.override, media_acquisition.history, media_acquisition.export, media_acquisition.settings

Owns routes: /api/media-acquisition

Media Discovery​

media_discovery · optional · off by default

Discovers upcoming films, new and returning series from metadata providers, and decides what should be monitored — creating watchlist entries and generated RSS rules that the existing acquisition engine acts on. Never downloads anything itself.

Depends on: auth, rbac, module_registry, audit, settings, media_manager, media_acquisition_intelligence, media_intake, rss

Introduces permissions: media_discovery.view, media_discovery.manage, media_discovery.templates.manage, media_discovery.providers.manage

Owns routes: /media-acquisition/discover

Media Server Analytics​

media_server_analytics · required · enabled by default

Media server monitoring, analytics, recently-added, watch history, live activity, user/library statistics, scheduled newsletters, and Tautulli analytics import — across Plex, Jellyfin, Emby, and Kodi.

Depends on: auth, rbac, module_registry, audit, settings, media_manager, automation

Introduces permissions: media_server_analytics.view, media_server_analytics.manage_connections, media_server_analytics.manage_mappings, media_server_analytics.view_live_activity, media_server_analytics.view_users, media_server_analytics.view_history, media_server_analytics.view_reports, media_server_analytics.export, media_server_analytics.manage_newsletters, media_server_analytics.send_newsletters, media_server_analytics.manage_imports, media_server_analytics.run_imports, media_server_analytics.manage_settings, media_server_analytics.admin

Owns routes: /api/media-server-analytics

Subtitle Intelligence​

subtitle_intelligence · required · enabled by default

The definitive subtitle engine: fingerprints every media file (movie hash + technical metadata), searches multiple providers with a progressively-relaxed strategy (hash → release → external id → title), scores and validates each candidate, installs the best as a media-server-correct sidecar (never overwriting an original), and can synchronize it to the audio. Per-library language policy, automation, and background monitoring.

Depends on: auth, rbac, files, audit, settings, media_manager

Introduces permissions: subtitle_intelligence.view, subtitle_intelligence.search, subtitle_intelligence.download, subtitle_intelligence.synchronize, subtitle_intelligence.manage, subtitle_intelligence.providers, subtitle_intelligence.settings, subtitle_intelligence.admin

Owns routes: /api/subtitle-intelligence

Library Cleanup Center​

library_cleanup · required · enabled by default

Policy-driven reclamation of library storage. Users build versioned cleanup policies from a catalogue of metadata, playback, technical, storage and safety conditions; a run turns matches into CANDIDATES, never deletions. Nothing is removed except through a persisted, approved plan whose per-file fingerprints still match the world, and protected, locked, actively-playing, in-flight, ambiguous or unmeasured files are refused server-side. Removal goes to quarantine or Trash through the existing path-safe file services; permanent deletion is a manual, separately-permissioned operation.

Depends on: auth, rbac, files, audit, settings, media_manager

Introduces permissions: library_cleanup.view, library_cleanup.policy.create, library_cleanup.policy.edit, library_cleanup.policy.publish, library_cleanup.policy.enable, library_cleanup.policy.delete, library_cleanup.run, library_cleanup.simulate, library_cleanup.approve, library_cleanup.cancel, library_cleanup.protection.view, library_cleanup.protection.create, library_cleanup.protection.revoke, library_cleanup.protection.legal_hold, library_cleanup.trash, library_cleanup.restore, library_cleanup.permanent_delete, library_cleanup.settings, library_cleanup.audit

Owns routes: /api/media/cleanup

Media Intake Engine​

media_intake · required · enabled by default

Staging-based import pipeline. A completed download is verified, identified, enriched and quality-scored in a staging area, then placed into a library by the cheapest strategy the storage actually supports — hardlink, reflink, provider relocation or copy — so the torrent keeps seeding. Storage Profiles hold the logical roots and reference existing libraries rather than restating their paths; a Path Mapping Registry renders every path into the space of whatever component is about to receive it. Opt-in per RSS rule and never applied to an existing one automatically: rules created before this module read legacy_direct and behave exactly as before.

Depends on: media_manager, torrents

Introduces permissions: media_intake.view, media_intake.manage, media_intake.operate, media_intake.migrate

Owns routes: /api/media/intake

See also​