Files
stanza/apps/web/content/docs/registry.mdx
T
jake 678b5bc1af feat: add ui-shadcn-base, ui-shadcn-radix, and ui-tailwind modules; rename styling category to ui
- Rename `styling` → `ui` across the entire codebase (CATEGORIES array, docs, AGENTS.md, CLI tests, resolver, template tests, codemod runner); `ui` is `home: package` so shadcn installs into `packages/ui/` as a workspace dep rather than wiring directly into the app shell
- Add `ui-shadcn-base` (Tailwind v4 / CSS-first, no Radix peer) and `ui-shadcn-radix` (Tailwind v4 + Radix primitives) with full per-framework template sets for Next.js and TanStack Start: `components.json`, `globals.css`, `postcss.config.mjs`, `theme-provider.tsx`, shared `Button` + `utils.ts`; light/dark logos inlined from svgl
- Rename `styling-tailwind` → `ui-tailwind` to match the new category id; update its module definition to `category: "ui"` and `home: package`
- Add four new codemod builtins with tests: `add-array-entry-in-call` (inserts an element into a named array argument of any `CallExpression`), `replace-import` (rewrites a specifier in an existing import declaration), `set-html-attributes` (sets attributes on an HTML/JSX element by tag name or selector), `set-tsconfig-paths` (merges `compilerOptions` entries into a `tsconfig.json` AST node); register all four in the builtins index and export from `@stanza/codemods`
- Add `wrap-root-layout` builtin tests
- Update registry.mdx, concepts.mdx, cli.mdx, getting-started.mdx, agents.mdx, index.mdx, AGENTS.md, README.md, TODO.md, and SKILL.md to reflect the category rename and new modules
2026-05-25 15:26:08 -04:00

12 KiB

title, description
title description
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. Self-hosted registries can add their own modules — see the open registry.

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 many 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 🟨 Planned ai package + provider sub-recipes.
tanstack-ai 🟨 Planned TanStack AI.

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.

Email

Single-choice, installs into packages/email/.

Module Status Notes
resend 🟨 Planned Resend SDK + React Email templates.

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
turborepo 🟢 Available Turbo 2.x (current default; not yet exposed as configurable).
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