framework
Next.js
Compose Playstack server contracts, React bindings, SSR handoff, and route adapters at the Next.js application edge.
Model portable content operations and compose AI-assisted generation through explicit providers, schemas, policy, and application-owned publication workflows.
available
Represent source, normalized metadata, transformation state, and publication intent without binding the domain to a CMS or framework.
Packages
available
Validate model input and output against application schemas while keeping provider selection and native clients explicit.
Packages
available
Carry reviewable operations through events and queues before publishing to application-owned stores, pages, or feeds.
framework
Compose Playstack server contracts, React bindings, SSR handoff, and route adapters at the Next.js application edge.
framework
Connect portable Playstack capabilities to dependency injection, guards, decorators, request context, workers, and lifecycle hooks.
integration
Reuse Zod schemas across Playstack content, React forms, wire validation, and NestJS request boundaries.
integration
Dispatch and process typed Playstack jobs through BullMQ with explicit Redis ownership and native queue access.
integration
Dispatch portable Playstack queue jobs through Inngest and serve the generated functions from Next.js, NestJS, or another supported framework.
AI can propose, classify, extract, and transform. It should not quietly become the source of publication truth. Playstack keeps application-owned content records at the center and treats model calls as typed operations with observable inputs and outputs.
import { createAi } from '@playstack/ai'
const ai = createAi({
persistence,
events,
connections,
rateLimiter,
entitlements,
connectionScope: 'account',
allowPlatformFallback: false,
providers: [
{
id: 'anthropic',
createModel: (modelId, { apiKey }) => anthropic(modelId, { apiKey }),
},
],
prices,
})
const summary = await ai.generateObject({
operation: 'article.summary',
input: articleSummaryInput,
output: articleSummaryOutput,
value: { title: article.title, body: article.body },
})Provider-specific controls remain available through the configured adapter. The portable path owns schema validation, operation identity, usage context, and stable failure behavior.
await contentWorkflow.enqueue('article.prepare', {
contentId: article.id,
revision: article.revision,
})A worker can enrich metadata, request human review, and publish the accepted revision to a site or feed. Idempotency keys include the content revision so a retry cannot publish an obsolete generation over a newer edit.