You write the job. Mikku runs it on time.
Run background jobs and AI agent workflows without standing up infrastructure. Your code stays on your servers while Mikku handles when it runs and retries what fails.
Publish
Publish in one line
Install the SDK, set your keys once, and hand Mikku the request. The rest is the queue's problem. Typed end to end, from publish to delivery.
import { MikkuClient } from "@mikku.dev/sdk"; const mikku = new MikkuClient(); const msg = await mikku.publish({ url: "https://api.example.com/order-paid", body: { orderId: "ord_123" }, headers: { "x-tenant": "acme" }, delaySeconds: 30, maxAttempts: 5, idempotencyKey: "ord_123:paid",}); // 202 Accepted { id: "msg_9f2c4a1b", status: "queued" }Schedule and cap
Delay delivery or cap the attempt budget from the same publish call.
Idempotency keys
Publish the same message twice and Mikku delivers it exactly once.
Any language
Not on TypeScript? Generate a client from the OpenAPI spec.
Fan out
One publish, every endpoint
Group your destinations into a fanout and publish once. Mikku delivers an independent message to each endpoint, so a single dead consumer dead-letters on its own without holding up the rest.
order-events
One publish fans out to every endpoint, each delivered and retried on its own.
Publish to a name
Reference a fanout by name and Mikku delivers to every endpoint in it.
Independent retries
Each endpoint gets its own attempts, backoff, and dead-letter queue.
Edit without redeploying
Add or remove endpoints from the dashboard or API; new publishes pick them up.
Monitor
Filter the firehose, watch it land
Every message your account publishes, in one table. Filter by status or destination and the list keeps itself current as deliveries land, no refresh button to hit.
Messages
Every message you publish, filtered live. Open one for its full history.
Status and search filters
Narrow to just failures, or search by destination. The counts follow your filter.
Live by default
The table polls quietly in the background and pauses while the tab is hidden.
Open for the full story
Click any row for its payload, headers, retry policy, and every attempt.
Observability
See every attempt, not just the last error
Open any message for its whole history: each attempt, the response code, how long it took, and the worker that handled it.
Message details
msg_b3f0a91c · POST /webhooks/order-paid
Three failures, then a 200 on the fourth. Backoff spaced out the retries.
Response capture
The response body is saved with every attempt, truncated to 4KB.
Flexible backoff
Exponential, linear, or fixed retry spacing, with jitter applied.
Cancel in flight
Stop any message that hasn't been delivered yet.
Recovery
Recover failures without leaving the page
Messages that exhaust their retries land in the dead-letter queue. Select a batch and retry, or resend one as a fresh copy. You never touch the database.
Dead-letter queue
Messages that exhausted their retries. Select a batch and retry.
Bulk retry
Send a batch back to pending with a fresh attempt budget.
Resend
Clone a delivered or failed message into a brand new one.
Scoped and safe
Every action is scoped to your account. You never touch the database.
Scheduling
Schedules without a cron server
Write a cron expression and Mikku turns each tick into a message, with the same signing and retries as everything else. Pause or edit from the dashboard.
Schedules
Cron expressions that publish a message every tick, in UTC.
Standard cron
Standard 5-field cron expressions, evaluated in UTC.
Inspectable runs
Each tick is a normal message you can open and inspect.
One-off sends
Build and send a single message from a form, no cron needed.
Stop hand-rolling retry logic.
Create an API key and run your first background job in two minutes. No queue to stand up, no cron server to babysit.