MonoStack
Functionalities

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 { getGlobalDb } from '$lib/db/managedDb.server'
import { sendDemoRequestEmailJob } from '$lib/queue/jobs/sendEmailJob.server'

export const queueRuntime = createQueueRuntime({
  queues: [{ name: 'default', priority: 0 }],
  adapter: createPgBossAdapter({
    connectionString: env.DATABASE_URL,
    getDb: getGlobalDb,
  }),
  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.

On this page