Kilnworks

Background jobs you never have to babysit

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.

Queue Jobs line up on a belt, and the worker takes the next one in as the line moves up.
Recent runs
  • send-receiptDone in 182 ms
  • resize-avatarRunning
  • sync-invoicesRetry 2 of 5
Median wait before a job starts
38 ms
Jobs run for customers last month
4.2 billion
Uptime over the past twelve months
99.99%

Everything your app does after the response

Five kinds of background work on the same workers, with the same retries, logs and bill.

One SDK for all five

$ npm i kilnworks

Queues that keep every job until it’s done

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 queue
Database A query slides into a database box, a read head climbs to the tier that holds its rows, and the result slides back out onto the tray.

Ship a job in three steps

A job is a function in your repo. There are no workers to run and no servers to patch.

  1. Write the job

    Give a function a name and say how many times it may retry. It lives next to the code that calls it.

    • TypeScript, Python or Go
    • Runs on your laptop too
    jobs/send-receipt.ts
    import { job } from "kilnworks";
    
    export const sendReceipt = job({
      id: "send-receipt",
      retries: 5,
      run: async ({ orderId }) => {
        await mail.receipt(orderId);
      },
    });
    Version control A branch track leaves the main line on a rail plate, a commit block travels it, and it merges back into main.
  2. Push it

    Every push to main builds your jobs, tests them and rolls them out. Runs already in flight finish on the old version.

    • A preview queue per branch
    • Roll back in one click
    Terminal
    $ git push origin main
    build   3 jobs found
    test    12 passed in 4.1s
    ship    live in 9s
    CI pipeline A commit rides a rail through three stations in a line: build, test and ship. The check on each station lights in turn as it comes through, and the commit leaves on the far side.
  3. Call it from your app

    Enqueue from any route and return right away. The job runs on Kilnworks workers, which grow and shrink with your queue.

    • Delay or schedule any call
    • Track each run by its id
    app/checkout.ts
    await sendReceipt.enqueue({
      orderId: order.id,
    });
    // returns in about 4 ms
    Containers A host machine holds containers in slots on its top. A small crane lowers a new container into the empty slot and lets go, the slot's light comes on as it runs beside the others, and then the crane lifts it back out.

Built for the day something breaks

Payment APIs go down and deploys go wrong. Kilnworks keeps the work safe until it can finish.

From teams who moved their jobs over

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.

Marisol OkaforPlatform lead, Ostrander Freight

Receipts used to add a second to checkout. Moving them into a job took one afternoon.

Hana LindqvistEngineer, Saltmarsh Bikes

Our payment provider was down for an hour. Nine thousand jobs waited, then went through on their own. Nobody had to touch anything.

Devin AchterbergCTO, Pelloway

The fair-share cap means one big account can’t hold up everyone else’s exports any more.

Aisha BenyaminStaff engineer, Tamberly

Replaying the failed jobs after a bad deploy is my favourite button in any tool we pay for.

Tomás FerreiraBackend engineer, Cobblefield

We moved forty queues in a week. The import kept every schedule and every retry setting, so the cutover was a non-event.

Jonah WhitcombeEngineering manager, Wrenhaven Health

Pay for the jobs you run

Start free. Move up when your app gets busy, and down again if it gets quiet.

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

Team

$39a month

For apps with real users and a team behind them.

Start a 14-day trial
  • 2 million runs a month
  • Unlimited queues and schedules
  • Email, uploads and notifications
  • Logs kept for 30 days
  • Alerts in chat and email

Scale

$249a month

For busy apps and more than one team.

Talk to us
  • 25 million runs a month
  • Fair share per customer
  • Logs kept for 90 days
  • Single sign-on and audit log
  • An engineer replies within an hour

Every plan has retries, cron and the failed-jobs queue. Extra runs cost $0.30 per 100,000.

Move your first job over this afternoon

Import the queues and schedules you run today in one command, then switch the old worker off when you’re ready.

Queue import Jobs are lifted out of the old queue, stamped on import and laid into the new queue.