What is Grit?

A full-stack meta-framework for Go + React, batteries included.

6 mineasy

Welcome. By the end of this lesson you'll be able to explain — in about 30 seconds — what Grit is, who built it for what, and whether your next project is a fit. That's the only goal for the next 6 minutes.

The one-paragraph answer

Grit is a full-stack meta-framework that scaffolds production-ready apps in one command. It pairs a Go (Gin + GORM) backend with React on the front and ships every "battery" — auth, jobs, mail, file storage, AI, observability, security WAF, admin panel — out of the box. Instead of gluing 12 libraries together for a week, you run grit new my-app and start shipping product on day one.

What "meta-framework" actually means

A framework gives you patterns and primitives. A meta-framework gives you a framework + the conventions + the scaffolder + the day-one wiring. Three concrete differences:

  • Opinionated folder structure. You don't decide where handlers go vs. services vs. models — there's one place each, and every Grit project looks the same. That's a feature: every team member, every AI agent, every future-you can find what they need without thinking.
  • Code generation. grit generate resource Product writes the Go model, handler, service, Zod schema, TypeScript type, React Query hook, and admin panel resource — 7 files, one command, all wired correctly.
  • Batteries shipped, not described. Most frameworks tell you to "pick an auth library". Grit ships JWT + OAuth + 2FA out of the box, with the trusted-device flow already wired, and you can swap in WorkOS or Auth0 if you outgrow it.
Grit is not a no-code tool, not a CMS, and not a Backend-as-a-Service. You're writing real Go and real React. Grit just does the scaffolding-and-conventions part for you.

What you get day one

One grit new my-app later, you have:

my-app/
my-app/
ā”œā”€ā”€ apps/
│ ā”œā”€ā”€ api/ ← Go API (Gin + GORM)
│ │ ā”œā”€ā”€ cmd/server/ ← main.go entry point
│ │ └── internal/ ← models, handlers, services, middleware
│ ā”œā”€ā”€ web/ ← Next.js public site + product surface
│ └── admin/ ← Filament-style admin panel (Next.js)
ā”œā”€ā”€ packages/shared/ ← Zod schemas + TS types (used everywhere)
ā”œā”€ā”€ docker-compose.yml ← Postgres, Redis, MinIO, Mailhog
ā”œā”€ā”€ grit.json ← project metadata
└── .env ← random-generated secrets, ready for prod

Boot Docker, run the API + web + admin, log into the admin panel as the seeded user, and you have a working product skeleton. We'll do exactly that in chapter 2.

The tagline you'll see everywhere

Go + React. Built with Grit.

That's the elevator pitch — Go on the back, React on the front, meta-framework gluing them together. Memorise it. You'll repeat it to teammates, in interviews, and at meetups.

Quick check

Which of these would NOT be in a fresh `grit new my-app` output?

Try it

In your own words (one paragraph, ~30 seconds when read aloud): explain to a friend what Grit is and who would use it. Write the answer in notes.md — the file you'll grow throughout this course.

What's next

You now have the elevator pitch. The next lesson covers the more useful question: when should you reach for Grit, and when should you not? Trade-offs vs. plain Next.js, Rails, Laravel, and others — honestly compared.

Spot a typo? Have an idea?

Help us improve this lesson. One click opens a GitHub issue with the lesson URL pre-filled — suggest clearer wording, report a bug, or request more depth. The course keeps improving thanks to learners like you.

Suggest an improvement on GitHub