Job queue

Hanzo MQ

Background work, done later

MQ is a TypeScript library, not a server to run. Import it and your jobs live as data structures in Hanzo KV: add one here, and a worker in another process picks it up — with priorities, delays, retries with backoff, a rate limit per queue, and parent jobs that wait on their children. Every state change is a Lua script running inside the store, so two workers never take the same job.

The queue is data, the workers are yours

A cron expression, a delay in milliseconds, or a job that repeats on an interval — timezone aware, and held in the store rather than in a process that might restart.

Paste and ship

Paste this into any agent. It reads the skill manifest and calls MQ from there.

Agent prompt
Read https://hanzo.ai/skill.md and use Hanzo MQ in my project. Start with: hanzo mq stream list
LibraryNo broker to run
CronScheduling
RetriesWith backoff
At-least-onceDelivery

Add a job here, run it there

worker.ts
import { Queue, Worker } from "@hanzo/mq"

const queue = new Queue("emails", {
  connection: { host: "kv.hanzo.ai", port: 6379 }
})

// Add jobs with options
await queue.add("welcome", { userId: "usr_123" }, {
  priority: 1,
  delay: 5000,
  attempts: 3,
  backoff: { type: "exponential", delay: 1000 },
})

// Process jobs
const worker = new Worker("emails", async (job) => {
  await sendEmail(job.data.userId, "welcome")
}, {
  connection: { host: "kv.hanzo.ai", port: 6379 },
  concurrency: 10,
  limiter: { max: 100, duration: 60_000 },
})
Open source royalty

20% to the author of the code that runs

Verify that you own a repository, and every org that deploys a project built from it pays you 20% of its metered spend, accrued each period.

Add a job and walk away

Free tier includes 10K jobs/month. No job size limits.

Get MQ

Message queue

License: Apache-2.0hanzoai

Build what’s next.