Skip to main content

CLI Configuration

Configure the CLI using orm.config.ts.

Basic Configuration

Create orm.config.ts in your project root:

import { orm, type Config } from "@casekit/orm";
import type { OrmCLIConfig } from "@casekit/orm-cli";
import { snakeCase } from "es-toolkit";
import * as models from "./src/db/models";

const config = {
models,
naming: { column: snakeCase },
connection: { database: "myapp" },
} as const satisfies Config;

export default {
db: orm(config),
directory: "./src/db",
} satisfies OrmCLIConfig;

Configuration Options

db (required)

The ORM instance:

export default {
db: orm(config),
// ...
} satisfies OrmCLIConfig;

directory (required)

Path to your database configuration directory:

export default {
db: orm(config),
directory: "./src/db",
} satisfies OrmCLIConfig;

This directory will contain:

  • index.ts — Database connection
  • models/ — Model definitions

generate

Options for code generation:

import { sql } from "@casekit/sql";

export default {
db: orm(config),
directory: "./src/db",
generate: {
templates: {
default: {
fields: {
id: { type: "serial", primaryKey: true },
createdAt: { type: "timestamptz", default: sql`now()` },
updatedAt: { type: "timestamptz", default: sql`now()` },
},
},
},
},
} satisfies OrmCLIConfig;

When you run orm generate model user, the template fields are included:

export const user = {
fields: {
id: { type: "serial", primaryKey: true },
createdAt: { type: "timestamptz", default: sql`now()` },
updatedAt: { type: "timestamptz", default: sql`now()` },
},
} as const satisfies ModelDefinition;

migrate

Migration-specific options:

export default {
db: orm(config),
directory: "./src/db",
migrate: {
connection: {
// Override connection for migrations
host: "localhost",
port: 5432,
database: "myapp_migrations",
user: "migration_user",
password: "migration_password",
},
},
} satisfies OrmCLIConfig;

Environment Variables

The CLI loads .env automatically. Use environment variables for sensitive configuration:

// orm.config.ts
export default {
db: orm({
models,
connection: {
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT || "5432"),
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
},
}),
directory: "./src/db",
} satisfies OrmCLIConfig;
# .env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp
DB_USER=postgres
DB_PASSWORD=secret

Custom Config Path

Specify a different config file:

npx orm db push --config ./config/orm.config.ts

Complete Example

// orm.config.ts
import { orm, type Config } from "@casekit/orm";
import type { OrmCLIConfig } from "@casekit/orm-cli";
import { sql } from "@casekit/sql";
import { snakeCase } from "es-toolkit";
import * as models from "./src/db/models";

const config = {
schema: "public",
models,
naming: {
column: snakeCase,
table: snakeCase,
},
connection: {
host: process.env.DB_HOST || "localhost",
port: parseInt(process.env.DB_PORT || "5432"),
database: process.env.DB_NAME || "myapp",
user: process.env.DB_USER || "postgres",
password: process.env.DB_PASSWORD,
},
extensions: ["uuid-ossp"],
} as const satisfies Config;

export default {
db: orm(config),
directory: "./src/db",
generate: {
templates: {
default: {
fields: {
id: { type: "uuid", primaryKey: true, default: sql`gen_random_uuid()` },
createdAt: { type: "timestamptz", default: sql`now()` },
updatedAt: { type: "timestamptz", default: sql`now()` },
},
},
audit: {
fields: {
id: { type: "serial", primaryKey: true },
action: { type: "text" },
payload: { type: "jsonb" },
createdAt: { type: "timestamptz", default: sql`now()` },
},
},
},
},
} satisfies OrmCLIConfig;

Type Reference

interface OrmCLIConfig {
db: Orm; // ORM instance
directory: string; // Models directory path
generate?: {
templates?: Record<string, ModelDefinition>;
defaultSchemas?: Record<string, ZodType>;
};
migrate?: {
connection?: ConnectionConfig;
};
}