Angel's ORM ships with support for running database migrations, using a system modeled over that of Laravel.

An example is shown below:

class UserMigration implements Migration {
  void up(Schema schema) {
    schema.create('users', (table) {
        ..varChar('username', length: 32).unique()

  void down(Schema schema) {

Migrations can be used to either create, alter, or drop database tables.

For more in-depth documentation, consult the angel_migration documentation:


If you use angel_orm_generator, then a migration will be generated by default for each class annotated with @orm.

To disable this:

@Orm(generateMigrations: false)
abstract class _MyModel extends Model {}

Running Migrations

Using package:angel_migration_runner, we can create executables that run our database migrations:

import 'package:angel_migration_runner/angel_migration_runner.dart';
import 'package:angel_migration_runner/postgres.dart';
import 'package:postgres/postgres.dart';
import '../../angel_migration/example/todo.dart';

var migrationRunner = PostgresMigrationRunner(
  PostgreSQLConnection('', 5432, 'test'),
  migrations: [

Running this file will produce output like the following:

Executes Angel migrations.

Usage: migration_runner <command> [arguments]

Global options:
-h, --help    Print this usage information.

Available commands:
  help       Display help information for migration_runner.
  refresh    Resets the database, and then re-runs all migrations.
  reset      Resets the database.
  rollback   Undoes the last batch of migrations.
  up         Runs outstanding migrations.

Run "migration_runner help <command>" for more information about a command.

The migration runner keeps track of a migrations table, in order to be able to keep track of which migrations it has run.

Last updated