ORMs such as Django and SQLAlchemy not only support type-checked migrations, but can automatically generate the initial migration to create the models. I find this by far the most valuable migration-related feature as it saves me from having to write the schema in two places (in the actual model definition and in the initial migration). I don't see it documented anywhere (my apologies if I missed), but if it's there I will switch from Granite to this (Granite kind of supports it but it only works with a tiny subset of Granite's features so I can't actually use it).