The full-stack framework for Go & React. Batteries included.
Describe a resource once. Grit writes the Go model, API, migrations, TypeScript types, React hooks and admin screen, then ships it to the web, desktop and mobile from one repo.
curl -fsSL https://gritframework.dev/install.sh | sh- 1
grit new contacts --triple --nextAPI, web app and admin panel, with auth already working - 2
cd contacts - 3
pnpm installThe workspace, once - 4
grit generate resource Group \ --fields "name:string,description:text"Model, migration, API, types and an admin screen - 5
grit generate resource Contact --fields \ "name:string,email:email,phone:tel,\ photo:file:image,group:belongs_to:Group"A photo upload and a group picker, wired to the Group above - 6
grit startEverything, in parallel
Built on tools you already trust
{ How it works }
Seven commands. A working application.
The commands in the order you actually run them, and what each one leaves behind.

Sign in, register, reset, verify. Generated, themed, working.
{ Batteries included }
The parts you always end up building anyway.
In the box, wired together and documented, down to what isn't shipped.

Identity
Authentication, finished.
Access and refresh tokens in HttpOnly cookies, OAuth, TOTP two-factor, passkeys and sessions you can revoke.
Enter your 6-digit code
- 15 min
- access token
- 168 h
- refresh token
- 5 / 15 min
- login rate limit
Roles & permissions
Roles are rows, not code.
Every generated resource registers its own permissions.
| Products | View | Create | Edit | Delete |
|---|---|---|---|---|
| admin | yes | yes | yes | yes |
| editor | yes | yes | yes | no |
| viewer | yes | no | no | no |
Jobs & cron
Work that happens later.
Background jobs on asynq and Redis, cron schedules, durable workflows.
send_welcome_email
0 3 * * * nightly_backup
asynq · retries · dead letter
File storage
Uploads that know what they accept.
Presigned URLs, server-enforced accept lists.
contact-photo.webp 2.4 MB
S3 · R2 · MinIO
Realtime
Live, on every client.
A realtime hub that pushes updates to web, admin, mobile and desktop.
3 online
contact.updated · Ada edited “Kampala office”
AI gateway
One gateway. 100+ models.
With the same auth, rate limits and logging as the rest of your API.
POST /api/ai/chatGatewayClaude · GPT · Gemini · local
Pulse observability
Know what every route is doing.
- 124.2K
- requests
- 98.6%
- 2xx
- 125 ms
- fastest
Admin panel
A back office per resource.
Filters, export, grid entry, stats, trash and restore. Nine themes.
| Contact | Group | Status |
|---|---|---|
| Ada Nakato | Kampala | Active |
| Musa Okello | Nairobi | Invited |
| Jane Atim | Remote | Active |
Mail & payments
Email and billing, wired.
- Resend
- Stripe plugin
- Webhooks

50+
batteries: feature flags, optimistic locking, i18n, multi-tenant, push, offline-first desktop…
See them allSecurity & compliance
Hardened by default.
OWASP Top 10:2025, a WAF, a hash-chained audit log, and GDPR export and erasure.

Every request, on its way in
- request
- WAF
- rate limit
- CSRF
- auth
- RBAC
- handler
- GORM
- audit log
{ Make it yours }
One file describes the whole screen.
The generator writes it. Everything after that is yours to edit: the table, the form, the stats cards and where it sits in the sidebar.
import { defineResource } from "@/lib/resource";export const productResource = defineResource({name: "Product",slug: "products",endpoint: "/api/products",icon: "Package",label: { singular: "Product", plural: "Products" },// sheet · modal · page · modal-steps · page-stepsformView: "sheet",// Sidebar placementgroup: "Catalog", // section heading to sit underadminOnly: false, // hide from non-adminshidden: false, // keep routable, drop from the sidebartable: { /* columns, filters, actions, export, import */ },form: { /* fields, layout, steps, groups */ },// Four auto stat cards, or your ownstats: true,dashboard: { enabled: true },});
grit generate resource writes this file for you. Everything past that point is ordinary TypeScript you own. There is no regeneration step that overwrites your edits.
{ Every platform }
One framework. Every platform.
Web, desktop, mobile and a documented API, from one Go backend and one set of generated types. Every screenshot below is a real generated project, next to the commands that produce it.

A screenshot of a generated project, not a mockup.
A Next.js app and a real admin panel
Two front-ends against one Go API: a public web app and a resource-driven admin panel with tables, filters, multi-step forms and RBAC already wired up.
- 1
grit new myapp --tripleGo API + web app + admin panel - 2
cd myapp && docker compose up -dPostgres, Redis, MinIO, Mailhog - 3
pnpm install && grit migrate && grit seeddeps, tables, a demo admin login - 4
grit startall three, one terminal
Admin on :3001, web on :3000, API on :8080.
{ Authentication }
Auth you would otherwise spend a month on.
Sign-in pages, a JWT pair, revocable server-side sessions, Google and GitHub, passkeys, emailed sign-in links, a second factor by app or by email with backup codes, database-backed roles, and enterprise SSO over OIDC or SAML. Working on the first run, not a tutorial to follow.

The pages you would have built on day one
Login, register, forgot-password and reset-password, themed with the rest of the admin and wired to a Go API that already hashes with bcrypt and issues a JWT pair.
- Access token (15m) + refresh token (168h), both configurable
- HttpOnly cookies for the browser, Bearer headers for mobile and desktop
- CSRF enforced on cookie-authenticated mutations, transparent to Bearer clients
- Login rate-limited to 5 attempts / 15 min in production; register to 3
Not included, so you are not surprised later: there is no email-verification flow (the field exists and social sign-in sets it, but nothing sends a verification mail), and no API-key authentication; machine callers use the same JWT flow.
{ Developers and agents }
A framework for developers and agents.
Grit has opinions on everything: routing, queues, auth, storage, AI. That is thousands of decisions an AI agent does not have to make, and the code it writes lands in the same shape a person would have written.
- Generates Go + React from one CLI command
- Ships a SKILL.md so agents know the patterns
- AI Gateway: 100+ models via one API key
- OWASP 2025 hardened: secure by default
Let your AI build it
One prompt that installs the Grit skill, teaches your agent the framework, and links every concept it needs. Works in Claude Code, Cursor, Codex, Windsurf, Copilot or any chat.
func (h *AuthHandler) Login(c *gin.Context) {var req loginRequestif err := c.ShouldBindJSON(&req); err != nil {respond.ValidationError(c, err)return}// The query is the service's. Handlers read the request,// call one method, and write the answer.user, tokens, err := h.service().Login(h.ctx(c), req.Email, req.Password)if err != nil {// One code, one status, from the catalogue.// Unknown address and wrong password answer alike.respond.Error(c, err)return}respond.OK(c, gin.H{"user": user, "tokens": tokens})}
{ Deploy }
One command to a server you own.
Point it at a box with SSH and a domain. No platform lock-in, no YAML.
grit deploy --host deploy@server.com --domain myapp.comlocal
Build
Linux binary, CGO off, plus the frontend
scp
Upload
Over SSH to deploy@server.com
systemd
Run
A service with auto-restart
caddy
Serve
Reverse proxy and Let's Encrypt TLS
live
myapp.com
HTTPS, health-checked
It is a Go binary and some containers. Which means it runs anywhere: a $5 VPS, a managed platform, or your own Docker host. Fly, Railway, Render, Dokploy, Coolify, EC2 and Lightsail each have a guide with the actual steps, what it costs, and the thing that catches people out.

{ Benchmarks }
Speed is the easy half.
A generated Grit CRUD API against the same resource hand-built in six other frameworks. Then the half a benchmark cannot measure: how many of the 33 things a real product needs are already running the first time you open the app. Grit has 29. The 4 it does not have are in the table too, because a comparison where one column wins every row is not a comparison.
Requests per second, GET /products/:id
One indexed lookup and a JSON encode: the cleanest read of framework overhead





Each framework was run head to head against Grit, back to back, three times, medians reported, zero failed requests. 50 concurrent users, 4 CPUs and 2 GB per container, one shared Postgres, the same 10,000 rows, every framework on its own ORM. Bar heights are scaled within each pair, because each pair is a separate run. Compare the two bars inside a group, not heights across groups. The printed figures are the real measurements.
MethodologyRunning on day one
29/ 33
Production capabilities running the first time you open the app: identity, security, compliance, operations and reach. The next closest framework has 12.
See all 33 rows
Grit29
Encore.ts12Django11
Laravel7
Next.js3
Express0
{ Blueprints }
Whole applications, not snippets.
A blueprint is a real product in its own repository, built with Grit and kept current with it. Read how a thing is actually built, then take the parts you need.

WhatsApp
Realtime chat across web, mobile and desktop, on one Go API
Look at it
Instagram
Photo and video feed with an Expo app
Look at it
Kaya Goods
A shop: products, variants, cart and Stripe checkout
Look at it
7 more are on the list and named rather than hinted at. WhatsApp is open source; the rest are $10 each, or $20 a month for every one of them.
The whole catalogue{ Built with Grit }
Built with Grit.
Projects and products built with the Grit framework, and the people who keep it going.
GritCMS
SaaSSelf-hostable creator platform. Website builder, email marketing, courses, community.
Golang Battles
PlatformCompetitive Go coding platform with real-time WebSocket battles, ELO ranking, and sandbox execution.
GORM Studio
ToolVisual database browser for GORM. View tables, run queries, export data. Embedded in every Grit project.
Pulse
LibrarySelf-hosted observability SDK. Request tracing, DB monitoring, runtime metrics, Prometheus export.
Sentinel
SecurityWAF, rate limiting and brute-force protection, with an address that keeps attacking blocked automatically.
Scout
SecuritySecurity scanner you mount in your own API. Headers, TLS, DNS, exposed files, secrets, reachable CVEs, and your real route table.
gin-docs
LibraryZero-annotation API documentation generator for Gin. Auto-generates OpenAPI spec with Scalar UI.
- +
Submit your project
Built something with Grit? Get it listed.
Sponsors
Grit is free and MIT licensed. Sponsors fund the features, docs and releases, and get their name in front of everyone who builds with it.
This spot is open
Grit has no sponsors yet. Be the first, your logo goes at the top of this page, on the home page, in the README, and inside the CLI.
Become the founding sponsor{ FAQ }
Questions, answered.
Do I need to know Go to use Grit?
Basic Go knowledge helps, but Grit generates most of the code for you. The generated code follows clear patterns (handler → service → model) that are easy to extend. If you know any backend language, you'll pick it up fast.
Can I use Grit with an existing project?
Grit is designed for greenfield projects. It scaffolds the full project structure. However, you can use grit generate resource in existing Grit projects to add new features incrementally.
Is Grit production-ready?
Yes. Every scaffolded project includes JWT auth, RBAC, rate limiting (Sentinel), observability (Pulse), error handling, CORS, gzip compression, connection pooling, and graceful shutdown. It is designed for production from day one.
What's the difference between Single and Triple architecture?
Single embeds the React SPA into the Go binary via go:embed, leaving one file to deploy. Triple is a Turborepo monorepo with separate web app, admin panel, and API, and is the better fit for teams and complex products.
Can I switch from Next.js to TanStack Router later?
The backend (Go API) is identical regardless of frontend choice. You would need to rebuild the frontend pages, but all hooks, types, and API patterns are the same. The admin panel components are also framework-agnostic React.
How does grit deploy work? Is it like Vercel?
grit deploy is for self-hosted deployments. It SSHs to your server, uploads the binary, configures systemd, and sets up Caddy with auto-TLS. For Vercel or Railway, push to git and the Dockerfile is included.
Is Grit open source?
Yes, Grit is fully open source under the MIT license. The CLI, all plugins, and the documentation are on GitHub.
Anything else? Ask in Discord. No question is too small.
Your next app is one command away.
go install github.com/MUKE-coder/grit/v3/cmd/grit@latestgrit upgrade keeps a project on the current framework without touching the code you wrote.














