Stack

Rule

Preferred technologies for new projects. See versions.md for minimum version requirements.

Foundation (MUST)

Every project uses these. Non-negotiable.

TechnologyPurposeNotes
Next.jsFrameworkApp Router, Turbopack, proxy.ts. See nextjs.md
ReactUIref-as-prop, use() hook, useActionState. See versions.md
TypeScriptLanguageStrict mode. See typescript.md
Tailwind CSSStylingCSS-first config, @theme, @source. See tailwind.md
ZodValidationSchema validation for forms, env, API boundaries
pnpmPackage managerNot npm or yarn
Biome + UltraciteFormatting/lintingSingle tool, Rust-based. See code-style.md
VercelHostingDeployment, preview environments, cron jobs
TanStack React QueryServer stateMUST for all client-side data fetching
Vercel AI SDK 6AI integrationMUST for any AI features. See ai-sdk.md for v6 API changes. Run /arc:ai for guided setup

Default (SHOULD)

Strong preference. Use unless there's a specific reason not to.

Database

  • Neon — Serverless PostgreSQL with branching and instant scaling
  • Drizzle ORM — Type-safe, SQL-like syntax, db:push workflow for development

Auth

  • Clerk — Pre-built UI components, social logins, organizations, webhook sync

API

  • tRPC 11 — Typesafe client data layer. See api.md for conventions.
  • OpenAPI 3.1 — Specification for HTTP APIs. Generate from code, never hand-write.

CLI

  • Commander + Ink — Dual-mode CLI (scripted + interactive). See cli.md for conventions.

UI

  • shadcn — Scaffolded components copied into the project, not a dependency
  • Radix UI — Accessible primitives for dialogs, dropdowns, popovers, etc.
  • CVA (class-variance-authority) — Component variant definitions
  • Motion — Animation library, respects prefers-reduced-motion
  • Alternative: Base UI as an unstyled primitive option

State

  • nuqs — Type-safe URL search params. Use for filters, tabs, pagination, expanded panels. URL is the source of truth.
  • Zustand — Global client state (persistence, selectors, devtools)

Forms

  • Native <form> + Zod for simple forms
  • React Hook Form + Zod for complex multi-step forms

Code Quality

  • Husky + lint-staged — Pre-commit hooks
  • Playwright — E2E testing
  • Vitest — Unit testing

Contextual (MAY)

Proven options for specific needs. Install when the project requires them.

Edge / Workers

  • Cloudflare Workers — Edge compute for API gateways, proxies, and lightweight services. See cloudflare-workers.md
  • Hono — Lightweight web framework for Workers (alternative to raw fetch handler)

Monorepo

  • Turborepo — When the app demands multiple packages/apps, or could demand it in the near future

Analytics & Monitoring

  • PostHog — Product analytics, user identification, feature flags
  • Sentry — Error tracking, source maps, session replay

Email

  • Resend — Transactional email delivery
  • React Email — Email templates as React components

Files

  • UploadThing — Type-safe file upload routers

AI

  • OpenRouter — Multi-model API access (Claude, Gemini, etc.). Use with AI SDK via @openrouter/ai-sdk-provider
  • fal.ai — Image generation (GPT-Image, Flux, etc.)
  • Voyage AI — Embeddings for semantic search and RAG

Native

  • React Native — Cross-platform native apps
  • Expo — Managed workflow, OTA updates, build service
  • For React Native patterns, install the vercel-react-native-skills skill

Rejected Alternatives (NEVER)

When AI agents or contributors suggest these, redirect to the preferred option.

NeverUse InsteadWhy
PrismaDrizzleLighter, SQL-like, better serverless perf
ESLint / PrettierBiomeSingle tool, faster, zero config with Ultracite
npm / yarnpnpmFaster installs, strict dependency resolution
NextAuth / Auth.jsClerkPre-built UI, managed infrastructure, orgs
Redux / MobXZustand (or server state)Simpler API, smaller bundle, no boilerplate
Styled Components / CSS ModulesTailwindUtility-first, no runtime cost, design tokens via CSS
JestVitestFaster, ESM-native, compatible API
CypressPlaywrightFaster, multi-browser, better DX