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¶
- DUMB loads
dumb_config.jsonon startup. - The API and process handler apply config changes.
- Service-specific setup hooks patch configs and directories.
- The frontend reflects status and logs in real time.