Skip to content

Architecture overview

This section explains how DUMB is structured, how services are orchestrated, and how the frontend, backend, and proxy layers interact.


System overview

DUMB bundles a FastAPI backend, a Nuxt 4 frontend, a Traefik access layer, and a set of managed services (core, dependent, and optional). The backend owns configuration, process lifecycle, setup hooks, dependency ordering, health checks, update automation, and Traefik route generation. The frontend surfaces onboarding, status, logs, metrics, configuration controls, and embedded service UIs.

flowchart TD
    U([User browser])
    FE[DUMB frontend]
    API[DUMB API]
    PH[Process handler]
    CFG[Config manager]
    SVC[Managed services]
    VOLS[(Storage mounts)]
    TR["Traefik access layer"]
    TPA["Traefik Proxy Admin"]
    CFD["Cloudflared"]

    U ==> FE
    FE ==> API
    API ==> PH
    API ==> CFG
    PH ==> SVC
    SVC ==> VOLS
    FE -.-> TR
    TR ==> SVC
    TPA -. HTTP provider .-> TR
    CFD -. tunnel ingress .-> TR

Core building blocks

Component Responsibility
DUMB API REST + WebSocket endpoints, config and process control
Process handler Starts/stops services, monitors status, orchestrates updates
Config manager Loads dumb_config.json, validates, persists changes
Auto-update Fetches releases/branches and applies updates per service
Auto-restart Monitors health and restarts services when needed
Frontend UI for service status, logs, configuration, and onboarding
Traefik Unified service UI routing and shared reverse-proxy entrypoint
Traefik Proxy Admin Optional owner of user-managed LAN/public routes through Traefik
Cloudflared Optional Cloudflare Tunnel connector that forwards public traffic to Traefik

Storage and mounts

The maintained deployment persists four container paths: /config, /log, /data, and /mnt/debrid. Services still use their native internal paths (for example /riven/backend/data, /decypharr, /postgres_data, or /altmount), but DUMB maps those paths into service-specific subdirectories below the mounted /data root. Media access is provided through /mnt/debrid, including mounts and curated symlink libraries.

Mount propagation

When Arr services or media servers run outside the DUMB container, ensure mount propagation (rshared/rslave) is configured so symlinks and rclone mounts stay consistent.


Networking and proxying

DUMB publishes the frontend on port 3005; the frontend proxies REST calls under /api and WebSockets under /ws to the loopback backend. The native API listener on port 8000 is not published by the maintained Compose file. Traefik can be enabled to consolidate service UIs under a single port and path-based routing. When Traefik Proxy Admin is enabled, Traefik also polls TPA's HTTP provider for user-managed host routes. When Cloudflared is enabled, Cloudflare Tunnel traffic is delivered to the same Traefik entrypoint.

Traefik is optional

You can access service UIs directly on their ports, or enable Traefik to route embedded UIs under a single endpoint. TPA and Cloudflared are optional additions for user-managed hostnames and tunnel ingress.


Configuration lifecycle

  1. DUMB loads dumb_config.json on startup.
  2. The API and process handler apply config changes.
  3. Service-specific setup hooks patch configs and directories.
  4. The frontend reflects status and logs in real time.