Skip to content

artyomsv/marauder

Repository files navigation

🦉 Marauder

The forum-tracker monitor that stayed up to date.

*A modern, self-hosted torrent topic monitor for the trackers the arr stack can't reach.

License: MIT Release: v1.0.0 Go React 19 Postgres 18 16 trackers 5 clients 4 notifiers Torznab+Newznab Site

marauder.cc · Vision · Competitors · PRD · Roadmap · Changelog


What is Marauder?

Marauder watches torrent tracker topics (RuTracker, LostFilm, Kinozal, NNM-Club, Anilibria, and friends) for updates and automatically hands the new .torrent file or magnet link to your torrent client — qBittorrent, Transmission, Deluge, uTorrent, or a simple download folder.

It is built in 2026 with a tightly focused set of modern tools:

  • Go backend — single static binary, ~50 MB image, bounded memory.
  • React 19 + Vite 8 + Tailwind 4 + shadcn/ui frontend — genuinely modern, dark-first, keyboard-friendly.
  • PostgreSQL 18.4 for state.
  • Internal JWT + OIDC (Keycloak / Authentik / any OIDC provider) for auth.
  • Plugin architecture for trackers, clients, and notifiers.
  • Observable from day one — Prometheus metrics, structured logs, /health, /ready.

Why another one?

The short version:

Sonarr, Radarr, and Prowlarr dominate the Torznab/Newznab world. None of them can monitor a RuTracker forum thread, because RuTracker isn't a Torznab indexer — it's a forum. The Python-era tools that historically filled this niche have stalled. Marauder picks up where they left off, built on a modern stack with first-class security, observability, and a plugin model designed to be easy to extend.

Read the full rationale: VISION.md · COMPETITORS.md.


Project status

v1.0.0 — initial production release.

What works today:

  • Full stack comes up with docker compose up -d and four healthy containers (db + backend + frontend + nginx gateway).
  • Local username/password login with Argon2id, ES256 JWT, refresh-token rotation, master-key-encrypted secrets at rest.
  • OIDC sign-in via Keycloak (or any OIDC provider). Bring up the bundled Keycloak realm with the sso compose profile.
  • 11 tracker plugins, 5 torrent-client plugins, 4 notifier plugins.
  • Generic-magnet → qBittorrent end-to-end pipeline validated against a real qBittorrent docker container — see docs/test-e2e-magnet.md.
  • Cloudflare-bypass sidecar (cfsolver profile) for trackers wrapped in CF interstitials.
  • Audit log, Prometheus metrics, structured JSON logs, system status page.
  • English + Russian UI.

What's still alpha: the seven CIS forum-tracker plugins (RuTracker, Kinozal, NNM-Club, LostFilm, Anidub, Toloka, Unionpeer, Tapochek) are structurally complete with fixture-based tests but have not been validated against live sites in this development cycle — that requires real account credentials and is the first thing community contributors will help with. Anilibria and Rutor use public APIs and should validate cleanly. See CHANGELOG.md for the per-plugin status table.


Quick start

The full stack is designed to run on any machine with Docker installed. No Go, Node, or Postgres toolchains required on the host.

# 1. Clone the repo
git clone https://github.com/artyomsv/marauder.git
cd marauder

# 2. Generate a master encryption key and set up env
cp deploy/.env.example deploy/.env
# Fill MARAUDER_MASTER_KEY with the output of:
openssl rand -base64 32

# 3. Bring the stack up
docker compose -f deploy/docker-compose.yml --env-file deploy/.env up -d

# 4. Open the UI
open http://localhost:34080

On first start, Marauder creates an admin user from MARAUDER_ADMIN_INITIAL_USERNAME / MARAUDER_ADMIN_INITIAL_PASSWORD in the .env file. Change the password after first login and unset those variables.


Architecture at a glance

         ┌──────────────┐
         │  React 19    │  shadcn/ui + Tailwind 4 + TanStack Query
         │  frontend    │
         └──────┬───────┘
                │ JSON over HTTPS
                ▼
         ┌──────────────┐       ┌──────────────┐
         │   Go backend │──────►│  PostgreSQL  │
         │   chi + pgx  │       │  18.4        │
         └──┬────┬──────┘       └──────────────┘
            │    │
            │    └──────────┐
            ▼               ▼
     ┌────────────┐   ┌──────────────┐
     │  Tracker   │   │   Torrent    │
     │  plugins   │   │   clients    │
     │ (rutracker,│   │ (qBittorrent,│
     │  lostfilm, │   │  Transmission│
     │  nnm-club, │   │  Deluge,     │
     │   ...)     │   │  ...)        │
     └─────┬──────┘   └──────────────┘
           │
           │ (Cloudflare-protected trackers only)
           ▼
     ┌────────────┐
     │ cfsolver   │  sidecar container: chromium + chromedp
     │ sidecar    │
     └────────────┘

     Optional: ────────────────────────────────────────
     OIDC (Keycloak / Authentik / Authelia) for SSO.
     Prometheus + Grafana for metrics.
     Telegram / Email / Webhook / Pushover for notifications.

Tech stack

Layer Choice Why
Backend Go 1.23+ Fast, simple concurrency, single binary, mature HTTP/scraping ecosystem, friendly to contributors. See PRD §2.
HTTP router chi Stdlib-idiomatic, middleware composable, minimal.
DB driver pgx v5 + sqlc Type-safe queries generated from SQL.
Migrations goose Embedded, runs at startup, simple.
Logging zerolog Structured, allocation-free.
Config envconfig 12-factor, no YAML.
Frontend React 19.2 + TypeScript Latest stable, Server Components optional.
Build Vite 8.0.2 Fast HMR, plugin ecosystem.
Styling Tailwind CSS 4.2 New @tailwindcss/vite plugin, no PostCSS headaches.
UI kit shadcn/ui 4.1.2 Copy-in components, no vendor lock-in.
State TanStack Query v5 + Zustand Server state + minimal global UI state.
Forms react-hook-form + zod
Database PostgreSQL 18.4
Auth Internal JWT (ES256) + OIDC (Keycloak etc.)
Secrets AES-256-GCM at rest
Observability Prometheus + structured JSON logs
Packaging Docker + docker-compose No host dependencies.
CI GitHub Actions Lint, unit, integration, e2e, trivy, govulncheck.

Repository layout

marauder/
├── backend/            Go backend (chi, pgx, sqlc, goose)
├── frontend/           React 19 + Vite 8 + Tailwind 4 + shadcn
├── deploy/             docker-compose files, .env.example, nginx configs
├── docs/               VISION / COMPETITORS / PRD / ROADMAP / guides
├── CHANGELOG.md        Keep a Changelog format
├── LICENSE             MIT
└── README.md

Contributing

Marauder is meant to be easy to extend. Adding a new tracker is a single Go file implementing the Tracker interface plus a recorded-HTTP-fixture test. The full contribution guide is in CONTRIBUTING.md (coming in v0.2).

For now:

  • Open issues for bugs, feature ideas, or tracker breakage reports.
  • Discuss design before large PRs — a quick issue saves a lot of rebasing.
  • Don't submit PRs adding hard-coded tracker URLs pointing at copyrighted content. Marauder is an automation tool, not an index.

License & credits

Marauder is released under the MIT License.

Built inspired by monitorrent — the project that pioneered the forum-tracker monitoring niche. Marauder is an independent, ground-up implementation, but the problem statement and the user experience it targets are owed to that earlier work.


Legal notice

Marauder is a general-purpose automation tool. It does not host content and does not ship with any pre-configured tracker URLs. What you choose to monitor and download is your responsibility and subject to the laws of your jurisdiction and the terms of service of the trackers you use.

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors