Skip to content

Quick Start ​

From zero to your first migration in 60 seconds.

1. Scaffold a project ​

bash
dbsh new
bash
dbsh new --name MyApp --provider postgresql
bash
dbsh new --name MyApp --provider sqlserver --output ./my-db-project

When called without flags, dbsh new enters interactive mode — it prompts for your project name, lets you select the database provider, and asks whether to use the current directory.

This creates:

Database/
  Config/
    migration.json                 # global config (edit connection string)
    environments/
      local.json                   # dev defaults, approval off
      development.json             # CI/CD friendly
      staging.json                 # gated environment
      production.json              # approval + deployment window
  Migrations/
    Schema/
      V001__Example_Users.sql      # runnable example (provider-specific SQL)
    Data/
    Patch/
    Rollback/
      U001__Example_Users.sql      # example rollback
  Templates/                       # used by dbsh create
.github/workflows/
  database-migration.yml           # GitHub Actions CI pipeline
.gitignore

2. Create a migration ​

bash
dbsh create --name CreateUsersTable --type schema --author jane

This creates a file like Database/Migrations/Schema/V20260617120000__CreateUsersTable.sql:

sql
-- Migration: CreateUsersTable
-- Author: jane
-- Created: 2026-06-17

-- TODO: Add your SQL migration here

3. Write SQL ​

Replace the TODO with your actual DDL:

sql
-- Migration: CreateUsersTable
-- Author: jane
-- Created: 2026-06-17
-- Description: Creates the users table

CREATE TABLE users (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email       VARCHAR(255) NOT NULL UNIQUE,
    name        VARCHAR(100) NOT NULL,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX idx_users_email ON users (email);

4. Validate ​

bash
dbsh validate

Checks naming conventions, duplicate versions, missing dependencies, and required metadata fields. No database required.

5. Preview the plan ​

bash
dbsh plan

Shows exactly what will run and in what order. No database required.

6. Deploy ​

bash
# Set your connection string
export DB_CONNECTION_STRING="Host=localhost;Database=myapp;Username=postgres"

# Create tracking tables (once per database)
dbsh init -c "$DB_CONNECTION_STRING"

# Apply pending migrations
dbsh migrate -c "$DB_CONNECTION_STRING"

7. Check status ​

bash
dbsh status

Shows a summary and detailed table of all migrations with their status.

8. Rollback ​

bash
dbsh rollback --count 1

Requires a matching U script in Database/Migrations/Rollback/.

What's next? ​

Released under the MIT License.