Skip to content

chkit generate

Compares your current TypeScript schema definitions against the previous snapshot, computes a migration plan, and writes migration SQL and an updated snapshot.

chkit generate [flags]
FlagTypeDefaultDescription
--name <name>stringMigration name (used in the filename)
--migration-id <id>stringDeterministic migration file prefix override
--rename-table <mapping>stringExplicit table rename: old_db.old_table=new_db.new_table
--rename-column <mapping>stringExplicit column rename: db.table.old_column=new_column
--table <selector>stringScope operations to matching tables
--dryrunbooleanfalsePrint the plan without writing any files

Global flags documented on CLI Overview.

  1. Loads your config and schema definitions
  2. Reads the previous snapshot from metaDir/snapshot.json
  3. Computes a diff between old and new definitions using planDiff() from @chkit/core
  4. Produces an ordered list of SQL operations

If there are no differences, no migration file is created.

Every operation in the plan is assigned a risk level:

RiskMeaningExample operations
safeNon-destructive, no data lossCREATE TABLE, ADD COLUMN
cautionPotentially impactful, review recommendedALTER TABLE settings changes
dangerDestructive, may cause data lossDROP TABLE, DROP COLUMN

The --table flag limits operations to tables matching a selector:

  • database.table — exact match
  • database.prefix* — prefix wildcard in a specific database
  • table — matches across all databases

An empty match set emits a warning and produces no output.

chkit detects potential renames through two mechanisms:

  1. Schema metadata — set renamedFrom on your schema definition
  2. CLI flags--rename-table old_db.old_table=new_db.new_table and --rename-column db.table.old_col=new_col

CLI flags take priority when both sources specify a mapping for the same object. Rename flags accept comma-separated values for multiple mappings.

Validation errors are raised for conflicting, chained, or cyclic rename mappings.

With --dryrun, the command prints the migration plan (operations with risk levels and SQL) without writing any files. Useful for previewing changes before committing.

If the codegen plugin is configured with runOnGenerate: true (the default), chkit generate automatically runs codegen after writing migration artifacts. A codegen failure causes generate to fail.

Schema validation issues (such as invalid definitions) produce a validation_failed error with structured issue codes and messages. The process exits with code 1.

Generate a named migration:

Terminal window
chkit generate --name add_users_table

Preview changes without writing files:

Terminal window
chkit generate --dryrun

Scope to a specific table:

Terminal window
chkit generate --table analytics.events

Explicit table rename:

Terminal window
chkit generate --rename-table old_db.users=new_db.accounts

Explicit column rename:

Terminal window
chkit generate --rename-column analytics.events.old_name=new_name
CodeMeaning
0Success
1Validation error
{
"command": "generate",
"schemaVersion": 1,
"scope": { "enabled": false },
"mode": "plan",
"operationCount": 2,
"riskSummary": { "safe": 1, "caution": 1, "danger": 0 },
"operations": [
{ "type": "create_table", "key": "default.users", "risk": "safe", "sql": "CREATE TABLE ..." }
],
"renameSuggestions": []
}
{
"command": "generate",
"schemaVersion": 1,
"scope": { "enabled": false },
"migrationFile": "./chkit/migrations/0001_add_users_table.sql",
"snapshotFile": "./chkit/meta/snapshot.json",
"definitionCount": 3,
"operationCount": 2,
"riskSummary": { "safe": 1, "caution": 1, "danger": 0 }
}
{
"command": "generate",
"schemaVersion": 1,
"error": "validation_failed",
"issues": [{ "code": "...", "message": "..." }]
}
  • chkit init — scaffold a project before your first generate
  • chkit migrate — apply generated migrations to ClickHouse
  • chkit codegen — manually trigger TypeScript type generation