Skip to main content

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.