DebridUp is a private, self-hosted status dashboard for debrid services. It checks your configured providers, tracks availability and response times, records incidents, and can notify you through ntfy.
Supported providers: TorBox, Premiumize, AllDebrid, Real-Debrid, Torrin, PikPak, Offcloud, Debrid-Link, EasyDebrid, Debrider, and Deepbrid.
- Shows whether each provider is up, degraded, slow, or unavailable.
- Tracks incidents, recoveries, availability, and p50/p95 response times.
- Displays a graph-based service history for 24 hours, 7 days, or 30 days.
- Exports compact JSON data for 1, 7, 30, or 90 days, or all retained history.
- Sends incident and recovery notifications through ntfy.
- Encrypts provider credentials and notification URLs before storing them in SQLite.
- Runs on AMD64 and ARM64 with Docker Compose or the included Unraid template.
Authenticated checks use read-only account or history endpoints. PikPak requires a compatible access token, which may need to be replaced when it expires.
When a provider connection fails, DebridUp makes short requests to Cloudflare and Google connectivity endpoints. If neither hostname responds, it also checks https://1.1.1.1/help without DNS. A working IP check suggests DNS or the hostname controls may be failing; if it fails too, local connectivity is uncertain. Either way, the provider result is unknown: it remains in the raw check log but does not advance an incident or count against provider availability. After DebridUp restarts, providers remain unknown until a fresh check completes. These control requests reveal the monitor's public IP to their operators.
-
Copy the example environment file and set an admin password of at least 12 characters:
cp .env.example .env
-
Create the encryption key:
install -d -m 0700 secrets openssl rand -base64 32 | sudo install -m 0400 -o root -g root /dev/stdin secrets/encryption_key -
Start DebridUp:
docker compose pull docker compose up -d
Open http://localhost:8080, sign in, and add providers under Settings → Provider settings.
Use a TLS reverse proxy before making DebridUp available outside a trusted private network. The published image is ghcr.io/thetoadsage/debridup:latest.
Important
Back up /data and secrets/encryption_key together. Never replace the encryption key for an existing database—stored provider credentials and notification settings cannot be recovered without the matching key.
- Dashboard gives an at-a-glance health summary and the latest status and response time for every configured service.
- Incidents lists current and recovered incidents.
- Service history shows availability, status changes, and latency trends.
- Settings manages providers, ntfy notifications, display time zone, and theme.
- Export JSON downloads service statistics and incident timelines for the selected period. You can give the file to an AI to generate a written report.
The dashboard refreshes every 30 seconds while visible. Raw checks are retained for 90 days by default; incidents remain after their raw samples expire.
An importable template is included at unraid/debridup.xml.
Follow the Unraid installation guide to create the encryption key and import the template. The default paths use /mnt/cache/appdata; if your appdata share uses another pool, change both template host paths to /mnt/<pool-name>/appdata/... before applying it.
The template uses the public multi-architecture image, stores the database in appdata, runs the application as Unraid's usual nobody:users account, and keeps the encryption key in a separate read-only mount.
Update Docker Compose installations with:
docker compose pull
docker compose up -dOn Unraid, use Docker → Check for Updates. Before updating, keep a consistent backup of the SQLite data and its matching encryption key.
For a live database, use SQLite's online backup mechanism instead of copying only debridup.db; SQLite runs in WAL mode.
| Variable | Purpose | Default |
|---|---|---|
DEBRIDUP_ADMIN_PASSWORD |
Initializes the single administrator account on first startup. | Required |
DEBRIDUP_ENCRYPTION_KEY_FILE |
Path to a base64-encoded 32-byte encryption key. | Required in Docker |
DEBRIDUP_DATA_DIR |
SQLite database and application-data directory. | ./data (/data in Docker) |
DEBRIDUP_ADDR |
HTTP listen address. | :8080 |
DEBRIDUP_HISTORY_RETENTION |
Raw response-history retention as a Go duration. | 2160h (90 days) |
DEBRIDUP_MAX_CONCURRENT_CHECKS |
Maximum provider checks running at once, from 1 to 32. | 4 |
PUID / PGID |
Runtime user and group IDs for bind-mounted data. | Image user; Unraid uses 99 / 100 |
GET /healthz checks process health. GET /readyz also confirms that the database is ready.
GET /integrations/health/{provider} exposes a small, read-only health response without a login. For example:
curl -i http://debridup:8080/integrations/health/torboxA healthy response is HTTP 200 with {"ok":true,"state":"healthy"}. HTTP 503 returns unhealthy, unknown, paused, or unavailable; unknown covers local connectivity uncertainty and checks that are stale or predate a restart. Consumers that only inspect the HTTP status still fail closed during uncertainty. HTTP 404 means an unknown or unconfigured provider. Provider slugs are torbox, premiumize, alldebrid, realdebrid, torrin, pikpak, offcloud, debridlink, easydebrid, debrider, and deepbrid.
The endpoint uses confirmed authenticated monitor state, respecting failure and recovery thresholds. A slow successful check remains healthy. Never-checked monitors and results older than two monitor intervals plus one check timeout count as unknown. If several enabled monitors use the same provider, all must pass; disabled monitors are ignored unless all are disabled, which returns 503. Polling reads existing state and never triggers extra provider requests or changes the database. It returns no account names, credentials, error details, or history.
For self-hosted AIOStreams:
- Make DebridUp reachable from the AIOStreams container, for example by attaching both containers to the same Docker network.
debridup:8080assumes that service name and DebridUp's default internal port; otherwise use its reachable LAN address and port. - In AIOStreams Settings → User Limits → Health Checks, enable Allow Private URLs (
HEALTH_CHECK_ALLOW_PRIVATE_URLS=true) for your trusted private instance. - In your configuration's Miscellaneous → Health Checks, add ID
torbox-up, URLhttp://debridup:8080/integrations/health/torbox, methodGET, expected status200, interval60seconds, timeout3000ms, and failure behavior down. Leave JSON path and body matching empty. - Test the check and save the configuration. Use
health('torbox-up')as a group condition, ornot health('torbox-up')as a fallback variant's activation condition. A check alone does not change stream selection.
AIOStreams caches results, so switching also depends on its refresh interval. See its health-check reference.
Tam-Taro's template can replace health checks when you import it or apply an update. Add or restore these checks after importing or updating the template. In AIOStreams, open Misc → Health Checks and edit a check with the pencil icon.
For each provider check you want to connect, click its pencil icon and change only these settings:
- Replace the URL with the DebridUp health URL, for example
http://debridup:8080/integrations/health/torbox.debridupis an example hostname. Use a name that resolves from the AIOStreams container, or your server's reachable IP address and port. The containers must be able to reach each other over the network.- Replace
torboxat the end with the provider slug, such astorrinorrealdebrid. See the supported provider list above.
- Clear JSON path and Expected value, leaving both fields empty.
- Optionally change Interval. The minimum is
60seconds; I use 60 seconds for a self-hosted setup.
Leave the other settings as the template provides them, including the check ID, method, expected status, timeout, and failure behavior. When you test a healthy provider, the result should say Not healthy while showing HTTP 200 and a short response time. This is intentional: the template expects 503 so a check such as torbox-down becomes true when DebridUp reports TorBox as unhealthy. Save the check, then repeat for any other provider checks you want to connect.
This template-specific setup intentionally differs from the 200 expected status described above for ordinary AIOStreams health checks. Keep the endpoint private to your trusted network.
This route intentionally requires no session. Anyone who can reach it can read the provider's availability. Keep it on your private network, or restrict the route at your reverse proxy if DebridUp is publicly reachable. An external login proxy must not intercept the container-to-container request.
- Provider credentials and ntfy URLs are encrypted with XChaCha20-Poly1305.
- Secrets are write-only and are never returned to the browser.
- Sessions are stored server-side and expire after 24 hours.
- The supplied container runs with a read-only root filesystem, a writable temporary directory, reduced Linux capabilities, and
no-new-privileges.
To build locally instead of using the published image:
docker build -t debridup:local .Use the opt-in Homepage integration for provider lists, status counters, and embedded latency or availability graphs. It uses a separate read-only credential and the existing dashboard history.

