Repository: kriasoft/react-starter-kit
Stars: 23560
CLAUDE.md
@AGENTS.md
Claude-Specific Guidance
- Use /plan for multi-file or architectural changes.
- Prefer slash commands from .claude/commands/ when available.
README.md
<div align="center">
React Starter Kit
<a href="https://reactstarter.com/getting-started/"><img src="https://img.shields.io/badge/Docs-007ec6" height="20"></a>
<a href="https://github.com/kriasoft/react-starter-kit?sponsor=1"><img src="https://img.shields.io/badge/-GitHub-%23555.svg?logo=github-sponsors" height="20"></a>
<a href="https://discord.gg/2nKEnKq"><img src="https://img.shields.io/discord/643523529131950086?label=Chat" height="20"></a>
<a href="https://chatgpt.com/g/g-69564f0a23088191846aa4072bd9397d-react-starter-kit-assistant"><img src="https://img.shields.io/badge/Ask_ChatGPT-10a37f?logo=openai&logoColor=white" height="20"></a>
<a href="https://gemini.google.com/gem/1IXFElQ2UvvZY86iL6uZLeoC-r8mp-OB-?usp=sharing"><img src="https://img.shields.io/badge/Ask_Gemini-8E75B2?logo=googlegemini&logoColor=white" height="20"></a>
<a href="https://github.com/kriasoft/react-starter-kit/stargazers"><img src="https://img.shields.io/github/stars/kriasoft/react-starter-kit.svg?style=social&label=Star&maxAge=3600" height="20"></a>
<a href="https://x.com/ReactStarter"><img src="https://img.shields.io/twitter/follow/ReactStarter.svg?style=social&label=Follow&maxAge=3600" height="20"></a>
</div>
A full-stack monorepo template for building SaaS applications with React 19, tRPC, and Cloudflare Workers. Type-safe from database to UI, deployable to the edge in minutes.
Highlights
- Type-safe full stack — TypeScript, tRPC, and Drizzle ORM create a single type contract from database to UI
- Edge-native — Three Cloudflare Workers (web, app, api) connected via service bindings
- Auth + billing included — Better Auth with email OTP, passkey, Google OAuth, organizations, and Stripe subscriptions
- Modern React — React 19, TanStack Router (file-based), TanStack Query, Jotai, Tailwind CSS v4, shadcn/ui
- Database ready — Drizzle ORM with Neon PostgreSQL, migrations, and seed data
- Fast DX — Bun runtime, Vite, Vitest, ESLint, Prettier, and pre-configured VS Code settings
React Starter Kit is proudly supported by these amazing sponsors:
<a href="https://reactstarter.com/s/1"><img src="https://reactstarter.com/s/1.png" height="60" /></a> <a href="https://reactstarter.com/s/2"><img src="https://reactstarter.com/s/2.png" height="60" /></a> <a href="https://reactstarter.com/s/3"><img src="https://reactstarter.com/s/3.png" height="60" /></a>
Technology Stack
| Layer | Technologies |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Runtime | Bun, Cloudflare Workers, TypeScript 5.9 |
| Frontend | React 19, TanStack Router, Tailwind CSS v4, shadcn/ui, Jotai |
| Marketing | Astro |
| Backend | Hono, tRPC, Better Auth, Stripe |
| Database | Drizzle ORM, Neon PostgreSQL |
| Tooling | Vite, Vitest, ESLint, Prettier |
Monorepo Architecture
├── apps/
│ ├── web/ Astro marketing site (edge router, serves static + proxies to app/api)
│ ├── app/ React 19 SPA (TanStack Router, Jotai, Tailwind CSS v4)
│ ├── api/ Hono + tRPC API server (Better Auth, Cloudflare Workers)
│ └── email/ React Email templates
├── packages/
│ ├── ui/ shadcn/ui components (new-york style)
│ ├── core/ Shared types and utilities
│ └── ws-protocol/ WebSocket protocol with type-safe messaging
├── db/ Drizzle ORM schemas, migrations, and seed data
├── infra/ Terraform (Cloudflare Workers, DNS, Hyperdrive)
├── docs/ VitePress documentation
└── scripts/ Build automation and dev toolsEach app deploys independently to Cloudflare Workers. The web worker routes /api/* to the API worker and app routes to the app worker via service bindings.
Prerequisites
- Bun v1.3+ (replaces Node.js and npm)
- VS Code with our recommended extensions
- React Developer Tools browser extension (recommended)
- Cloudflare account for deployment
Quick Start
1. Create Your Project
Generate a new repository from this template, then clone it locally:
git clone https://github.com/your-username/your-project-name.git
cd your-project-name2. Install Dependencies
bun install3. Configure Environment
This project follows Vite env conventions:
- .env is committed and contains shared defaults/placeholders only (no real secrets)
- .env.local is git-ignored and should contain your real credentials
- .env.local values override .env
cp .env .env.local # then replace placeholder values with real onesAlso check wrangler.jsonc for Worker configuration and bindings.
4. Start Development
Launch all apps in development mode (web, api, and app)
bun devOr, start specific apps individually
bun web:dev # Marketing site
bun app:dev # Main application
bun api:dev # API server5. Initialize Database
Ensure DATABASE_URL is configured in your .env.local file, then set up the schema:
bun db:push # Push schema directly (quick dev setup)
bun db:seed # Seed with sample data (optional)
bun db:studio # Open database GUIFor production, use bun db:migrate to apply migrations instead of db:push.
| App | URL |
| -------------- | ----------------------- |
| React app | <http://localhost:5173> |
| Marketing site | <http://localhost:4321> |
| API server | <http://localhost:8787> |
Production Deployment
1. Environment Setup
Configure your production secrets in Cloudflare Workers:
Required secrets
bun wrangler secret put BETTER_AUTH_SECRETStripe billing (optional — first 4 required to enable, annual is optional)
bun wrangler secret put STRIPE_SECRET_KEY
bun wrangler secret put STRIPE_WEBHOOK_SECRET
bun wrangler secret put STRIPE_STARTER_PRICE_ID
bun wrangler secret put STRIPE_PRO_PRICE_ID
bun wrangler secret put STRIPE_PRO_ANNUAL_PRICE_ID # optionalOAuth providers (as needed)
bun wrangler secret put GOOGLE_CLIENT_ID
bun wrangler secret put GOOGLE_CLIENT_SECRETEmail service
bun wrangler secret put RESEND_API_KEYAI features (optional)
bun wrangler secret put OPENAI_API_KEYRun these commands from the target app directory or pass --config apps/<app>/wrangler.jsonc. Non-sensitive vars like RESEND_EMAIL_FROM go in wrangler.jsonc directly.
2. Build and Deploy
Build packages that require compilation (order matters!)
bun email:build # Build email templates first
bun web:build # Build marketing site
bun app:build # Build main React appDeploy all applications
bun web:deploy # Deploy marketing site
bun api:deploy # Deploy API server
bun app:deploy # Deploy main React appBackers
<a href="https://reactstarter.com/b/1"><img src="https://reactstarter.com/b/1.png" height="60" /></a> <a href="https://reactstarter.com/b/2"><img src="https://reactstarter.com/b/2.png" height="60" /></a> <a href="https://reactstarter.com/b/3"><img src="https://reactstarter.com/b/3.png" height="60" /></a> <a href="https://reactstarter.com/b/4"><img src="https://reactstarter.com/b/4.png" height="60" /></a> <a href="https://reactstarter.com/b/5"><img src="https://reactstarter.com/b/5.png" height="60" /></a> <a href="https://reactstarter.com/b/6"><img src="https://reactstarter.com/b/6.png" height="60" /></a> <a href="https://reactstarter.com/b/7"><img src="https://reactstarter.com/b/7.png" height="60" /></a> <a href="https://reactstarter.com/b/8"><img src="https://reactstarter.com/b/8.png" height="60" /></a>
Contributors
<a href="https://reactstarter.com/c/1"><img src="https://reactstarter.com/c/1.png" height="60" /></a> <a href="https://reactstarter.com/c/2"><img src="https://reactstarter.com/c/2.png" height="60" /></a> <a href="https://reactstarter.com/c/3"><img src="https://reactstarter.com/c/3.png" height="60" /></a> <a href="https://reactstarter.com/c/4"><img src="https://reactstarter.com/c/4.png" height="60" /></a> <a href="https://reactstarter.com/c/5"><img src="https://reactstarter.com/c/5.png" height="60" /></a> <a href="https://reactstarter.com/c/6"><img src="https://reactstarter.com/c/6.png" height="60" /></a> <a href="https://reactstarter.com/c/7"><img src="https://reactstarter.com/c/7.png" height="60" /></a> <a href="https://reactstarter.com/c/8"><img src="https://reactstarter.com/c/8.png" height="60" /></a> <a href="https://reactstarter.com/c/9"><img src="https://reactstarter.com/c/9.png" height="60" /></a> <a href="https://reactstarter.com/c/10"><img src="https://reactstarter.com/c/10.png" height="60" /></a> <a href="https://reactstarter.com/c/11"><img src="https://reactstarter.com/c/11.png" height="60" /></a> <a href="https://reactstarter.com/c/12"><img src="https://reactstarter.com/c/12.png" height="60" /></a> <a href="https://reactstarter.com/c/13"><img src="https://reactstarter.com/c/13.png" height="60" /></a>
Need Help?
Documentation covers auth, database, billing, deployment, and more.
Our AI assistant is trained on this codebase — ask it anything on ChatGPT or Gemini. Try these questions:
- How do I add a new tRPC endpoint?
- Help me create a database table
- How does authentication work?
- Explain the project structure
- How do I deploy to Cloudflare?
- Add a new page with routing
- How do I send emails?
Contributing
See the Contributing Guide to get started. Check good first issues or join Discord for discussion.
License
Copyright © 2014-present Kriasoft. This source code is licensed under the MIT license found in the
LICENSE file.
---
<sup>Made with ♥ by Konstantin Tarkus (@koistya, blog)
and contributors.</sup>