Events and workflows
Carry typed domain events, operation context, transactional delivery, and replay-safe processing across application boundaries.
Background jobs and workflows
Dispatch and process typed Playstack jobs through BullMQ with explicit Redis ownership and native queue access.
Visit BullMQ ↗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/bullmq maps namespaced Playstack jobs, retries, backoff, delays, custom job IDs, trace context, progress, inspection, cancellation, and schedules onto BullMQ queues and workers.
import { createQueue } from '@playstack/queues'
import { createBullMqQueueDriver, createBullMqWorker } from '@playstack/queues/bullmq'
const connection = { host: '127.0.0.1', port: 6379 }
const driver = createBullMqQueueDriver({
app: 'billing',
environment: 'production',
queue: 'emails',
connection,
})
export const emails = createQueue('emails', {
app: 'billing',
environment: 'production',
driver,
})Workers receive an explicit job registry and application dependency factory. The portable control plane covers progress subscriptions, bounded job inspection, counts, inactive cancellation, and interval or cron schedules. BullMQ-native priorities, flows, rate limits, and advanced worker settings remain accessible through the exposed client.
@playstack/nest-queues adds named queue injection, handler discovery, and optional worker lifecycle management without hiding BullMQ's native producer, worker, or control connections.
BullMQ versions >=5.16.0 <7 are supported. The CLI validates the declared consumer range instead of treating any installed BullMQ version as compatible.
Use a Redis instance configured with maxmemory-policy noeviction; do not share durable queue state with an evictable cache. The application owns connection health, worker deployment, and shutdown.
BullMQ >=5.16 <7 is supported; selected monitoring integrations retain their own peer restrictions. assertBullMqRedisNoEviction(queue.client) is a fail-closed startup/readiness check, distinct from the non-blocking dispatch observer. It fails if the policy is incompatible or cannot be verified.
The optional Queuebert bridge preserves reviewed native queues and processor statistics. Set a per-queue expectedPrefix for an existing physical namespace instead of renaming queues. The bridge does not start workers or authorize administrative HTTP. A job/processor migration still needs drain, cutover and rollback decisions.