Welcome
emit.run - Reliable background job processing
emit.run
Durable background job processing. Submit jobs, poll for work, process them — with automatic retries, timeouts, and real-time progress streaming out of the box.
Why emit.run?
- Survives failures — Jobs persist through restarts, crashes, and deploys. Automatic retries with configurable backoff.
- Real-time progress — Stream job progress to clients over WebSockets. No polling your own database.
- Fine-grained permissions — 10 granular scopes let you give producers, workers, and dashboards exactly the access they need.
- Space-based multi-tenancy — Organize jobs into spaces by project, environment, or team. Each space has its own queue, tokens, and event stream.
- Simple worker model — Poll, ack, do work, complete. No SDKs required — it's just HTTP.
How It Works
Producer emit.run Worker
│ │ │
├── POST /jobs ──────────────► (queued, pending) │
│ │ │
│ │ ◄── POST /jobs/poll ────────┤
│ │ ──── job descriptor ────────►
│ │ │
│ │ ◄── POST /jobs/:id/ack ─────┤
│ │ │
│ ◄─── WebSocket progress ─┤ ◄── POST /jobs/:id/progress┤
│ │ │
│ ◄─── WebSocket complete ─┤ ◄── POST /jobs/:id/complete┤Quick Links
- Introduction — Core concepts: spaces, jobs, scopes, worker lifecycle
- Quick Start — End-to-end example in under 5 minutes
- Authentication — API keys, scopes, and session auth
- Jobs API — Create, poll, and manage jobs
- WebSockets — Real-time event streams