ZeroStarter
Starter for Enterprise

Production‑ready SaaS infrastructure with world‑class human and agent DX

Modern, type-safe/RPC starter monorepo with foundations for building scalable SaaS products with clean architecture, automation, and great developer experience.

Quickstart
bunx zerostarter init
bun run dev

Powered by portless: named .localhost URLs that never collide across worktrees and share one sign-in.

Base UIBase UI
Better AuthBetter Auth
BunBun
DockerDocker
Drizzle ORMDrizzle ORM
FumadocsFumadocs
HonoHono
Next.jsNext.js
OxcOxc
PostgreSQLPostgreSQL
PostHogPostHog
ReactReact
shadcn/uishadcn/ui
Tailwind CSSTailwind CSS
TanStack QueryTanStack Query
tsdowntsdown
TurborepoTurborepo
TypeScriptTypeScript
VercelVercel
ZodZod
Base UIBase UI
Better AuthBetter Auth
BunBun
DockerDocker
Drizzle ORMDrizzle ORM
FumadocsFumadocs
HonoHono
Next.jsNext.js
OxcOxc
PostgreSQLPostgreSQL
PostHogPostHog
ReactReact
shadcn/uishadcn/ui
Tailwind CSSTailwind CSS
TanStack QueryTanStack Query
tsdowntsdown
TurborepoTurborepo
TypeScriptTypeScript
VercelVercel
ZodZod
Type safety

One contract from database to UI

Hono RPC exposes your API as a single AppType, so the client infers every request and response automatically. Rename a route and the frontend stops compiling. No codegen. No duplicated types. No drift.

web/next/src/lib/api/client.ts
import { apiClient, unwrap } from "@/lib/api/client"

// fully typed { data, error }
const { data, error } = await unwrap(apiClient.health.$get())
Infrastructure included

Wired together, not just installed

The boring, critical pieces every serious SaaS needs are already connected and working on first run. The dashboard and console ship as auth-gated shells, ready for your product logic.

Agents operate the real app, behind auth

SKILL.md playbooks, AGENTS.md, and generated llms.txt give Claude Code, Cursor, and Copilot the repo-specific context they need. A dev-only login lets agent-browser drive the running app for real, no mocks and no fixtures.

SKILL.mdllms.txtAGENTS.md
# sign an agent in, drive the app
agent-browser open "$(bunx portless get zerostarter)"
agent-browser snapshot   # read the UI
agent-browser click "@e5"   # act

Auth & organizations

GitHub and Google OAuth, secure sessions, organizations, teams, and admin roles wired through Better Auth.

Database & migrations

PostgreSQL and Drizzle on Bun's SQL driver, with migrations generated locally and applied automatically on Vercel deploys.

Deploy without assembly

Web and API deploy as two apps sharing one PostgreSQL database, with production and Docker configs included from the first commit. On Vercel, the API runs migrations during deploy.

VercelDockerPostgreSQL
# two Vercel projects, one database
vercel --prod

# or the whole stack, anywhere
docker compose up --build

Role-gated console

A protected /console area powered by the Better Auth admin plugin. Access control is handled; the product surface is yours.

Rate-limited API

Production-ready limits by IP, user, or API key, with Arcjet IP detection and environment-driven defaults.

Multi-tenant, day one

Organizations, teams, roles, invitations, and active-org switching are built into the dashboard from the first run.

Fork and rebrand

Edit one site.ts and the CLI rebrands the whole fork: name, dev URLs, and metadata. Re-baseline on the latest starter anytime with a single sync.

Indexable and shareable by default

takumi renders a unique social card for every page at request time, alongside a generated sitemap, robots, and metadata. The preview here is this page's own, rendered live.

Open Graph preview for this page

Docs agents can read

Fumadocs, full-text search, MDX content, and generated llms.txt make the project readable for developers, contributors, and coding agents.

Why ZeroStarter

Not another starter. A better default.

Most starters give you folders and dependencies. ZeroStarter gives you the decisions already made and wired: one file rebrands the fork, one command re-baselines it on upstream, and a canary-to-main pipeline versions and ships it. You inherit a way of building, not just a pile of code.

Minimal footprint, maximum leverage

Two apps over a few shared packages, one import graph. No framework soup to fight, no speculative layer to delete: every package earns its place.

Automation from PR to release

One canary-to-main flow runs the checks, writes the changelog, versions the repo, and cuts the release, so shipping never rides on remembering the steps.

Centralized where it matters

Brand, env, auth, schema, and build config each live in one file. Edit site.ts and the CLI rebrands the entire fork; the rest stay just as single-sourced.

Docs as part of the product

Structured docs, a generated API reference, and llms.txt ship with the code, and a strict build fails when a doc drifts, so onboarding stays true for humans and agents.

Start at zero. Ship like you have done this before.

ZeroStarter is the foundation for building real SaaS products with speed, clarity, and discipline: production-ready infrastructure, clean architecture, automated workflows, and documentation both humans and agents can trust. It does not choose your payments or email vendor; the parts that make your product yours stay yours.

Open source. Use it freely, including for commercial products.

Made by @nrjdalal