Next.js + Drizzle + Better Auth Starter
Next.js, Fullstack Next.js, PostgreSQL, Drizzle, tRPC, and Better-Auth form a single app configuration where one frontend framework owns the UI and server boundary. Better Fullstack can scaffold this exact compatibility-checked selection.
01 / selection
Stack at a glance
| Role | Technology | Repository description | Scope |
|---|---|---|---|
| Frontend | Next.js | React framework with hybrid rendering | Primary frontend |
| Backend | Fullstack Next.js | Use Next.js built-in API routes | Project-wide |
| Runtime | None | No specific runtime | Project-wide |
| Database | PostgreSQL | Advanced SQL database | Project-wide |
| ORM | Drizzle | TypeScript ORM | Scoped to the backend |
| API | tRPC | End-to-end typesafe APIs | Scoped to the backend |
| Authentication | Better-Auth | The most comprehensive authentication framework for TypeScript | Scoped to the backend |
| CSS | Tailwind CSS | Utility-first CSS framework | Scoped to Next.js |
| UI library | shadcn/ui | Re-usable components built with Radix and Tailwind | Scoped to Next.js |
02 / architecture
How the pieces fit
- The frontend and backend are separate primary stack parts.
- The selected frontend framework owns the server boundary through its self backend.
- Drizzle is scoped to the backend.
- tRPC is scoped to the backend.
- Better-Auth is scoped to the backend.
- Tailwind CSS is scoped to Next.js.
- shadcn/ui is scoped to Next.js.
- Tailwind CSS and shadcn/ui are selected together.
03 / output
What gets generated
The virtual generator produced 68 files across 27 directories. The output is a workspace.
Top-level entries
- ./.gitignore
- ./AGENTS.md
- ./CLAUDE.md
- ./README.md
- ./apps
- ./bunfig.toml
- ./package.json
- ./packages
- ./tsconfig.json
- ./turbo.json
Representative files
- README.md
- apps/web/package.json
- package.json
- packages/api/package.json
- packages/auth/package.json
- packages/config/package.json
- packages/db/package.json
- packages/env/package.json
04 / create
Create command
This is the canonical Bun command generated for the selection.
bun create better-fullstack@latest my-app --ecosystem typescript --frontend next --css-framework tailwind --ui-library shadcn-ui --shadcn-base radix --shadcn-style nova --shadcn-icon-library lucide --shadcn-color-theme neutral --shadcn-base-color neutral --shadcn-font inter --shadcn-radius default --backend self --runtime none --api trpc --auth better-auth --payments none --email none --file-upload none --logging none --observability none --feature-flags none --realtime none --job-queue none --caching none --rate-limit none --i18n none --search none --vector-db none --file-storage none --cms none --effect none --ai none --state-management none --forms react-hook-form --validation zod --testing vitest --animation none --database postgres --orm drizzle --db-setup none --package-manager bun --git --web-deploy none --server-deploy none --install --addons turborepo --examples none --ai-docs claude-md agents-md05 / builder
Open in the builder
- fe-w
- next
- rt
- none
- be
- self-next
- db
- postgres
06 / checks
Compatibility notes
Compatibility checked against Better Fullstack types version 2.3.0.
The generated record has 0 graph issues and 0 disabled selected options. This is a compatibility check, not a claim that this exact scaffold received a runtime smoke verification.
- Runtime is intentionally set to none.
- The selected shadcn/ui setup is paired with Tailwind CSS.
07 / fit
When to choose this shape
Choose this shape when one framework should own the UI, server routes, and application boundary.
08 / next
Related stacks and guide
Need a walkthrough? Read the related stack guide.
09 / faq
Questions
Is this combination supported?
It passes the repository's compatibility analysis, selected-option checks, stack graph validation, project schema parsing, and virtual generation. That result is described here as compatibility checked.
Does it generate one app or separate parts?
One frontend framework owns the UI and server boundary. The actual generated output uses a workspace layout.
How can I customize the selection?
Open the generated builder link above. Its query parameters reproduce this selection, and the builder can change compatible options before generating a new command.