Every job needs a spark.
Flint is a background job scheduler built for developers who care about correctness. Schedule emails, webhooks, and log pipelines, powered by swappable priority algorithms, live status streams, and a clean UI.
$ POST /api/v1/jobs
{
"type": "webhook_delivery",
"priority": 1,
"interval": "5m"
}
✓ 201 Created · job_id: a3f9d2c1
Live queue
4 active workers · 18 queued
Job handlers
Three handler types.
One unified queue.
Email dispatch
type: "send_email"
Queue and deliver transactional emails with full payload control. Retries on failure, deduplication on key.
{
"to": "user@example.com"
"subject": "Your order is confirmed"
"body": "Hi Alice, your order #4821…"
}
Webhook delivery
type: "webhook_delivery"
POST signed payloads to any endpoint. Configurable method, headers, and body — with automatic retry logic.
{
"url": "https://api.yourapp.com/hooks"
"method": "POST"
"body": "{"event":"payment.success"}"
}
Log processing
type: "log_processing"
Ingest and process structured log lines from any source. Batch jobs, stream ingestion, or one-off pipeline runs.
{
"source": "nginx-prod-01"
"2024-01-15 ERROR timeout…",
"2024-01-15 WARN retry scheduled…"
}
Switch on the fly
Two algorithms.
Zero restarts.
Flint ships with two scheduling strategies. Toggle between them at runtime through the dashboard or the settings API; the queue drains under the current algorithm and the next job is picked up under the new one.
Jobs are stored in a binary min-heap keyed by effective priority. The scheduler always pops the highest-priority job next — ideal when you need to guarantee that critical jobs like payment webhooks always run before lower-priority batch work.
Queue by priority
Built-in
Everything a job scheduler
should ship with.
Live status via SSE
Job state changes stream directly to the dashboard over Server-Sent Events. No polling, no stale UI — every transition is instant.
Interval scheduling
Define recurring jobs with human-readable intervals — 30s, 5m, 1h, 1d. Flint re-queues them automatically after each run.
Dependency chains
Declare upstream job IDs and Flint holds a job until all dependencies reach a completed state. DAG visualised in the job detail view.
Structured logs
Every job event — creation, retries, completion, failure — is written to an append-only log you can query and filter in the Logs view.
Benchmark suite
Run head-to-head algorithm benchmarks at 1 k, 10 k, or 100 k jobs from inside the dashboard. Visualise insert/pop times side-by-side.
Dead letter queue
Jobs that exhaust all retries are moved to the DLQ. Inspect the last error, view the full payload, and re-queue with one click.
Priority levels
Three priority tiers — High, Medium, Low — determine queue position under the min-heap strategy. High-priority jobs always run first.
Worker management
Monitor active workers, view last-seen times, and gracefully stop or restart individual workers from the dashboard or Settings page.