Grit vs Next.js
They're not really the same tool. Next.js is a React framework that can also serve API routes; Grit is a Go backend, a generated React admin, and typed web/mobile/desktop clients from one command. In fact, Grit apps often use Next.js for the web frontend — the question is what runs behind it.
The short version
Reach for Next.js alone when the app is mostly a frontend — a marketing site, a content site, a dashboard whose data comes from a service you already run. Reach for Grit when you need a real backend — auth, roles, a database, jobs, an admin, an API several clients consume — and you don't want to assemble ten libraries to get there.
They compose
This isn't either/or. A Grit project's web app is Next.js (App Router). You get Next.js's rendering and SEO on the frontend and a Go API, admin, and typed clients behind it — instead of pushing database and auth logic into API routes that get hard to test and reuse.
Side by side
| Grit | Next.js (alone) | |
|---|---|---|
| Backend language | Go (Gin + GORM) | JavaScript / TypeScript |
| Typed API → client | Generated Go → TS + Zod | Manual, or tRPC add-on |
| Admin panel | Generated, Filament-like | Build it yourself |
| Auth + RBAC | Built in (roles + permissions) | Add a library (NextAuth, etc.) |
| Background jobs / cron | Built in (asynq) | External queue / service |
| File storage, email, cache | Built in (S3/R2, Resend, Redis) | Wire up each yourself |
| Mobile + desktop clients | Generated (Expo, Wails) | Not in scope |
| Database backups | Built in, scheduled + restore | Roll your own |
| Rendering / SSR / SEO | Next.js on the frontend | Best-in-class |
| Edge / serverless deploy | Container (self-host) | First-class (Vercel) |
Choose Grit when
- You need a real backend: database, auth, roles, jobs, an admin.
- More than one client will consume the API (web + mobile + admin).
- You want Go's performance and a single self-hosted binary.
- You'd rather generate CRUD than hand-write it for every model.
Choose Next.js alone when
- The app is frontend-first: marketing, content, docs, a storefront.
- Your data already lives in a CMS or a backend you run elsewhere.
- You want edge/serverless deploys on Vercel with zero infra.
- Your team is all-in on TypeScript and doesn't want a second language.
The honest trade-off
Grit adds a second language (Go) and expects you to run a container rather than deploy to the edge. In exchange you get a typed, testable backend and an admin you didn't build. If your product is essentially a frontend, that's overhead you don't need — use Next.js. If it's a product with a backend, pushing all of it into Next.js API routes is the overhead you'll feel later.
