CLI Reference
createβ
Creates a new Express.js project with interactive prompts.
npx xpress-generator create [name]
Argumentsβ
| Argument | Required | Description |
|---|---|---|
name | No | Project name in PascalCase. If omitted, the CLI will ask. |
Interactive promptsβ
| Prompt | Type | Options |
|---|---|---|
| Project name | Input | Any PascalCase string |
| Database | List | MongoDB Β· MySQL Β· PostgreSQL Β· SQLServer |
| Use TypeScript? | Confirm | Yes / No (default: No) |
| Save location | List | Current directory (.) Β· Desktop Β· Downloads Β· Documents Β· Custom path |
Scaffold into the current folder
The first location option β "Ruta actual (.)" β creates the project inside whatever directory you're already in. Perfect for CI, monorepos, or when you've pre-created a folder.
Examplesβ
# Interactive β prompts all questions
npx xpress-generator create
# Skip name prompt
npx xpress-generator create BlogApi
# Create a TypeScript project (prompts for DB and location)
npx xpress-generator create MyService
What it generatesβ
src/
shared/errors/AppError.js
shared/utils/catchAsync.js
shared/utils/httpResponse.js
shared/constants/httpStatus.js
shared/constants/messages.js
shared/validators/validate.js
shared/validators/exampleSchema.js
middleware/auth.js
middleware/errorHandler.js
modules/{name}/controller.js
modules/{name}/routes.js
modules/{name}/{name}Model.js
modules/{name}/service.js
modules/auth/authController.js
modules/auth/authRoutes.js
modules/auth/RefreshToken.js
config/config-{db}.js
app.js
server.js
db/
migrations/{timestamp}-create-{name}.js (MySQL / PostgreSQL)
migrations/{timestamp}-create-{name}.sql (SQL Server)
migrate.js (SQL Server)
seeders/ (MySQL / PostgreSQL)
tests/
setup.js
indexController.test.js
.env
.eslintrc.json
.lintstagedrc.json
.sequelizerc (MySQL / PostgreSQL)
src/config/sequelize.js (MySQL / PostgreSQL)
jest.config.js
Dockerfile
docker-compose.yml
.dockerignore
.husky/pre-commit
.xpress.json
package.json
tsconfig.json (TypeScript only)
Installed dependenciesβ
Production:
express dotenv colors cors helmet morgan
bcryptjs jsonwebtoken zod express-rate-limit cookie-parser
+ DB driver (mongoose / mysql2+sequelize / pg+sequelize / mssql)
Dev β runtime:
nodemon
+ TypeScript: ts-node typescript @types/node @types/express @types/*
Dev β testing:
jest supertest eslint lint-staged
+ TypeScript: ts-jest @types/jest @types/supertest
Dev β git hooks:
husky
Dev β migrations:
sequelize-cli (MySQL / PostgreSQL only)
Generated package.json scriptsβ
| Script | Description |
|---|---|
npm run dev | nodemon (JS) or ts-node (TS) |
npm start | Production server |
npm test | Jest with coverage |
npm run test:watch | Jest in watch mode |
npm run build | Compile TypeScript (TS only) |
npm run db:migrate | Run pending migrations (relational DBs) |
npm run db:migrate:undo | Roll back last migration (MySQL / PostgreSQL) |
generate:modelβ
Generates a full CRUD module inside an existing xpress-generator project.
npx xpress-generator generate:model <name>
npx xpress-generator g:model <name>
Argumentsβ
| Argument | Required | Description |
|---|---|---|
name | Yes | Model name in PascalCase (e.g. Product, BlogPost) |
Generated filesβ
All files are generated inside src/modules/{name}/:
| File | Description |
|---|---|
src/modules/{name}/{name}Model.js | Database model for your project's DB |
src/modules/{name}/service.js | getAll, getById, create, update, remove |
src/modules/{name}/schema.js | Zod validation schema |
src/modules/{name}/controller.js | CRUD controller using catchAsync |
src/modules/{name}/routes.js | Express router with auth-protected routes |
db/migrations/{ts}-create-{name}.js | Sequelize migration (MySQL / PostgreSQL) |
db/migrations/{ts}-create-{name}.sql | SQL migration (SQL Server) |
How it detects DB and languageβ
The command reads .xpress.json in the project root:
{
"dbType": "MongoDB",
"language": "javascript",
"version": "1.0.0"
}
If .xpress.json is not found, the CLI will ask you to specify the database.
Exampleβ
cd MyApp
npx xpress-generator generate:model Product
Output:
β src/modules/product/productModel.js
β src/modules/product/service.js
β src/modules/product/schema.js
β src/modules/product/controller.js
β src/modules/product/routes.js
β db/migrations/1712345678-create-product.js
π Run migrations:
npm run db:migrate
π Register the route in src/app.js:
const productRoutes = require('./modules/product/routes');
app.use('/api/products', productRoutes);
Generated route permissionsβ
| Method | Route | Middleware |
|---|---|---|
| GET | /api/products | Public |
| GET | /api/products/:id | Public |
| POST | /api/products | verifyToken |
| PUT | /api/products/:id | verifyToken |
| DELETE | /api/products/:id | verifyToken + requireRole('admin') |
generate:middlewareβ
Generates a custom Express middleware.
npx xpress-generator generate:middleware <name>
npx xpress-generator g:middleware <name>
Argumentsβ
| Argument | Required | Description |
|---|---|---|
name | Yes | Middleware name in camelCase (e.g. cache, requestLogger) |
Generated fileβ
src/middleware/{name}.js
Exampleβ
npx xpress-generator g:middleware cache
# generates: src/middleware/cache.js
Generated content:
const AppError = require('../shared/errors/AppError');
/**
* cache middleware
* Add your logic here
*/
module.exports = (req, res, next) => {
try {
// TODO: implement cache logic
next();
} catch (err) {
next(new AppError(err.message, 500));
}
};
Global optionsβ
| Flag | Description |
|---|---|
--version / -V | Print xpress-generator version |
--help / -h | Show help for a command |
npx xpress-generator --version
npx xpress-generator create --help