Skip to content
Documentation

Registry

The roadmap of first-party modules Stanza ships — what's available today and what's planned.

Every module fills exactly one category. This page is the canonical roadmap of the first-party modules Stanza ships: what's available today, and what's on the way.

Inspired by shadcn/ui, third parties can publish their own modules under any @scope and have users pull them in alongside these. See Third-party registries below, or the Authoring manual for the full implementation details.

Categories

A category has two independent properties: its cardinalityone (single-choice, like framework or auth) or many (coexisting, like testing) — and its home, where a module's output lands (app, repo, or package). See Concepts for the full mental model.

CategoryCardinalityHomeWhat it covers
frameworkoneappApp shell + router (Next, TanStack Start, Expo, …)
apionepackageTyped RPC layer between framework and services
aionepackageAI SDK + provider wiring
authonepackageAuthentication (Better Auth, Clerk, …)
dbonepackageDatabase driver (Postgres, SQLite)
ormonepackageSchema + query layer (Drizzle, Prisma)
uionepackageStyling system + component primitives (Tailwind, shadcn, …)
paymentsonepackageCheckout + webhooks (Stripe, Polar, …)
emailonepackageTransactional email (Resend)
toolingonerepoLint/format toolchain
testingmanyappUnit + e2e (Vitest, Playwright)
deploymanyrepoDeploy targets (Vercel, Cloudflare, …)
monorepoonerepoMonorepo task runner (Turborepo)

Single-choice categories with home: "app" (currently framework) are enforced per app — a multi-app project can pick next for the web app and expo for a native app side by side. See Concepts → Apps.

Framework

Single-choice per app — the chosen framework wires the app shell, router, and React (or future) runtime. Modules declare an appKind (web or native) which the runner uses to validate they're installed into a compatible app: you can't install Next.js into a kind: "native" app, or Expo into a kind: "web" one. A multi-app project can pick one framework per app.

ModuleappKindStatusNotes
tanstack-startweb🟢 AvailableTanStack Start on Vite (no Vinxi). Provides web, react, ssr, node.
nextweb🟢 AvailableNext.js 16 (App Router). Provides web, react, ssr, rsc, node, edge.
nuxtweb🟨 PlannedVue. Requires relaxing the React-implicit assumption in peer modules (capability vue).
svelteweb🟨 PlannedSvelteKit (capability svelte).
solidweb🟨 PlannedSolidStart (capability solid).
exponative🟨 PlannedExpo + React Native. Unblocks the first kind: "native" app.

API

Single-choice, constraint-bearing. An optional layer between the framework and the database or services, installed as its own workspace package.

ModuleStatusNotes
trpc🟨 PlannedtRPC v11; per-framework adapters.
orpc🟨 PlannedoRPC.

AI

Single-choice, constraint-bearing, installs into packages/ai/.

ModuleStatusNotes
vercel-ai-sdk🟢 Availableai + @ai-sdk/openai with a streaming /api/chat route. Peers on framework.
tanstack-ai🟢 Available@tanstack/ai + @tanstack/ai-openai with a streaming /api/chat route over SSE.

Authentication

Single-choice, installs into packages/auth/.

ModuleStatusNotes
better-auth🟢 AvailableLocal data. Peers on orm and framework.
clerk🟢 AvailableHosted database & UI. Peers on framework.
workos🟨 PlannedWorkOS AuthKit.

Database

Single-choice, installs into packages/db/.

ModuleStatusNotes
postgres🟢 Availablepostgres driver.
sqlite🟢 Availablebetter-sqlite3 driver.

ORM

Single-choice, shares packages/db/ with the database driver.

ModuleStatusNotes
drizzle🟢 AvailableDrizzle ORM 0.45. Peers on db (postgres, sqlite).
prisma🟢 AvailablePrisma 7. Peers on db (postgres, sqlite).

UI

Single-choice. Installs into packages/ui/ so styles + component primitives are shared across every app via workspace:*. Adapters branch on the active app's framework peer (PostCSS for Next, Vite plugin for TanStack Start, …).

ModuleForStatusNotes
tailwindweb🟢 AvailableBare Tailwind v4 in packages/ui/; apps re-export postcss config.
shadcn-radixweb🟢 Availableshadcn/ui registry preset radix-nova (Radix primitives) + Tailwind.
shadcn-baseweb🟢 Availableshadcn/ui registry preset base-nova (Base UI) + Tailwind.
nativewindnative🟨 PlannedTailwind-style className API for React Native.
unistylesnative🟨 PlannedNative StyleSheet with theme + breakpoint support.

Payments

Single-choice, constraint-bearing. Installs into packages/payments/, plus a Better Auth plugin when auth is selected.

ModuleStatusNotes
polar🟢 Available@polar-sh/sdk + framework-native route handlers. Bridge variant (when auth: better-auth is selected) ships @polar-sh/better-auth and wires the plugin into auth.ts; the Better Auth catchall serves checkout / portal / webhooks.
stripe🟢 Availablestripe SDK + Checkout Sessions / webhook route handlers. Bridge variant ships @better-auth/stripe; the Better Auth catchall serves /api/auth/stripe/webhook plus subscription endpoints.
autumn🟨 PlannedAutumn.
dodo🟨 PlannedDodo Payments.

Email

Single-choice, installs into packages/email/.

ModuleStatusNotes
resend🟢 Availableresend SDK + a sample react-email template; framework-native /api/webhook/resend Svix-verifier.

Tooling

Single-choice, repo-scoped. The three toolchains are mutually exclusive substitutes.

ModuleStatusNotes
eslint-prettier🟢 AvailableESLint flat config + Prettier; per-framework adapters.
biome🟢 AvailableBiome (lint + format), framework-agnostic.
oxlint-oxfmt🟢 AvailableOxlint + oxfmt, framework-agnostic.

Testing

Coexisting, app-scoped. Vitest and Playwright are independent and routinely run side by side.

ModuleStatusNotes
vitest🟢 AvailableUnit + integration; jsdom + RTL; test/test:watch scripts.
playwright🟢 Availablee2e; per-framework webServer; test:e2e/test:e2e:ui scripts.

Deploy

Coexisting, repo-scoped.

ModuleStatusNotes
vercel🟨 Plannedvercel.json + framework-specific output.
cloudflare🟨 PlannedWorkers / Pages adapter per framework (e.g. Vite plugins, wrangler.json, …).
railway🟨 Plannedrailway.toml + Dockerfile.
docker🟨 PlannedGeneric Dockerfile + compose for self-host.

Monorepo

Coexisting, repo-scoped. Currently hardcoded as Turborepo; becomes a real configurable category when a second option lands.

ModuleStatusNotes
turbo🟢 AvailableTurborepo v2
vite-plus🟨 PlannedLocked to Vite-compatible frameworks (TanStack, etc.) and modules.

Package manager

Not a category — a top-level field in stanza.json (packageManager: "pnpm" | "bun" | "npm"). The wizard prompts for it; codemods only ever touch package.json, never lockfiles.

ManagerStatus
pnpm🟢 Available (default)
bun🟢 Available
npm🟢 Available
yarn🛑 Not Planned

Third-party registries

The categories above are first-party — Stanza ships them under the default @stanza namespace. Anyone can publish additional modules under their own @scope and have users install them with stanza add <category> @scope/<id>. The category taxonomy itself stays first-party (third-party registries can't redefine it).

For consumers, declaring a registry is the full URL of its main JSON file in stanza.json:

{ "registries": { "@acme": "https://reg.acme.example/index.json" } }

For authors, the full module surface — defineModule, templates, codemods, the build pipeline, hosting, namespace conventions, and a worked example — lives in the Authoring manual.