Summary
Large refactor of JacRed from a monolithic Engine layout into layered Application / Infrastructure architecture, with new security, configuration, logging, tracker sync services, background workers, and API/documentation updates.
Changes
Architecture & project structure
- Reorganize codebase from
JacRed.EngineintoApplication,Infrastructure, andConfigurationnamespaces - Replace legacy
JacRed.slnwithJacRed.slnx - Slim down
AppInit.csand move responsibilities into dedicated services/providers - Introduce
BaseControllerwith shared memory-caching support - Add
HomeControllerfor static HTML and OpenSearch - Add
HealthController(/health, version, last DB update)
Database & indexing
- Introduce
FastDbIndex/IFastDbIndexfor centralized fast-DB access - Integrate
FastDbIndexinto controllers, search, and migration flows - Add
StatsTorrentIndexfor stats aggregation - Fix
FileDB: resetffprobewhen torrent magnet is updated
Tracker services
- Split tracker logic into
*Parser+*SyncServiceper tracker (Anidub, Aniliberty, AnimeLayer, Baibako, Bitru, Kinozal, Knaben, Lostfilm, Mazepa, Megapeer, NNMClub, Rutor, Rutracker, Selezen, Toloka, TorrentBy) - Consolidate tracker DI via
TrackerServiceCollectionExtensions - Refactor CRON controllers to thin wrappers over sync services
- Normalize CRON folder casing (
CRON→Cron) - Optimize Kinozal hash fetching with
ShouldSkipHashFetchwhen title/size unchanged
Background processing
- Replace legacy threading/cron patterns with hosted background workers:
FastDbRefreshWorker,FileDbWorker,SyncWorker,TrackersWorker,StatsWorker,TracksWorker
- Load master DB synchronously before Kestrel starts
- Add
CancellationTokensupport to cron-style operations
Dev & maintenance tooling
- Add dev services: diagnostics, maintenance, migration, tracks admin
- Add dev controllers for DB scan/repair, maintenance tasks, migration, and tracks export
- Extract search into
JackettSearchServiceandTorrentQueryService
Configuration
- New configuration system:
AppConfigurationLoader,AppConfigurationProvider,AppConfigurationReloadWorker - Hot-reload support for
init.yaml/init.conf - Extend config models with structured logging options
- Update example/init config files and settings UI
Security & access control
- New security framework:
ClientNetworkContext,JacRedAccessEvaluator,JacRedAuthorizationMiddlewareJacRedAccessCatalog,JacRedEndpointRegistry,JacRedKeyValidators
- Centralized route/policy registration in
Startup - Remove deprecated
ModHeadersmiddleware and per-controller authorize attributes - Add
AccessTraceabilityMatrix.mddocumenting policies and endpoint access (RU)
Logging
- Structured logging via
JacRedLog, categories, console formatter, and DI extensions - Configurable console/file logging levels and categories
- Remove deprecated top-level
logoption; uselogFdb/logParsers(and related settings) - Replace
Console.WriteLineusage with structured logging
API & sync
- Remove deprecated Sync v1 (
GET /sync/torrents) andopensync_v1config - Update Sync v2 flow and related docs
- Fix route:
/api/v1.0/torrents/qualitys→/api/v1.0/qualitys - Stats API additions:
GET /stats/tracks(tracks export aggregate)GET /stats/trackers/new,GET /stats/trackers/updatedGET /stats/trackers/{name}(per-tracker summary)
- Expand
openapi.yamland README for new/changed endpoints
Build & runtime
- Upgrade .NET 9 → .NET 10 (project, Dockerfile, CI workflows, packages)
- Enable single-file publish; adjust
build.shand Docker build - Update Swagger/OpenAPI integration for new library conventions
Documentation & localization
- Major README updates (architecture, config, API, access control)
- Russian translations for Access Traceability Matrix and related docs
Breaking changes
- Sync v1 removed
logconfig option removedopensync_v1config removed- Qualitys API route changed
- Requires .NET 10
- Large internal namespace/layout changes (
Engine→Infrastructure/Application)
Full Changelog: 2.8.3...3.0.0