Events and workflows
Carry typed domain events, operation context, transactional delivery, and replay-safe processing across application boundaries.
Background jobs and workflows
Dispatch portable Playstack queue jobs through Inngest and serve the generated functions from Next.js, NestJS, or another supported framework.
Visit Inngest ↗Carry typed domain events, operation context, transactional delivery, and replay-safe processing across application boundaries.
Background jobs and workflows
Define typed notifications, resolve recipient preferences, deliver across explicit channels, and retain one provider-independent history of every send.
Multi-channel delivery
Build waitlists, newsletters, release lists, and preference centers with explicit consent, segmentation, confirmation, and delivery boundaries.
Broadcast delivery
Model portable content operations and compose AI-assisted generation through explicit providers, schemas, policy, and application-owned publication workflows.
Content workflows
Verify provider requests from raw bytes, claim events transactionally, enqueue normalized work exactly once, and keep provider parsing outside domain handlers.
Transactional receipt claims
Authenticate GitHub App installations and compose application-owned repository access workflows with scoped, short-lived tokens.
Reconciliation workflows
@playstack/queues/inngest maps typed Playstack jobs onto namespaced Inngest events and generates a serve-ready Inngest function. Payload validation, retry policy, terminal-failure hooks, and trace propagation stay in the portable queue contract; concurrency, throttling, priorities, and workflows remain available through Inngest.
import { Inngest } from 'inngest'
import { createQueue } from '@playstack/queues'
import {
createInngestQueueDriver,
createInngestQueueFunction,
} from '@playstack/queues/inngest'
export const inngest = new Inngest({ id: 'billing' })
const driver = createInngestQueueDriver({
client: inngest,
app: 'billing',
environment: 'production',
queue: 'emails',
})
export const emails = createQueue('emails', {
app: 'billing',
environment: 'production',
driver,
})
export const emailJobs = createInngestQueueFunction({
client: inngest,
app: 'billing',
environment: 'production',
queue: 'emails',
jobs,
concurrency: 20,
})The generated function works with Inngest's official framework adapters. A Next.js App Router endpoint can export the handlers from inngest/next; a NestJS application can mount inngest/express on its HTTP adapter. The serving edge changes without changing the job definition or its application dependencies.
Inngest supports delayed jobs, bounded retries, fixed and exponential backoff, repeatable work, priorities, rate limiting, and flows. Custom Playstack jobId values are rejected because Inngest's 24-hour event deduplication does not satisfy the portable queue-scoped receipt contract. Keep side effects idempotent at the handler boundary.
See the @playstack/queues guide for complete Next.js and NestJS endpoint examples.