{"id":46350504,"url":"https://github.com/muke-coder/grit","last_synced_at":"2026-05-02T00:02:17.648Z","repository":{"id":337747991,"uuid":"1155022428","full_name":"MUKE-coder/grit","owner":"MUKE-coder","description":"Go and NextJS Batteries Included Framework","archived":false,"fork":false,"pushed_at":"2026-05-01T22:59:25.000Z","size":6708,"stargazers_count":32,"open_issues_count":50,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T23:27:21.846Z","etag":null,"topics":["gin-framework","golang","gorm-orm","nextjs"],"latest_commit_sha":null,"homepage":"https://gritframework.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MUKE-coder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-11T03:12:03.000Z","updated_at":"2026-05-01T22:59:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"1f009fee-0892-4ef7-bf3f-e63a2bc8ec57","html_url":"https://github.com/MUKE-coder/grit","commit_stats":null,"previous_names":["muke-coder/grit"],"tags_count":35,"template":false,"template_full_name":null,"purl":"pkg:github/MUKE-coder/grit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUKE-coder%2Fgrit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUKE-coder%2Fgrit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUKE-coder%2Fgrit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUKE-coder%2Fgrit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MUKE-coder","download_url":"https://codeload.github.com/MUKE-coder/grit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MUKE-coder%2Fgrit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32517232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gin-framework","golang","gorm-orm","nextjs"],"created_at":"2026-03-04T23:03:30.527Z","updated_at":"2026-05-02T00:02:17.630Z","avatar_url":"https://github.com/MUKE-coder.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/grit_banner.png\" alt=\"Grit Framework\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eGrit\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eGo + React. Built with Grit.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/MUKE-coder/grit/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/MUKE-coder/grit?style=flat-square\u0026color=38bdf8\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/MUKE-coder/grit/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/MUKE-coder/grit?style=flat-square\u0026color=38bdf8\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://gritframework.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-gritframework.com-38bdf8?style=flat-square\" alt=\"Docs\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  The full-stack Go + React framework. Choose your architecture, pick your frontend, and scaffold a production-ready application in seconds.\n\u003c/p\u003e\n\n---\n\n## What is Grit?\n\nGrit is a full-stack meta-framework that fuses **Go** (Gin + GORM) with **Next.js** or **TanStack Router** (Vite) in a flexible architecture. One interactive CLI to scaffold a complete production-ready project with authentication, 2FA, admin panel, code generation, file storage, email, background jobs, AI integration, one-command deployment, and Docker setup.\n\n## Install\n\n```bash\ngo install github.com/MUKE-coder/grit/v3/cmd/grit@latest\n```\n\n## Quick Start\n\n```bash\n# Interactive — choose architecture + frontend\ngrit new myapp\n\n# Or use flags to skip prompts\ngrit new myapp --triple --next       # Web + Admin + API (Next.js)\ngrit new myapp --double --vite       # Web + API (TanStack Router)\ngrit new myapp --single              # Single Go binary + embedded SPA\ngrit new myapp --api                 # Go API only\ngrit new . --triple --vite           # Scaffold into current directory\ngrit new ./ --triple --vite          # Same as above\ngrit new-desktop myapp               # Native desktop app (Wails)\n```\n\nTip: when using `grit new .`, Grit infers the project name from your current folder name. Use `--force` if the directory is non-empty.\n\n```bash\ncd myapp\ndocker compose up -d    # PostgreSQL, Redis, MinIO, Mailhog\npnpm install \u0026\u0026 pnpm dev\n```\n\nOpen http://localhost:3000 — register, log in, see the dashboard.\n\n## Architecture Modes\n\n| Mode | Command | What You Get |\n|------|---------|-------------|\n| **Triple** | `grit new app --triple` | Web + Admin + API (monorepo, Turborepo) |\n| **Double** | `grit new app --double` | Web + API (no admin, lighter) |\n| **Single** | `grit new app --single` | Go binary with `go:embed` frontend (like Laravel/Next.js) |\n| **API** | `grit new app --api` | Go API only (no frontend) |\n| **Mobile** | `grit new app --mobile` | API + Expo React Native |\n| **Desktop** | `grit new-desktop app` | Wails + Go + React + SQLite |\n\n## Frontend Options\n\n| Frontend | Flag | Stack |\n|----------|------|-------|\n| **Next.js** (default) | `--next` | App Router, Server Components, SSR/ISR |\n| **TanStack Router** | `--vite` | Vite, file-based routing, SPA, faster builds |\n\n## What Ships With Every Project\n\n| Feature | Details |\n|---------|---------|\n| **JWT Authentication** | Register, login, refresh tokens, role-based access (ADMIN/EDITOR/USER) |\n| **Two-Factor Auth (TOTP)** | Authenticator app, 10 backup codes, 30-day trusted devices |\n| **OAuth2 Social Login** | Google + GitHub via `goth` |\n| **File Storage (S3)** | Presigned URL uploads to AWS S3, Cloudflare R2, or MinIO |\n| **Email (Resend)** | Transactional emails with Go HTML templates |\n| **Background Jobs** | Redis-backed queue via `asynq` with admin dashboard |\n| **Cron Scheduler** | Recurring tasks with cron expressions |\n| **AI Integration** | Vercel AI Gateway — one key, hundreds of models |\n| **Redis Caching** | Get/Set/Delete + cache middleware for responses |\n| **GORM Studio** | Visual database browser at `/studio` |\n| **API Documentation** | Auto-generated Scalar docs at `/docs` |\n| **Sentinel** | WAF, rate limiting, brute-force protection at `/sentinel/ui` |\n| **Pulse** | Request tracing, DB monitoring, metrics at `/pulse/ui` |\n| **Grit UI** | 100 pre-built shadcn-compatible components |\n| **Docker** | Dev + production Docker Compose setups |\n\n## Code Generator\n\n```bash\n# Generate a full-stack resource\ngrit generate resource Post --fields \"title:string,content:richtext,published:bool,slug:slug:title\"\n\n# Interactive mode\ngrit generate resource Product -i\n\n# From YAML\ngrit generate resource Post --from post.yaml\n\n# Remove a resource (deletes files + reverses injections)\ngrit remove resource Post\n```\n\n**Generated files per resource:** Go model, service, handler, Zod schema, TypeScript types, React Query hooks, admin page, route injection — all via code markers.\n\n## CLI Commands\n\n```bash\n# Scaffolding\ngrit new \u003cname\u003e                        # Interactive (architecture + frontend)\ngrit new \u003cname\u003e --triple --next        # Explicit flags\ngrit new . --triple --vite             # Scaffold into current directory\ngrit new-desktop \u003cname\u003e                # Desktop app (Wails)\n\n# Code generation\ngrit generate resource \u003cName\u003e --fields \"...\"\ngrit remove resource \u003cName\u003e\ngrit add role \u003cROLE_NAME\u003e\ngrit sync                              # Go types → TypeScript + Zod\n\n# Development\ngrit start                             # Auto-detect project, start dev server\ngrit start client                      # Start frontend apps\ngrit start server                      # Start Go API\ngrit studio                            # Open GORM Studio\ngrit routes                            # List all registered API routes\n\n# Database\ngrit migrate                           # Run migrations\ngrit migrate --fresh                   # Drop + re-migrate\ngrit seed                              # Seed database\n\n# Operations\ngrit down                              # Maintenance mode (503 all requests)\ngrit up                                # Back online\ngrit deploy --host user@server.com --domain myapp.com\n\n# Meta\ngrit version                           # v3.6.0\ngrit update                            # Self-update to latest\ngrit upgrade                           # Upgrade project templates\n```\n\n## Field Types\n\n| Type | Go Type | TypeScript | Notes |\n|------|---------|-----------|-------|\n| `string` | `string` | `string` | Required by default |\n| `text` | `string` | `string` | GORM `type:text` |\n| `richtext` | `string` | `string` | Tiptap WYSIWYG editor |\n| `int` | `int` | `number` | |\n| `uint` | `uint` | `number` | |\n| `float` | `float64` | `number` | |\n| `bool` | `bool` | `boolean` | |\n| `datetime` | `*time.Time` | `string\\|null` | |\n| `date` | `*time.Time` | `string\\|null` | |\n| `slug` | `string` | `string` | Auto-unique from source |\n| `belongs_to` | `uint` | `number` | FK + index |\n| `many_to_many` | `[]uint` | `number[]` | Junction table |\n| `string_array` | `datatypes.JSONSlice[string]` | `string[]` | JSON column |\n\n**Modifiers:** `:unique`, `:optional`, `:slug:\u003csource\u003e`, `:belongs_to:\u003cModel\u003e`, `:many_to_many:\u003cModel\u003e`\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Go 1.21+ · Gin · GORM |\n| Frontend | Next.js 14+ (App Router) **or** TanStack Router (Vite) |\n| Styling | Tailwind CSS · shadcn/ui |\n| Database | PostgreSQL (dev: Docker) · SQLite (desktop/single) |\n| Cache / Queue | Redis · asynq |\n| File Storage | S3-compatible (MinIO / Cloudflare R2 / AWS S3) |\n| Email | Resend |\n| AI | Vercel AI Gateway (Anthropic, OpenAI, Google, and more) |\n| Auth | JWT + TOTP (2FA) + OAuth2 (Google, GitHub) |\n| Validation | Zod (shared between apps) |\n| Data Fetching | TanStack Query |\n| Monorepo | Turborepo · pnpm |\n| Security | Sentinel (WAF + rate limiting) |\n| Observability | Pulse (tracing + metrics) |\n| DB Browser | GORM Studio |\n| Desktop | Wails v2 |\n| Deployment | SSH + systemd + Caddy (auto-TLS) |\n\n## Plugins\n\n10 official drop-in Go packages for functionality that doesn't ship in core:\n\n| Plugin | Package | Purpose |\n|--------|---------|---------|\n| [grit-websockets](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-websockets) | `ws` | Hub, rooms, broadcast, auth |\n| [grit-stripe](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-stripe) | `gritstripe` | Checkout, subscriptions, webhooks |\n| [grit-oauth](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-oauth) | `oauth` | Google, GitHub, Discord social login |\n| [grit-notifications](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-notifications) | `notify` | In-app, push (FCM), SMS (Twilio) |\n| [grit-search](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-search) | `search` | Meilisearch + GORM auto-index |\n| [grit-video](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-video) | `video` | Upload, FFmpeg, HLS streaming |\n| [grit-conference](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-conference) | `conference` | WebRTC signaling, rooms |\n| [grit-webhooks](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-webhooks) | `webhooks` | Outgoing webhooks, HMAC, retry |\n| [grit-i18n](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-i18n) | `i18n` | Translation, locale middleware |\n| [grit-export](https://github.com/MUKE-coder/grit-plugins/tree/main/grit-export) | `export` | PDF, Excel, CSV generation |\n\n## Documentation\n\nFull docs at **[gritframework.com](https://gritframework.com)** — architecture guides, tutorials, API reference, deployment, and plugin documentation.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuke-coder%2Fgrit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuke-coder%2Fgrit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuke-coder%2Fgrit/lists"}