Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
d617dbf
feat: implement comprehensive scaffold templates for mvc and modular …
CODE-Y02 Apr 27, 2026
d9eeb6e
Merge pull request #12 from CODE-Y02/major/v4-update
CODE-Y02 Apr 27, 2026
b4864fa
chore(release): version packages [skip ci]
github-actions[bot] Apr 27, 2026
3f3aa68
refactor: replace ApiResponse class with functional helpers, add Biom…
CODE-Y02 Apr 27, 2026
dd8f600
chore(release): version packages [skip ci]
github-actions[bot] Apr 27, 2026
3752d64
feat: add Redis support, improve database connection resilience, and …
CODE-Y02 Apr 27, 2026
f184c05
chore(release): version packages [skip ci]
github-actions[bot] Apr 27, 2026
4ffc258
feat: integrate zod-to-openapi for automated documentation and remove…
CODE-Y02 Apr 27, 2026
1db5e36
chore(release): version packages [skip ci]
github-actions[bot] Apr 27, 2026
28c3e1b
feat: support project generation in current directory and add compreh…
CODE-Y02 Apr 28, 2026
056e78e
feat: implement MCP server and LLM-friendly documentation exports for…
CODE-Y02 Apr 28, 2026
3e96fae
feat: add high-fidelity personalized welcome banner using figlet and …
CODE-Y02 Apr 28, 2026
006855d
chore(release): version packages [skip ci]
github-actions[bot] Apr 28, 2026
e7113ba
feat: update MCP server package configuration and improve README docu…
CODE-Y02 Apr 28, 2026
7033911
chore(release): version packages [skip ci]
github-actions[bot] Apr 28, 2026
a337e5c
style: improve typography and alignment for hero section headers
CODE-Y02 Apr 25, 2026
91baac3
style: resolve git merge conflict and reformat font family declaratio…
CODE-Y02 Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
module.exports = {
root: true,
ignorePatterns: ["dist", "node_modules", "packages/**/*", "docs/**/*", "examples/**/*"],
ignorePatterns: [
"dist",
"node_modules",
"packages/**/*",
"docs/**/*",
"examples/**/*",
],
};
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ pnpm run test
## Adding a New Generator Feature

1. Add your option to `packages/create-express-forge/src/types.ts`
2. Add the prompt in `src/prompts.ts`
3. Create a generator in `src/generator/features/your-feature.ts`
4. Wire it into `src/generator/index.ts`
5. Update `src/utils/package-builder.ts` if it adds dependencies
6. Add a test in `tests/`
2. Add the prompt in `packages/create-express-forge/src/prompts.ts`
3. Add templates in `packages/create-express-forge/templates/`
4. Wire logic into `packages/create-express-forge/src/generator/index.ts`
5. Update `packages/create-express-forge/src/utils/package-builder.ts` if it adds dependencies
6. Add a test in `packages/create-express-forge/tests/`

## Releasing

Expand Down
91 changes: 73 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,27 @@

```bash
npx create-express-forge my-api
# or
npm create express-forge my-api
# or (short alias)
npx cef my-api
# or scaffold in current directory
npx create-express-forge .
```

## What You Get

Interactive prompts let you choose:

| Option | Choices |
|--------|---------|
| **Architecture** | Modular (feature-based) · MVC |
| **ORM** | Prisma · Sequelize · None |
| **Database** | PostgreSQL · MySQL · SQLite · None |
| **Logger** | Winston · Pino · None |
| **Testing** | Vitest · Jest · None |
| **Docker** | Dockerfile + docker-compose |
| Option | Choices |
| ---------------- | ---------------------------------- |
| **Architecture** | Modular (feature-based) · MVC |
| **ORM** | Prisma · Sequelize · None |
| **Database** | PostgreSQL · MySQL · SQLite · None |
| **Logger** | Winston · Pino · None |
| **Testing** | Vitest · Jest · None |
| **Docker** | Dockerfile + docker-compose |

## Generated Project Includes

- ✅ **TypeScript** + `tsx` hot-reload dev server
- ✅ **TypeScript** + `tsx` hot-reload dev server + **Path Aliases (`@/`)**
- ✅ **Biome** — 20x faster linting and formatting (replaces ESLint/Prettier)
- ✅ **Zod** env validation on startup — fails fast on bad config
- ✅ **Global centralized error handler** — `ApiError`, `ZodError`, unknown errors all handled
- ✅ **Request validation middleware** via `validate(schema)`
Expand All @@ -42,30 +41,86 @@ Interactive prompts let you choose:
- ✅ **Graceful shutdown** (SIGTERM / SIGINT)
- ✅ **Multi-stage Dockerfile** with healthcheck
- ✅ **docker-compose** with correct DB service
- ✅ **Automated OpenAPI (Swagger)** — Zero-JSDoc documentation via Zod schemas

## Repository Structure

```
create-express-forge/
├── packages/
│ ├── create-express-forge/ ← The published CLI
│ ├── mcp/ ← @create-express-forge/mcp Server
│ ├── typescript-config/ ← Shared internal TS config
│ └── eslint-config/ ← Shared internal ESLint config
│ └── lint-config/ ← Shared internal Biome/Lint config
├── examples/
│ └── modular-postgres-prisma/ ← Pre-generated example
└── .github/workflows/ ← CI + Release
```

## 🤖 AI & MCP Integration

Create Express Forge is designed to be AI-friendly. We provide a built-in **MCP (Model Context Protocol)** server that lets you chat with your AI assistant about the project, fetch documentation, and generate scaffolding commands.

### Using the MCP Server

You can run the MCP server directly via `npx` (recommended) or by building the source.

**Option 1: Using `npx` (Recommended)**
Add this to your Claude Desktop config or other MCP client:

```json
{
"mcpServers": {
"create-express-forge": {
"command": "npx",
"args": ["-y", "@create-express-forge/mcp"]
}
}
}
```

**Option 2: From Source**
1. **Build the project**: `pnpm build`
2. **Add to your MCP Client**:
```json
{
"mcpServers": {
"create-express-forge": {
"command": "node",
"args": ["/absolute/path/to/express-cli/packages/mcp/dist/index.js"]
}
}
}
```

### LLM Documentation

We also provide machine-readable documentation files for LLMs:

- **`llms.txt`**: [Project summary](https://code-y02.github.io/express-cli/llms.txt)
- **`llms-full.txt`**: [Full documentation context](https://code-y02.github.io/express-cli/llms-full.txt)
- **`ai.json`**: [Capability manifest and CLI flags](https://code-y02.github.io/express-cli/ai.json)

## Legacy Support (v3.x)

Documentation for the legacy v3.x (LTS) version is available at [https://code-y02.github.io/express-cli/v3/](https://code-y02.github.io/express-cli/v3/).

To scaffold a project using v3.x, run:

```bash
npx create-express-forge@3.3.2 [project-name]
```

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).

## Versioning & Branches

| Branch | npm tag | Description |
|--------|---------|-------------|
| `main` | `latest` | Stable releases |
| `next` | `next` | Pre-releases / beta |
| Branch | npm tag | Description |
| ------ | -------- | ------------------- |
| `main` | `latest` | Stable releases |
| `next` | `next` | Pre-releases / beta |

## License

Expand Down
14 changes: 14 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "https://biomejs.dev/schemas/2.4.13/schema.json",
"extends": ["./packages/lint-config/biome.base.json"],
"files": {
"includes": [
"!**/dist",
"!**/node_modules",
"!**/pnpm-lock.yaml",
"!.turbo",
"!docs/.vitepress/cache",
"!docs/.vitepress/dist"
]
}
}
167 changes: 132 additions & 35 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,75 @@ const rawBase = process.env.VITEPRESS_BASE || "/express-cli/";
const base = rawBase.endsWith("/") ? rawBase : `${rawBase}/`;

export default defineConfig({
title: "Express Forge",
title: "Create Express Forge",
description: "⚡ Production-ready Express backends in seconds",
base: base,
cleanUrls: true,
lastUpdated: true,
sitemap: {
hostname: "https://code-y02.github.io/express-cli",
},

head: [
["link", { rel: "icon", href: `${base}logo.svg` }],
["meta", { name: "keywords", content: "express, typescript, nodejs, backend, api, generator, scaffold, prisma, sequelize, architecture, mvc, modular, rest-api, server-boilerplate" }],
[
"meta",
{
name: "keywords",
content:
"express, typescript, nodejs, backend, api, generator, scaffold, prisma, sequelize, architecture, mvc, modular, rest-api, server-boilerplate",
},
],
["meta", { name: "author", content: "Yatharth Lakhate" }],
["meta", { property: "og:type", content: "website" }],
["meta", { property: "og:title", content: "Express Forge | The Ultimate Express + TypeScript Generator" }],
["meta", { property: "og:description", content: "Scaffold production-ready Express.js TypeScript backends in seconds with built-in Auth, ORM, and OpenAPI support." }],
[
"meta",
{
property: "og:title",
content: "create-express-forge | The Ultimate Express + TypeScript Generator",
},
],
[
"meta",
{
property: "og:description",
content:
"Scaffold production-ready Express.js TypeScript backends in seconds with built-in Auth, ORM, and OpenAPI support.",
},
],
["meta", { property: "og:image", content: `${base}og-image.png` }],
["meta", { name: "twitter:card", content: "summary_large_image" }],
["meta", { name: "twitter:site", content: "@code_y02" }],
["meta", { name: "twitter:title", content: "Create Express Forge" }],
[
"meta",
{
name: "twitter:description",
content: "⚡ Production-ready Express backends in seconds",
},
],
["meta", { name: "twitter:image", content: `${base}og-image.png` }],
[
"script",
{ type: "application/ld+json" },
JSON.stringify({
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Create Express Forge",
"operatingSystem": "Node.js",
"applicationCategory": "DeveloperApplication",
"description": "The ultimate CLI for scaffolding production-ready Express.js TypeScript backends.",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
},
"author": {
"@type": "Person",
"name": "Yatharth Lakhate",
},
}),
],
],

themeConfig: {
Expand All @@ -29,45 +87,84 @@ export default defineConfig({
{ text: "Guide", link: "/guide/getting-started" },
{ text: "Features", link: "/guide/features" },
{ text: "Reference", link: "/reference/cli-options" },
{ text: "⭐ Star on GitHub", link: "https://github.com/CODE-Y02/express-cli" },
],

sidebar: [
{
text: "Introduction",
items: [
{ text: "What is Express Forge?", link: "/" },
{ text: "Getting Started", link: "/guide/getting-started" },
],
},
{
text: "Core Concepts",
items: [
{ text: "Architecture Patterns", link: "/guide/architecture" },
{ text: "Project Structure", link: "/guide/structure" },
{ text: "Core Features", link: "/guide/features" },
{ text: "Authentication", link: "/guide/auth" },
{ text: "Caching", link: "/guide/caching" },
{ text: "API Documentation", link: "/guide/openapi" },
],
},
{
text: "Advanced",
text: "Versions",
items: [
{ text: "Deployment", link: "/guide/deployment" },
{ text: "Testing Strategy", link: "/guide/testing" },
{ text: "Troubleshooting", link: "/guide/troubleshooting" },
{ text: "v4.x (Latest)", link: "/" },
{ text: "v3.x (LTS)", link: "/v3/" },
],
},
{
text: "Reference",
items: [
{ text: "CLI Options", link: "/reference/cli-options" },
{ text: "Configuration", link: "/reference/config" },
],
text: "⭐ Star on GitHub",
link: "https://github.com/CODE-Y02/express-cli",
},
],

sidebar: {
"/": [
{
text: "Introduction",
items: [
{ text: "What is create-express-forge?", link: "/" },
{ text: "Getting Started", link: "/guide/getting-started" },
],
},
{
text: "Core Concepts",
items: [
{ text: "Architecture Patterns", link: "/guide/architecture" },
{ text: "Project Structure", link: "/guide/structure" },
{ text: "Core Features", link: "/guide/features" },
{ text: "Authentication", link: "/guide/auth" },
{ text: "Caching", link: "/guide/caching" },
{ text: "API Documentation", link: "/guide/openapi" },
],
},
{
text: "Advanced",
items: [
{ text: "Deployment", link: "/guide/deployment" },
{ text: "Testing Strategy", link: "/guide/testing" },
{ text: "Troubleshooting", link: "/guide/troubleshooting" },
],
},
{
text: "Reference",
items: [
{ text: "CLI Options", link: "/reference/cli-options" },
{ text: "Configuration", link: "/reference/config" },
],
},
],
"/v3/": [
{
text: "v3 Docs",
items: [
{ text: "Introduction", link: "/v3/" },
{ text: "Getting Started", link: "/v3/guide/getting-started" },
],
},
{
text: "Core Concepts",
items: [
{ text: "Architecture Patterns", link: "/v3/guide/architecture" },
{ text: "Project Structure", link: "/v3/guide/structure" },
{ text: "Core Features", link: "/v3/guide/features" },
{ text: "Authentication", link: "/v3/guide/auth" },
{ text: "Caching", link: "/v3/guide/caching" },
{ text: "API Documentation", link: "/v3/guide/openapi" },
],
},
{
text: "Reference",
items: [
{ text: "CLI Options", link: "/v3/reference/cli-options" },
{ text: "Configuration", link: "/v3/reference/config" },
],
},
],
},

socialLinks: [
{ icon: "github", link: "https://github.com/CODE-Y02/express-cli" },
],
Expand Down
Loading
Loading