Hobby
$0
For side projects and trying it out.
Start free- 50,000 runs a month
- 3 queues and 5 schedules
- Logs kept for 7 days
- Help from the community
Queues, cron, email and file processing for your app. Write a function, push it, and Kilnworks runs it with retries, schedules and a log of every attempt.
send-receiptDone in 182 msresize-avatarRunningsync-invoicesRetry 2 of 5Five kinds of background work on the same workers, with the same retries, logs and bill.
One SDK for all five
$ npm i kilnworks
Each job is written to a replicated table before your request returns, so a deploy or a crash never drops one. Set how many run at once, per queue or per customer.
Ship your first queueWrite a schedule in cron or in words like “every weekday at 9”. See the next ten runs before you ship, and replay a missed one from the dashboard.
Ship your first scheduleReceipts, digests and password resets go out through the same queue. Bounces retry on their own, and every message has a delivered status you can look up.
Send your first emailFiles land in storage first. Resizing, virus scans and video encoding run as jobs, and the result is ready when your app asks for it.
Process your first uploadSend one event and Kilnworks fans it out to push, in-app and SMS. It respects quiet hours and shows which device got the message.
Send your first notificationA job is a function in your repo. There are no workers to run and no servers to patch.
Give a function a name and say how many times it may retry. It lives next to the code that calls it.
import { job } from "kilnworks";
export const sendReceipt = job({
id: "send-receipt",
retries: 5,
run: async ({ orderId }) => {
await mail.receipt(orderId);
},
});
Every push to main builds your jobs, tests them and rolls them out. Runs already in flight finish on the old version.
$ git push origin main
build 3 jobs found
test 12 passed in 4.1s
ship live in 9s
Enqueue from any route and return right away. The job runs on Kilnworks workers, which grow and shrink with your queue.
await sendReceipt.enqueue({
orderId: order.id,
});
// returns in about 4 ms
Payment APIs go down and deploys go wrong. Kilnworks keeps the work safe until it can finish.
A failed job tries again later, and later still, up to 25 times.
Nothing is thrown away. Fix the bug, then replay them in one click.
Enqueue the same key twice and the job still runs once.
Stay under a fussy partner API’s limit, per second or per minute.
Cap how many jobs one account runs at once, so a big export never starves the rest.
Input, output, errors and timing for each try, searchable for 30 days.
Hear about it in chat or email when a queue backs up or a job keeps failing.
Run and store jobs in the US or the EU, and keep payloads encrypted at rest.
We had three cron servers and a page of notes on which one ran what. Now every schedule lives in the repo, and the dashboard tells us what ran at 4 a.m. without anyone logging in to a box.
Receipts used to add a second to checkout. Moving them into a job took one afternoon.
Our payment provider was down for an hour. Nine thousand jobs waited, then went through on their own. Nobody had to touch anything.
The fair-share cap means one big account can’t hold up everyone else’s exports any more.
Replaying the failed jobs after a bad deploy is my favourite button in any tool we pay for.
We moved forty queues in a week. The import kept every schedule and every retry setting, so the cutover was a non-event.
Start free. Move up when your app gets busy, and down again if it gets quiet.
$0
For side projects and trying it out.
Start free$39a month
For apps with real users and a team behind them.
Start a 14-day trial$249a month
For busy apps and more than one team.
Talk to usEvery plan has retries, cron and the failed-jobs queue. Extra runs cost $0.30 per 100,000.
Import the queues and schedules you run today in one command, then switch the old worker off when you’re ready.