Resuma OS (execution layer)
Durable workers, disk-backed queues, cron scheduler, webhooks, and an ops dashboard — self-hosted. No Redis or Cloudflare Workers required. Rate limiting for the whole app (actions, submits, exec) also lives on disk under {RESUMA_DATA_DIR}/rate-limit/.
Resuma OS — live worker
A real #[worker] runs on this server: durable graph, SSE event stream, pause/resume/cancel. No Redis — self-hosted execution in the same binary as your app.
How to use this demo
- Click Run worker — a ~25s graph starts; the execution panel appears below.
- In the panel, open Controls and wait until status is Running.
- While Running, try Pause, Resume, or Cancel.
- When status is done, run again to start a fresh graph (the event stream clears).
Ready — start with step 1.
Execution panel
Graph, controls, and event stream appear here after you click Run worker.
Ops snapshot
From flow_dashboard_poll — same data as GET /_resuma/status.
Resuma OS
healthy · uptime 30h 31mWorkers
1
Graphs running
0
Graphs paused
0
Queue pending
0
Processing
0
Scheduler due
0
Workers
Queues
| Name | Pending | Active | Done | Failed | Load |
|---|---|---|---|---|---|
| default | 0 | 0 | 0 | 0 | |
| docs | 0 | 0 | 1806 | 0 |
Scheduler
When to use
- Background jobs (enqueue + multi-process consumers)
- Cron-triggered workers
- AI / fetch pipelines with map-reduce
- Ops visibility (graphs, queues, Prometheus metrics)
On-disk layout
.resuma/ ├── durable/ graphs, events, checkpoints, tokens ├── queue/ pending → processing → done|failed ├── scheduler/ cron jobs (multi-process safe) ├── rate-limit/ per-IP limits on disk └── webhooks/ outbound lifecycle hooks
Bootstrap
init_exec() runs automatically when you FlowApp::serve or ResumaApp::into_router. Configure data dir with RESUMA_DATA_DIR.
use resuma::prelude::*;
#[worker(intent = "summarize text with AI")]
async fn summarize(input: SummarizeInput) -> Result<Value> {
Ok(json!({ "summary": input.text }))
}
FlowApp::new()
.auto_pages("src/pages", PagesRegistry)
.serve(FlowServeOptions::default()) // init_exec() inside
.awaitHTTP routes
| Route | Purpose |
|---|---|
POST /_resuma/worker/{name} | Start worker graph |
POST /_resuma/queue/{name} | Enqueue job |
GET /_resuma/queue/{name}/stats | Queue depth |
GET /_resuma/graph/{id} | Graph snapshot |
GET /_resuma/graph/{id}/events | SSE live events |
POST .../pause|resume|cancel | Graph control |
GET /_resuma/status | Ops snapshot (API key) |
GET /_resuma/metrics | Prometheus text |
GET|POST /_resuma/scheduler | Cron jobs |
GET|POST /_resuma/webhooks | Webhook targets |