Skip to content

Quick Start — Next.js

Terminal window
npm install @queuebase/nextjs zod

Create a job router with Zod-validated inputs:

src/jobs/index.ts
import { createJobRouter, job } from "@queuebase/nextjs";
import { z } from "zod";
export const jobs = createJobRouter({
sendEmail: job({
input: z.object({
to: z.string().email(),
subject: z.string(),
body: z.string(),
}),
handler: async ({ input, jobId, attempt }) => {
// your logic here
return { sent: true };
},
defaults: {
retries: 3,
backoff: "exponential",
},
}),
});
export type JobRouter = typeof jobs;

The client gives you a type-safe way to enqueue jobs:

src/jobs/client.ts
import { createClient } from "@queuebase/nextjs";
import { jobs } from "./index";
export const jobClient = createClient(jobs, {
apiUrl: process.env.QUEUEBASE_API_URL ?? "http://localhost:3847",
apiKey: process.env.QUEUEBASE_API_KEY,
callbackUrl:
process.env.QUEUEBASE_CALLBACK_URL ??
"http://localhost:3000/api/queuebase",
});

This is the endpoint Queuebase calls to execute your jobs:

src/app/api/queuebase/route.ts
import { createHandler } from "@queuebase/nextjs/handler";
import { jobs } from "@/jobs";
export const POST = createHandler(jobs);

Call .enqueue() from a server action, route handler, or anywhere server-side:

import { jobClient } from "@/jobs/client";
const { jobId, getStatus } = await jobClient.sendEmail.enqueue({
to: "user@example.com",
subject: "Welcome",
body: "Hello!",
});
Terminal window
npx queuebase dev

This starts a local Queuebase server on port 3847 that stores jobs in SQLite and polls/executes them by calling back to your app.

Start your Next.js app in another terminal (npm run dev) and you’re ready to go.