Skip to main content

Seeding & CLI Reference

Sequelize Dart provides two dedicated CLI commands and a programmatic API for code generation, database synchronization, and seeding.

CLI Commands​

generate -- Code generation​

The generate command produces *.model.g.dart files for each model and the model registry. It reads sequelize.yaml only for the models_path, seeders_path, and registry_path settings -- it does not load .env or use database connection profiles.

# Generate all models and registry (default)
dart run sequelize_orm_generator:generate

# Generate a single model
dart run sequelize_orm_generator:generate --input lib/models/users.model.dart

# Generate models from a specific folder
dart run sequelize_orm_generator:generate --folder lib/models

# Generate only the registry
dart run sequelize_orm_generator:generate --registry

# Watch mode (persistent stdio server)
dart run sequelize_orm_generator:generate --server
OptionDescription
--input <path>Single *.model.dart file to generate.
--folder <path>Folder to scan for **/*.model.dart.
--registryGenerate only the *.registry.dart outputs.
--output <path>Output path (only applies to --input).
--serverRun as a persistent stdio server (JSON lines).
--package-root <path>Package root (defaults to nearest pubspec.yaml).

seed -- Database seeding​

The seed command synchronizes your database schema and executes all registered seeders. It loads .env and resolves env.VAR references in sequelize.yaml connection profiles.

# Run seeders using the default profile
dart run sequelize_orm_generator:seed

# Run seeders with a database URL
dart run sequelize_orm_generator:seed --url postgresql://user:pass@localhost/db

# Run seeders with a specific profile from sequelize.yaml
dart run sequelize_orm_generator:seed --database dev

# Force sync before seeding (drops and recreates tables)
dart run sequelize_orm_generator:seed --force

# Verbose output
dart run sequelize_orm_generator:seed --verbose
OptionDescription
--url <url>Direct database connection URL.
--database <name>Select a database profile from sequelize.yaml.
--dialect <dialect>Override the dialect (postgres, mysql, mariadb, sqlite).
--alter / --no-alterWhether to run sync({alter: true}) before seeding. (Default: true)
--force / --no-forceWhether to run sync({force: true}) (drops tables!) before seeding. (Default: false)
--verbose / -vShow detailed logs, including SQL queries and seeder status.

sequelize.yaml Configuration​

The sequelize.yaml file (placed in your project root) is used by the CLI to locate your models, seeders, and database connection profiles.

# Path to your @Table model files (used by both generate and seed)
models_path: lib/db/models

# Path to your SequelizeSeeding files (used by both generate and seed)
seeders_path: lib/db/seeders

# Optional: Custom path for the generated model registry
# registry_path: lib/db.dart

# Database connection profiles (used by seed only)
connection:
default:
url: postgres://postgres@localhost:5432/postgres
dev:
dialect: postgres
host: env.DB_HOST
port: env.DB_PORT
user: env.DB_USER
password: env.DB_PASS
database: env.DB_NAME
ssl: false

Configuration Options​

  • models_path: Directory where the generator scans for *.model.dart files. Used by both generate and seed.
  • seeders_path: Directory where the generator scans for *.seeder.dart files. Used by both generate (for registry) and seed (for execution).
  • registry_path: Optional custom output path for the generated registry file.
  • connection / database: Define database profiles. You can have a single unnamed profile or multiple named profiles. Used by seed only.
  • .env support: Use env.VAR_NAME to resolve values from a .env file in your project root. This is the recommended way to handle sensitive credentials. Loaded by seed only -- the generate command does not read .env.

Programmatic Seeding​

You can run seeders directly from your code using the sequelize.seed() extension.

import 'package:sequelize_orm/sequelize_orm.dart';
import 'lib/db/db.dart'; // Import your generated registry

void main() async {
final sequelize = Sequelize().createInstance(...);

// Initialize models first
await sequelize.initialize(models: Db.allModels());

// Run seeders
await sequelize.seed(
seeders: Db.allSeeders(),
syncTableMode: SyncTableMode.alter,
log: (msg) => print(msg),
);
}

seed() Parameters​

  • seeders: A list of SequelizeSeeding instances (usually provided by Db.allSeeders()).
  • syncTableMode: Controls how tables are synchronized before seeding:
    • SyncTableMode.alter: Equivalent to sync({alter: true}).
    • SyncTableMode.force: Equivalent to sync({force: true}).
    • SyncTableMode.none: Skips synchronization.
  • log: An optional callback Function(String message) to receive seeder progress notifications.

Authoring Seeders​

Seeders are classes that extend SequelizeSeeding<TCreate>, where TCreate is the generated create-type for your model (e.g., CreateUser).

import 'package:sequelize_orm/sequelize_orm.dart';
import '../db.dart';

class UserSeeder extends SequelizeSeeding<CreateUser> {

int get order => 1; // Execution priority (ascending)


SeederCreateFn<CreateUser> get create => Db.user.create;


List<CreateUser> get seedData => [
CreateUser(username: 'alice', isActive: true),
CreateUser(username: 'bob', isActive: false),
];
}
  • order: Numeric value to determine execution order. Lower numbers run first.
  • create: The function used to insert data. Use the model's create method tear-off.
  • seedData: A list of data objects to be inserted.

Logging & Debugging​

Sequelize Dart provides flexible logging for both SQL queries and internal setup processes.

Redirection of Logs​

When you provide a logging callback to createInstance, all SQL-related logs are redirected there, including:

  • Standard SQL queries (SELECT, INSERT, etc.).
  • Model definitions (CREATE TABLE).
  • Association setup logs.

Internal Debug Logging​

The debug flag in createInstance enables internal diagnostic logs that help you verify that Sequelize is initializing correctly.

final sequelize = Sequelize().createInstance(
connection: ...,
logging: (sql) => print(sql),
debug: true, // Enables "[Sequelize] Defining models..." logs
);