@curisjs/cli
Command-line interface tools for CurisJS projects.
Overview
@curisjs/cli provides command-line tools for creating, managing, and deploying CurisJS applications.
Installation
Global Installation
npm install -g @curisjs/cliProject Installation
npm install --save-dev @curisjs/cliUsing npx
npx @curisjs/cli <command>Quick Start
Create a New Project
# Create a new project
curis new my-app
# Navigate to project
cd my-app
# Install dependencies
npm install
# Start development server
npm run devCommands
new
Create a new CurisJS project:
curis new <project-name> [options]Options:
--template <name>- Use a specific template (default, api, fullstack)--db <type>- Database type (sqlite, postgres, mysql)--no-git- Skip git initialization
Examples:
# Basic project
curis new my-app
# API-only project with PostgreSQL
curis new my-api --template api --db postgres
# Full-stack project with MySQL
curis new my-app --template fullstack --db mysqlgenerate (or g)
Generate boilerplate code:
curis generate <type> <name> [options]
curis g <type> <name> [options]Types:
model- Generate a database modelcontroller- Generate a controllermiddleware- Generate middlewaremigration- Generate a database migration
Examples:
# Generate a model
curis g model User
# Generate a controller
curis g controller UserController
# Generate middleware
curis g middleware auth
# Generate migration
curis g migration CreateUsersTabledev
Start the development server:
curis dev [options]Options:
--port <number>- Port number (default: 3000)--host <host>- Host address (default: localhost)--watch- Enable file watching
Example:
curis dev --port 8080 --watchbuild
Build the project for production:
curis build [options]Options:
--output <dir>- Output directory (default: dist)--target <runtime>- Target runtime (node, bun, deno)
Example:
curis build --target node --output ./builddb
Database management commands:
curis db <subcommand> [options]Subcommands:
db:migrate
Run database migrations:
curis db:migrate [options]Options:
--rollback- Rollback the last migration--reset- Reset the database--seed- Run seeders after migration
Examples:
# Run migrations
curis db:migrate
# Rollback last migration
curis db:migrate --rollback
# Reset and migrate
curis db:migrate --reset
# Migrate and seed
curis db:migrate --seeddb:seed
Run database seeders:
curis db:seed [options]Examples:
# Run all seeders
curis db:seed
# Run specific seeder
curis db:seed --class UserSeederdb:reset
Reset the database:
curis db:resetserve
Serve the built application:
curis serve [options]Options:
--port <number>- Port number (default: 3000)--host <host>- Host address
Example:
curis serve --port 8080Project Structure
When you create a new project with curis new, this is the generated structure:
my-app/
├── src/
│ ├── app/
│ │ ├── controllers/
│ │ ├── models/
│ │ ├── middleware/
│ │ └── validators/
│ ├── database/
│ │ ├── migrations/
│ │ └── seeds/
│ ├── routes/
│ │ └── index.ts
│ └── index.ts
├── .env
├── .gitignore
├── package.json
├── tsconfig.json
└── README.mdCode Generation
Model Generation
curis g model UserGenerates:
// src/app/models/User.ts
import { Model } from '@curisjs/db';
export class User extends Model {
static tableName = 'users';
id!: number;
createdAt!: Date;
updatedAt!: Date;
}Controller Generation
curis g controller UserControllerGenerates:
// src/app/controllers/UserController.ts
import { Context, json } from '@curisjs/core';
export class UserController {
static async index(ctx: Context) {
return json({ users: [] });
}
static async show(ctx: Context) {
const id = ctx.params.id;
return json({ user: {} });
}
static async store(ctx: Context) {
const data = await ctx.request.json();
return json({ user: data }, { status: 201 });
}
static async update(ctx: Context) {
const id = ctx.params.id;
const data = await ctx.request.json();
return json({ user: data });
}
static async destroy(ctx: Context) {
const id = ctx.params.id;
return new Response(null, { status: 204 });
}
}Middleware Generation
curis g middleware authGenerates:
// src/app/middleware/auth.ts
import { Context, Middleware, Next, json } from '@curisjs/core';
export const auth: Middleware = async (ctx: Context, next: Next) => {
const token = ctx.request.headers.get('Authorization');
if (!token) {
return json({ error: 'Unauthorized' }, { status: 401 });
}
// Verify token
ctx.state.user = await verifyToken(token);
await next();
};Migration Generation
curis g migration CreateUsersTableGenerates:
// src/database/migrations/2024_01_01_000000_create_users_table.ts
import { Knex } from 'knex';
export async function up(knex: Knex): Promise<void> {
return knex.schema.createTable('users', (table) => {
table.increments('id').primary();
table.timestamps(true, true);
});
}
export async function down(knex: Knex): Promise<void> {
return knex.schema.dropTable('users');
}Configuration
curis.config.ts
Create a configuration file in your project root:
// curis.config.ts
import { defineConfig } from '@curisjs/cli';
export default defineConfig({
// Server configuration
server: {
port: 3000,
host: 'localhost',
},
// Database configuration
database: {
client: 'better-sqlite3',
connection: {
filename: './database.sqlite',
},
},
// Build configuration
build: {
outDir: 'dist',
target: 'node',
},
});Environment Variables
The CLI respects these environment variables:
# Development
NODE_ENV=development
PORT=3000
HOST=localhost
# Database
DB_CLIENT=better-sqlite3
DB_FILENAME=./database.sqlite
# Or for PostgreSQL
DB_CLIENT=pg
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=myappScripts
Add these scripts to your package.json:
{
"scripts": {
"dev": "curis dev",
"build": "curis build",
"start": "curis serve",
"db:migrate": "curis db:migrate",
"db:seed": "curis db:seed",
"db:reset": "curis db:reset",
"generate": "curis generate"
}
}Templates
The CLI includes several project templates:
Default Template
Full-stack application with:
- CurisJS core
- Database ORM
- Example routes and controllers
- Authentication middleware
API Template
API-only application with:
- REST API structure
- Database models
- API versioning
- Authentication
Minimal Template
Minimal setup with:
- Basic routing
- No database
- Essential middleware
Deployment
Build for Production
# Build the project
curis build
# The output is in ./dist directory
# Deploy the dist folder to your serverDeploy to Different Runtimes
# For Node.js
curis build --target node
# For Bun
curis build --target bun
# For Deno
curis build --target denoBest Practices
- Use code generation - Save time with generators
- Follow conventions - Use the generated folder structure
- Environment variables - Never commit sensitive data
- Migrations - Always create migrations for schema changes
- Build before deploy - Test the production build locally
Complete Workflow
# 1. Create project
curis new my-blog --db postgres
# 2. Navigate to project
cd my-blog
# 3. Generate models
curis g model Post
curis g model User
# 4. Generate migration
curis g migration CreatePostsTable
# 5. Run migrations
curis db:migrate
# 6. Generate controllers
curis g controller PostController
curis g controller UserController
# 7. Start development
curis dev
# 8. Build for production
curis build
# 9. Serve production build
curis serve