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 cardinality — one (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.
| Category | Cardinality | Home | What it covers |
|---|---|---|---|
framework | one | app | App shell + router (Next, TanStack Start, Expo, …) |
api | one | package | Typed RPC layer between framework and services |
ai | one | package | AI SDK + provider wiring |
auth | one | package | Authentication (Better Auth, Clerk, …) |
db | one | package | Database driver (Postgres, SQLite) |
orm | one | package | Schema + query layer (Drizzle, Prisma) |
ui | one | package | Styling system + component primitives (Tailwind, shadcn, …) |
payments | one | package | Checkout + webhooks (Stripe, Polar, …) |
email | one | package | Transactional email (Resend) |
tooling | one | repo | Lint/format toolchain |
testing | many | app | Unit + e2e (Vitest, Playwright) |
deploy | many | repo | Deploy targets (Vercel, Cloudflare, …) |
monorepo | one | repo | Monorepo 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.
| Module | appKind | Status | Notes |
|---|---|---|---|
tanstack-start | web | 🟢 Available | TanStack Start on Vite (no Vinxi). Provides web, react, ssr, node. |
next | web | 🟢 Available | Next.js 16 (App Router). Provides web, react, ssr, rsc, node, edge. |
nuxt | web | 🟨 Planned | Vue. Requires relaxing the React-implicit assumption in peer modules (capability vue). |
svelte | web | 🟨 Planned | SvelteKit (capability svelte). |
solid | web | 🟨 Planned | SolidStart (capability solid). |
expo | native | 🟨 Planned | Expo + 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.
| Module | Status | Notes |
|---|---|---|
trpc | 🟨 Planned | tRPC v11; per-framework adapters. |
orpc | 🟨 Planned | oRPC. |
AI
Single-choice, constraint-bearing, installs into packages/ai/.
| Module | Status | Notes |
|---|---|---|
vercel-ai-sdk | 🟢 Available | ai + @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/.
| Module | Status | Notes |
|---|---|---|
better-auth | 🟢 Available | Local data. Peers on orm and framework. |
clerk | 🟢 Available | Hosted database & UI. Peers on framework. |
workos | 🟨 Planned | WorkOS AuthKit. |
Database
Single-choice, installs into packages/db/.
| Module | Status | Notes |
|---|---|---|
postgres | 🟢 Available | postgres driver. |
sqlite | 🟢 Available | better-sqlite3 driver. |
ORM
Single-choice, shares packages/db/ with the database driver.
| Module | Status | Notes |
|---|---|---|
drizzle | 🟢 Available | Drizzle ORM 0.45. Peers on db (postgres, sqlite). |
prisma | 🟢 Available | Prisma 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, …).
| Module | For | Status | Notes |
|---|---|---|---|
tailwind | web | 🟢 Available | Bare Tailwind v4 in packages/ui/; apps re-export postcss config. |
shadcn-radix | web | 🟢 Available | shadcn/ui registry preset radix-nova (Radix primitives) + Tailwind. |
shadcn-base | web | 🟢 Available | shadcn/ui registry preset base-nova (Base UI) + Tailwind. |
nativewind | native | 🟨 Planned | Tailwind-style className API for React Native. |
unistyles | native | 🟨 Planned | Native StyleSheet with theme + breakpoint support. |
Payments
Single-choice, constraint-bearing. Installs into packages/payments/, plus a Better Auth plugin when auth is selected.
| Module | Status | Notes |
|---|---|---|
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 | 🟢 Available | stripe 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 | 🟨 Planned | Autumn. |
dodo | 🟨 Planned | Dodo Payments. |
Single-choice, installs into packages/email/.
| Module | Status | Notes |
|---|---|---|
resend | 🟢 Available | resend 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.
| Module | Status | Notes |
|---|---|---|
eslint-prettier | 🟢 Available | ESLint flat config + Prettier; per-framework adapters. |
biome | 🟢 Available | Biome (lint + format), framework-agnostic. |
oxlint-oxfmt | 🟢 Available | Oxlint + oxfmt, framework-agnostic. |
Testing
Coexisting, app-scoped. Vitest and Playwright are independent and routinely run side by side.
| Module | Status | Notes |
|---|---|---|
vitest | 🟢 Available | Unit + integration; jsdom + RTL; test/test:watch scripts. |
playwright | 🟢 Available | e2e; per-framework webServer; test:e2e/test:e2e:ui scripts. |
Deploy
Coexisting, repo-scoped.
| Module | Status | Notes |
|---|---|---|
vercel | 🟨 Planned | vercel.json + framework-specific output. |
cloudflare | 🟨 Planned | Workers / Pages adapter per framework (e.g. Vite plugins, wrangler.json, …). |
railway | 🟨 Planned | railway.toml + Dockerfile. |
docker | 🟨 Planned | Generic Dockerfile + compose for self-host. |
Monorepo
Coexisting, repo-scoped. Currently hardcoded as Turborepo; becomes a real configurable category when a second option lands.
| Module | Status | Notes |
|---|---|---|
turbo | 🟢 Available | Turborepo v2 |
vite-plus | 🟨 Planned | Locked 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.
| Manager | Status |
|---|---|
| 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.