Compare

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

GritNext.js (alone)
Backend languageGo (Gin + GORM)JavaScript / TypeScript
Typed API → clientGenerated Go → TS + ZodManual, or tRPC add-on
Admin panelGenerated, Filament-likeBuild it yourself
Auth + RBACBuilt in (roles + permissions)Add a library (NextAuth, etc.)
Background jobs / cronBuilt in (asynq)External queue / service
File storage, email, cacheBuilt in (S3/R2, Resend, Redis)Wire up each yourself
Mobile + desktop clientsGenerated (Expo, Wails)Not in scope
Database backupsBuilt in, scheduled + restoreRoll your own
Rendering / SSR / SEONext.js on the frontendBest-in-class
Edge / serverless deployContainer (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.