A quick tour
Click through a real model → generator → query flow. Everything is Dart-first.
Define a modelOpen docs
import 'package:sequelize_orm/sequelize_orm.dart';
part 'users.model.g.dart';
(tableName: 'users', timestamps: false)
abstract class Users {
()
()
()
DataType id = DataType.INTEGER;
.IsEmail('Email is not valid')
()
DataType email = DataType.STRING;
('first_name')
.Min(4)
()
DataType firstName = DataType.STRING;
static UsersModel get model => UsersModel();
}
DB shape stays explicit
- table: users
- columns: id (PK, autoincrement), email (NOT NULL, isEmail), first_name (NOT NULL, min 4)
- generated: typed helpers + query extensions
How it works
A simple flow you can explain in one minute.
1
Define
Annotate a Dart class with @Table and column annotations.
2
Generate
Run build_runner to get typed helpers + query extensions.
3
Run
Use the same API on Dart VM and dart2js.
Jump to what you need
High-intent shortcuts into the docs.
Dart-first (and strongly typed)
Build queries with typed columns and IDE autocomplete. Your model definitions power a safer query experience.
Annotations + code generation
Define tables with simple annotations and let build_runner generate model wrappers, helpers, and typed query extensions.
Same API on server + web
Run on Dart VM or dart2js without changing how you write models and queries.