Background Jobs
Type-safe job queue for background processing.
Package: @repo/queue Built on: pg-boss (PostgreSQL)
Define a Job
// lib/queue/jobs/sendEmailJob.server.ts
import { createJob } from '@repo/queue'
import { renderEmail } from '@repo/notifications'
import { sendEmail } from '$lib/library/sendEmail.server'
import z from 'zod/v4'
export const sendDemoRequestEmailJob = createJob({
name: 'send-demo-request-email',
input: z.object({
email: z.string().email(),
name: z.string(),
}),
handler: async (payload) => {
const html = renderEmail(EmailTemplate, payload)
await sendEmail({
to: payload.email,
subject: 'Demo Request',
html,
})
},
})
Setup Queue Runtime
// lib/queue/runtime.server.ts
import { createQueueRuntime } from '@repo/queue'
import { createPgBossAdapter } from '@repo/queue/adapters/pg-boss'
import { sendDemoRequestEmailJob } from '$lib/queue/jobs/sendEmailJob.server'
export const queueRuntime = createQueueRuntime({
queues: [
{ name: 'default', priority: 0 },
],
adapter: createPgBossAdapter({
connectionString: env.DATABASE_URL,
}),
workers: [
{
job: sendDemoRequestEmailJob,
queues: 'default',
},
],
})
Dispatch a Job
await sendDemoRequestEmailJob.dispatch({
email: 'user@example.com',
name: 'John',
})
Full Documentation
See @repo/queue for complete API reference.