Every full-stack app starts the same way: weeks of plumbing before a single feature ships. Grit asks a different question — what is the smallest set of commands that takes you from idea to a production-ready Go + React app?
The boilerplate tax
Before you write the feature that matters, you re-solve the same problems you solved on the last project — and the one before that. None of it is hard. All of it is slow.
That is months of work that produces zero product differentiation. Grit treats all of it as solved — generated, wired, and hardened the moment you scaffold.
Compress the work
$grit new my-app --triple$grit generate resource Product \$ --fields "name:string,price:float,stock:int"
One command, full stack
grit generate resource emits the Go model, service, handler, routes, Zod schema, TypeScript types, React Query hooks, and an admin page — all consistent, all type-safe.
func (h *ProductHandler) List(c *gin.Context) {var products []models.Producth.DB.Where("user_id = ?", c.GetString("user_id")).Order("created_at desc").Find(&products)c.JSON(http.StatusOK, gin.H{"data": products})}
export function useProducts() {return useQuery({queryKey: ['products'],queryFn: async () => {const res = await api.get('/api/products')return res.data.data as Product[]},})}
Why it holds up
Grit has an opinion on routing, queues, auth, storage, and AI — thousands of decisions an AI assistant never has to guess. It ships a SKILL.md so agents extend it correctly.
OWASP-2025 patterns baked in: SSRF defence, IDOR-safe ownership checks, CSRF, strict CSP, rate limiting, and a tamper-evident audit log — on day one, not day ninety.
Embed a SPA in the Go binary, split web / admin / API into a monorepo, go API-only, or add mobile and desktop. Same generators, same patterns, your call.
Install the CLI and scaffold a production-ready Go + React app in minutes.
$curl -fsSL https://gritframework.dev/install.sh | sh
Grit v3.31.51 · MIT licensed · Go + React