Inngest

Dispatch portable Playstack queue jobs through Inngest and serve the generated functions from Next.js, NestJS, or another supported framework.

Visit Inngest ↗

Supported features

Events and workflows

Carry typed domain events, operation context, transactional delivery, and replay-safe processing across application boundaries.

Background jobs and workflows

Notifications and delivery

Define typed notifications, resolve recipient preferences, deliver across explicit channels, and retain one provider-independent history of every send.

Multi-channel delivery

Audiences and subscriber lifecycle

Build waitlists, newsletters, release lists, and preference centers with explicit consent, segmentation, confirmation, and delivery boundaries.

Broadcast delivery

Content and AI

Model portable content operations and compose AI-assisted generation through explicit providers, schemas, policy, and application-owned publication workflows.

Content workflows

Webhooks

Verify provider requests from raw bytes, claim events transactionally, enqueue normalized work exactly once, and keep provider parsing outside domain handlers.

Transactional receipt claims

GitHub App access

Authenticate GitHub App installations and compose application-owned repository access workflows with scoped, short-lived tokens.

Reconciliation workflows

Package reference

@playstack/queues

Portable jobs, managed execution

@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.

ts
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,
})

Serve from Next.js or NestJS

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.

Go

Playstack Pro tag
OriginsPricingBlogNewsletterChangelogStatusRoadmap
ContributorsCommunityIn Use ShowcaseCase StudiesPartnersSponsors
FAQsSupportContact

© 2026 Playstack. All rights reserved.

With OSS
Terms of ServicePrivacy PolicyCookie PolicyImprint

By

Commune Software