{
  "markdown": "# BackGen\n\n[![CI](https://github.com/IbrahimKhaled19/BackGen/actions/workflows/ci.yml/badge.svg)](https://github.com/IbrahimKhaled19/BackGen/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@ibrahimkhaled19/backgen.svg)](https://www.npmjs.com/package/@ibrahimkhaled19/backgen)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![npm downloads](https://img.shields.io/npm/dm/@ibrahimkhaled19/backgen.svg)](https://www.npmjs.com/package/@ibrahimkhaled19/backgen)\n[![GitHub stars](https://img.shields.io/github/stars/IbrahimKhaled19/BackGen?style=social)](https://github.com/IbrahimKhaled19/BackGen)\n\n## 🤖 AI-Ready\n\n[![BackGen MCP server](https://glama.ai/mcp/servers/IbrahimKhaled19/BackGen/badges/score.svg)](https://glama.ai/mcp/servers/IbrahimKhaled19/BackGen)\n[![BackGen MCP server](https://glama.ai/mcp/servers/IbrahimKhaled19/BackGen/badges/card.svg)](https://glama.ai/mcp/servers/IbrahimKhaled19/BackGen)\n\nBackGen ships a built-in **MCP (Model Context Protocol) server** that AI assistants\n(Claude, Cursor, GitHub Copilot, VS Code) can use to scaffold projects on your behalf.\n\nRun via CLI:\n```bash\nbackgen mcp\n```\n\nOr configure your AI tool's MCP client:\n```json\n{\n  \"mcpServers\": {\n    \"backgen\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ibrahimkhaled19/backgen\", \"mcp\"]\n    }\n  }\n}\n```\n\n**Available MCP tools:**\n\n| Tool | Description |\n|------|-------------|\n| `init_project` | Scaffold a new production-ready backend project with chosen ORM, preset, and plugins |\n| `add_plugin` | Install a plugin (jwt, clerk, stripe, s3, ratelimit, ci-github, dependabot, codeql, docker-registry, release) |\n| `remove_plugin` | Remove a previously installed plugin |\n| `generate_resource` | Generate a CRUD resource with fields, relations, validation, and Swagger |\n| `generate_seed` | Generate a database seed file for a resource |\n| `generate_factory` | Generate a test factory for a resource |\n| `doctor` | Validate an existing BackGen project for configuration issues |\n| `list_plugins` | List all available plugins with descriptions |\n| `list_presets` | List all available domain presets |\n| `project_info` | Show project metadata from the manifest |\n\nThen just ask: *\"Scaffold a SaaS backend with Prisma, JWT auth, and Stripe payments\"*\n\n---\n\n<img width=\"1600\" height=\"900\" alt=\"BackGen CLI generating Express.js backend with Prisma, Drizzle, and Mongoose — Swagger docs, Docker, auth, and multi-tenant SaaS preset\" src=\"https://github.com/user-attachments/assets/cd3888d3-fa9d-4e4e-a595-4f10ae039871\" />\n> Generate production-ready backend foundations so developers can focus on business logic, not boilerplate.\n\nBackGen is a CLI tool that generates complete Express.js backend projects on **Prisma, Drizzle, or Mongoose** — with authentication, multi-tenant infrastructure, production hardening, Docker, and testing — all working out of the box.\n\n```bash\nnpx @ibrahimkhaled19/backgen init my-api --orm drizzle\ncd my-api\nnpm run dev\n```\n\nSwagger docs at `http://localhost:3000/docs` in under 60 seconds. Pick your ORM, keep everything else.\n\n---\n\n## Features\n\n- **Express + TypeScript** — strict mode, ESLint 9 (flat config), Vitest\n- **Multi-ORM** — Prisma, Drizzle, or Mongoose. Pick at `init` time, switch later via the manifest\n- **SaaS-ready** — `saas-core` preset ships Organizations, Memberships, Invitations, RBAC, tenant-scoped queries\n- **Hardened by default** — helmet, strict CORS, request ID, request timeout, xss + mongo-sanitize, graceful shutdown, `/health` + `/ready`, error envelope\n- **Plugin System** — JWT, Clerk, Stripe, S3, ratelimit via `backgen add`\n- **Resource Generator** — CRUD modules with relations, validation, Swagger\n- **Domain Presets** — saas-core, healthcare, SaaS, ecommerce, CRM, LMS — full domain in one command\n- **Seed & Factory Generators** — development data and test factories\n- **Docker** — multi-stage Dockerfile + docker-compose\n- **Swagger/OpenAPI** — auto-generated API documentation\n- **Manifest** — `.backgenrc.json` tracks ORM, plugins, versions, and ownership for **upgrade/rollback**\n\n---\n\n## Quick Start\n\n```bash\n# Install globally\nnpm install -g @ibrahimkhaled19/backgen\n\n# Create a project (pick your ORM)\nbackgen init my-api --orm prisma\nbackgen init my-api --orm drizzle\nbackgen init my-api --orm mongoose\n\n# Create a full multi-tenant domain\nbackgen init my-saas --preset saas-core --defaults\n\n# Add authentication\nbackgen add jwt\nbackgen add clerk\n\n# Add production hardening\nbackgen add ratelimit\n\n# Generate a resource\nbackgen generate resource Product name:string price:number stock:number\n\n# Start developing\ncd my-api\nnpm run dev\n```\n\n---\n\n## Commands\n\n### `backgen init [name]`\n\nGenerate a new backend project.\n\n```bash\nbackgen init my-api                              # interactive ORM picker\nbackgen init my-api --orm prisma                 # explicit ORM\nbackgen init my-api --orm drizzle --defaults     # Drizzle, non-interactive\nbackgen init my-api --orm mongoose --skip-install\nbackgen init my-api --preset saas-core --defaults   # full multi-tenant domain\nbackgen init my-api --preset healthcare            # healthcare domain\n```\n\n**Output:**\n- Express app with TypeScript strict mode\n- ORM-specific data layer (Prisma / Drizzle / Mongoose)\n- Environment validation (Zod)\n- Swagger/OpenAPI documentation\n- Docker + docker-compose\n- Hardened by default: helmet, CORS, request ID, timeout, xss + mongo-sanitize, graceful shutdown, health checks\n- ESLint 9 + Vitest\n- `.backgenrc.json` manifest (records `project.orm` + plugins)\n\nNo auth by default — choose your auth provider with `backgen add`.\n\n---\n\n### `backgen add [plugin]`\n\nInstall a plugin. Interactive multi-select if no argument.\n\n```bash\nbackgen add                 # interactive multi-select\nbackgen add jwt             # JWT authentication\nbackgen add clerk           # Clerk auth-as-a-service\nbackgen add stripe          # Stripe payments\nbackgen add s3              # AWS S3 storage\nbackgen add ratelimit       # Per-IP / per-user rate limiting\nbackgen add devops          # Install all devops plugins at once\n```\n\n**Available Plugins:**\n\n| Plugin | Category | Description |\n|--------|----------|-------------|\n| `jwt` | auth | JWT authentication with refresh tokens |\n| `clerk` | auth | Clerk auth-as-a-service (conflicts with jwt) |\n| `stripe` | payment | Stripe checkout, webhooks, customers |\n| `s3` | storage | AWS S3 upload, download, presigned URLs |\n| `ratelimit` | production | Per-IP rate limiting with Redis-ready store |\n| `ci-github` | devops | GitHub Actions CI pipeline (lint, typecheck, test, build, optional deploy) |\n| `dependabot` | devops | Automated dependency updates via Dependabot |\n| `codeql` | devops | CodeQL security analysis on push and schedule |\n| `docker-registry` | devops | Docker image build and publish to GHCR |\n| `release` | devops | Semantic release with npm publish and GitHub releases |\n\n**Conflict detection:** `jwt` and `clerk` cannot be installed together.\n\n---\n\n## Domain Presets\n\nGenerate a complete domain in one command. Each preset creates multiple resources with relations, auto-installs JWT auth, and wires everything together.\n\n```bash\nbackgen init my-api --preset healthcare\nbackgen init my-api --preset saas --defaults\n```\n\n### healthcare\n\nPatient, Doctor, Appointment, Prescription, MedicalRecord — appointments between patients and doctors, prescriptions linked to patients, medical records per patient.\n\n### saas\n\nOrganization, Team, Membership, Subscription, Invoice — organizations with teams and memberships, subscriptions with invoices.\n\n### ecommerce\n\nCategory, Product, Cart, Order, OrderItem, Payment — products in categories, carts with items, orders with line items and payments.\n\n### crm\n\nContact, Company, Deal, Activity — companies with contacts, deals tracked through pipeline, activity logging.\n\n### lms\n\nCourse, Lesson, Enrollment, Progress, Certificate — courses with lessons, student enrollments, progress tracking, certificates.\n\n---\n\n### `backgen remove [plugin]`\n\nRemove a plugin. Interactive multi-select if no argument. Supports `devops` shorthand to remove all devops plugins.\n\n```bash\nbackgen remove              # interactive multi-select\nbackgen remove stripe       # remove specific plugin\nbackgen remove devops       # remove all devops plugins\n```\n\n---\n\n### `backgen generate resource <name> [fields...]`\n\nGenerate a CRUD resource module.\n\n```bash\n# Interactive\nbackgen generate resource Product\n\n# Non-interactive\nbackgen generate resource Product name:string price:number stock:number\n\n# With relations\nbackgen generate resource Appointment date:datetime status:string \\\n  --relations \"doctor:Doctor,patient:Patient\"\n\n# With --fields flag\nbackgen generate resource Product --fields \"name:string,price:number\"\n```\n\n**Generated files:**\n```\nsrc/modules/product/\n  product.controller.ts    # CRUD endpoints\n  product.service.ts       # business logic\n  product.repository.ts    # database operations\n  product.validation.ts    # Zod schemas\n  product.types.ts         # TypeScript interfaces\n  product.routes.ts        # route definitions + Swagger\n  product.test.ts          # test placeholder\n```\n\n**Field types:** `string`, `number`, `boolean`, `date`, `datetime`\n\n**Relations:** `doctor:Doctor` (belongsTo), `patients:Patient` (hasMany)\n\n---\n\n### `backgen generate seed <resource>`\n\nGenerate seed data for development.\n\n```bash\nbackgen generate seed Product --count 10\n```\n\nOutput: `prisma/seeds/product.ts` (Prisma), `db/seeds/product.ts` (Drizzle), or `seeds/product.ts` (Mongoose)\n\n---\n\n### `backgen generate factory <resource>`\n\nGenerate a test factory.\n\n```bash\nbackgen generate factory Product\n```\n\nOutput: `src/factories/product.factory.ts`\n\nUsage:\n```ts\nimport { createProduct } from \"./factories/product.factory.js\";\nconst product = await createProduct({ name: \"Widget\" });\n```\n\n---\n\n### `backgen generate route [name]`\n\nGenerate a custom route module with a complete controller, service, validation, types, and route file -- including Swagger annotations. Routes are automatically registered in `app.ts` with the `REGISTER_ROUTES` marker.\n\nUse this when you need a custom endpoint that doesn't fit the CRUD pattern (e.g., dashboards, reports, webhooks, custom actions). For standard CRUD, use `generate resource` instead.\n\n```bash\nbackgen generate route                  # interactive prompt\nbackgen generate route reports          # generate a /api/reports module\nbackgen generate route webhooks         # generate a /api/webhooks module\n```\n\n**Generated files:**\n```\nsrc/modules/reports/\n  reports.controller.ts    # request handlers\n  reports.service.ts       # business logic\n  reports.validation.ts    # Zod schemas\n  reports.types.ts         # TypeScript interfaces\n  reports.routes.ts        # route definitions + Swagger\n```\n\n**Key differences from `generate resource`:**\n- No database model, repository, or test file\n- No field specification required\n- Pure controller/service pattern for custom endpoints\n- Mounted at `/api/<name>` with full Swagger docs\n\n---\n\n### `backgen generate migration [name]`\n\nGenerate a database migration (ORM-aware).\n\n```bash\nbackgen generate migration add-product-table   # runs prisma migrate dev / drizzle-kit generate / no-op for Mongoose\n```\n\n---\n\n### `backgen sync`\n\nReconcile `.backgenrc.json` with the project. Regenerates missing plugin files.\n\n```bash\nbackgen sync\n```\n\n---\n\n### `backgen mcp`\n\nStart BackGen as an MCP server over stdio. Used by AI assistants (Claude, Cursor, VS Code) to scaffold projects programmatically.\n\n```bash\nbackgen mcp\n```\n\nThis is the same server exposed via the `npx @ibrahimkhaled19/backgen backgen-mcp` binary. It registers all 10 MCP tools listed in the [AI-Ready](#-ai-ready) section.\n\n---\n\n### `backgen health`\n\nShow system health information.\n\n```bash\nbackgen health\n```\n\n**Displays:**\n- Node.js version\n- Platform and architecture\n- BackGen version\n\n---\n\n### `backgen doctor`\n\nCheck project health with ownership integrity diagnostics.\n\n```bash\nbackgen doctor              # health check + ownership audit\nbackgen doctor --fix        # auto-fix missing manifest entries\n```\n\n**Checks:**\n- Node.js version (>= 18)\n- npm availability\n- .env file\n- DATABASE_URL\n- Prisma schema / Drizzle config / Mongoose connection\n- Dependencies\n- Package manager version\n- **File integrity** — all manifest-tracked files exist on disk\n- **Ownership integrity** — framework vs user file classification\n\n---\n\n### `backgen upgrade`\n\nUpgrade a generated project to the latest template version. Creates a backup, then applies pending migrations sequentially.\n\n```bash\nbackgen upgrade              # show pending migrations, prompt before applying\nbackgen upgrade --yes        # skip confirmation, apply all pending\n```\n\n**What happens:**\n- Reads current `generatedVersion` from `.backgenrc.json`\n- Loads pending core + plugin migrations\n- Creates backup in `.backgen/backups/pre-<version>/`\n- Applies migrations in order (semver-sorted)\n- Updates ownership register + `generatedVersion` in manifest\n\n---\n\n### `backgen rollback`\n\nRestore a project to its pre-upgrade state from the most recent backup.\n\n```bash\nbackgen rollback              # show latest backup, prompt before restoring\nbackgen rollback --yes        # skip confirmation\n```\n\n**What happens:**\n- Lists available backups in `.backgen/backups/`\n- Restores the most recent backup (all tracked files + manifest)\n- Project returns to exact pre-upgrade state\n\n---\n\n### `backgen rotate-secrets`\n\nRotate JWT secrets in the project's `.env` file. Generates cryptographically secure 256-bit random hex values for `JWT_SECRET` and `JWT_REFRESH_SECRET`, backs up the current `.env` to `.env.backup`, and writes new values.\n\nAll existing tokens are immediately invalidated on next server restart -- users must re-login.\n\n```bash\nbackgen rotate-secrets\n```\n\n**What happens:**\n- Generates two 256-bit random hex secrets via `crypto.randomBytes`\n- Old `.env` saved to `.env.backup`\n- Previous values preserved as comments in the new `.env`\n- Print summary of changes\n\n---\n\n## Plugin System\n\nEvery plugin implements the `BackGenPlugin` interface:\n\n```ts\ninterface BackGenPlugin {\n  name: string;\n  category: string;\n  description: string;\n  version: string;\n\n  dependencies?: string[];\n  devDependencies?: string[];\n  requires?: string[];\n  conflicts?: string[];\n\n  env?: Record<string, string>;\n  templates: string[];\n  migrations?: PluginMigration[];   // versioned plugin migration scripts\n\n  install(ctx: InstallContext): Promise<void>;\n  uninstall?(ctx: InstallContext): Promise<void>;\n}\n```\n\nPlugins can:\n- Install npm dependencies\n- Inject environment variables\n- Register routes in app.ts\n- Replace existing middleware\n- Add database models (Prisma / Drizzle / Mongoose)\n- Carry versioned migrations for own upgrades\n\n---\n\n## Project Manifest\n\n`.backgenrc.json` tracks plugins, versions, generated version, and file ownership:\n\n```json\n{\n  \"version\": \"1.0.0\",\n  \"generatedVersion\": \"1.9.0\",\n  \"project\": {\n    \"name\": \"my-api\",\n    \"framework\": \"express\",\n    \"database\": \"postgresql\",\n    \"orm\": \"prisma\",\n    \"preset\": \"saas-core\"\n  },\n  \"plugins\": {\n    \"jwt\": {\n      \"version\": \"1.0.0\",\n      \"installedAt\": \"2026-06-01\",\n      \"source\": \"core\"\n    }\n  },\n  \"files\": {\n    \"src/app.ts\": { \"owner\": \"shared\", \"version\": \"1.9.0\" },\n    \"src/server.ts\": { \"owner\": \"framework\", \"version\": \"1.9.0\" },\n    \"src/config/env.ts\": { \"owner\": \"framework-editable\", \"version\": \"1.9.0\" },\n    \"prisma/schema.prisma\": { \"owner\": \"user\" },\n    \"src/modules/user/user.service.ts\": { \"owner\": \"user\" },\n    \"docker-compose.yml\": { \"owner\": \"shared\", \"version\": \"1.9.0\" }\n  }\n}\n```\n\n**Ownership levels:**\n| Level | Description | Upgrade behavior |\n|-------|-------------|-----------------|\n| `framework` | BackGen owns fully | Safe to overwrite |\n| `framework-editable` | Generated but user may customize | Smart merge via migration |\n| `shared` | Generated skeleton, user extends (e.g. docker-compose) | Migration-aware update |\n| `user` | User owns entirely | Never touched |\n\n---\n\n## Generated Project Structure\n\n```\nmy-api/\n├── prisma/                       # Prisma ORM only\n│   ├── schema.prisma\n│   └── seeds/\n├── src/db/                       # Drizzle ORM only\n│   ├── schema/\n│   │   └── index.ts\n│   └── seeds/\n├── src/models/                   # Mongoose ORM only\n│   └── seeds/\n├── src/\n│   ├── app.ts                    # Express app setup\n│   ├── server.ts                 # Server entry point\n│   ├── config/\n│   │   ├── env.ts                # Zod env validation\n│   │   ├── database.ts           # Prisma client / Drizzle db / Mongoose connection\n│   │   └── swagger.ts            # Swagger config\n│   ├── middleware/\n│   │   ├── auth.ts               # JWT/Clerk auth\n│   │   ├── validate.ts           # Zod validation\n│   │   ├── error.ts              # Global error handler\n│   │   └── logger.ts             # Request logging\n│   ├── modules/\n│   │   ├── auth/                 # Auth module (if jwt installed)\n│   │   ├── stripe/               # Stripe module (if installed)\n│   │   └── <resource>/           # Generated resources\n│   ├── services/\n│   │   └── logger.service.ts     # Winston logger\n│   ├── utils/\n│   │   ├── api-error.ts          # Error class\n│   │   ├── async-handler.ts      # Async wrapper\n│   │   └── response.ts           # Response formatters\n│   └── factories/                # Test factories\n├── .env.example\n├── .backgenrc.json               # Manifest\n├── Dockerfile\n├── docker-compose.yml\n├── package.json\n└── tsconfig.json\n```\n\n---\n\n## Development\n\n```bash\n# Clone\ngit clone https://github.com/your-username/backgen.git\ncd backgen\n\n# Install\nnpm install\n\n# Build\nnpm run build\n\n# Test\nnpm run test\n\n# Lint\nnpm run lint\n```\n\n### Test Suite\n\n277+ tests covering:\n- CLI help and version\n- Init: project structure, configs, manifest (all 3 ORMs)\n- Init with domain presets: preset-specific resources and relations\n- Init with saas-core preset: multi-tenant organizations, memberships, RBAC\n- Add plugin: files, routes, env vars, manifest (V4.6 plugin suite)\n- Generate resource: module files, ORM model, routes, validation\n- Generate with relations: foreign keys, ORM includes\n- Seed and factory generators (all 3 ORMs)\n- Drizzle: schema generation, client setup, codegen\n- Mongoose: model generation, schema definition, connection\n- Remove plugin: file + dependency + manifest cleanup\n- Sync: file restoration\n- Doctor: health checks, ownership integrity\n- Upgrade: migration engine, pending detection, backup creation\n- Rollback: backup listing, file restoration, manifest recovery\n- Error handling: unknown plugin, non-empty directory\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| CLI | Commander.js |\n| Prompts | Inquirer.js |\n| Templates | Handlebars |\n| Spinner | Ora |\n| Colors | Chalk |\n| Testing | Vitest |\n| Linting | ESLint 9 (flat config) |\n| Language | TypeScript (strict) |\n\n### Generated Projects\n\n| Layer | Technology |\n|-------|------------|\n| Framework | Express.js |\n| Language | TypeScript (strict) |\n| Database | PostgreSQL |\n| ORM | Prisma / Drizzle / Mongoose |\n| Validation | Zod |\n| Auth | JWT or Clerk |\n| Payments | Stripe |\n| Storage | AWS S3 |\n| Docs | Swagger/OpenAPI |\n| Logging | Winston + Morgan |\n| Testing | Vitest |\n| Deployment | Docker |\n\n---\n\n## BackGen vs Alternatives\n\n| Tool | ORM Choice | Auth | Plugin System | Presets | Upgrade Engine | Docs Site |\n|------|-----------|------|---------------|---------|----------------|-----------|\n| **BackGen** | Prisma, Drizzle, Mongoose | JWT, Clerk | ◈ 7+ plugins | 5 domains | ◈ Backup + rollback | — |\n| NestJS CLI | No (fixed NestJS) | Built-in | ◈ Modules | — | — | ◈ |\n| Express Generator | No (fixed plain JS) | — | — | — | — | — |\n| T3 Stack | Prisma | NextAuth | — | — | — | ◈ |\n| AdonisJS | Lucid ORM | Built-in | ◈ Ace | — | — | ◈ |\n| LoopBack | Built-in | Built-in | ◈ | — | — | ◈ |\n\n**Key differentiators:**\n- ◈ **ORM-switchable** — change Prisma ↔ Drizzle ↔ Mongoose via manifest, not rewrite\n- ◈ **Domain presets** — healthcare, SaaS, ecommerce, CRM, LMS in one command\n- ◈ **Upgrade engine** — versioned migrations + backup + rollback for generated projects\n- ◈ **Multi-ORM from day one** — not locked into one data layer\n\n---\n\n## Roadmap\n\n| Version | Focus | Status |\n|---------|-------|--------|\n| V1 | Foundation | Done |\n| V2 | Plugin System | Done |\n| V3 | Resource Generator | Done |\n| V4 | Domain Presets | Done |\n| V4.5 | SaaS Essentials | Done |\n| V4.6 | Production Hardening | Done |\n| V4.6.1 | Base Hardening Default-On | Done |\n| V5 | Multi-ORM (Prisma, Drizzle, Mongoose) | Done |\n| V6 | DevOps & Infrastructure | Done |\n| V6.1 | Ownership Tracking & Doctor --fix | Done |\n| V6.2 | Upgrade Engine & Migration Runner | Done |\n| V6.3 | Backups & Rollback | Done |\n| V6.4 | Plugin Migrations | Done |\n| V7 | Upgrade Polish & Diffing | In Progress |\n| V8 | Schema-First Development | Planned |\n| V9 | Enterprise Features | Planned |\n| V10 | Plugin Authoring SDK | Planned |\n| V11 | Marketplace | Planned |\n| V12 | AI Context Layer | Planned |\n\nSee [docs/ROADMAP.md](docs/ROADMAP.md) for details.\n\n---\n\n## License\n\nMIT\n",
  "bytes": 21232,
  "sha": "7edfa4af32a3ae534526a5ea62f322f0a456101d108609f90d6d8dc4f320e9f6",
  "repo_slug": "ibrahimkhaled19/backgen",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ibrahimkhaled19_backgen_508daf23/readme"
}