Ordinary rendering, schema exchange and client submission reject a value-version
mismatch. They never silently convert a submitted old-format value. To convert
values loaded from your database, your installed adapter may additionally implement
FamilyValueMigration:
In this example, value version 1 is text and version 2 is a map containing text.
Declare matching rules in rules() for the installed value version. Configuration
conversion continues to use your adapter’s migrateConfiguration(). Implement
each supported direction explicitly and throw for unsupported version pairs.
Migration callbacks must be pure transformations: do not save records, send
messages or perform external actions inside them.
The installed family’s declared versions determine the target. Source and target
authorization, typed configuration, migration support and target value rules are
checked. A missing family, unknown version pair, thrown callback, excessive data,
invalid configuration/value or rule that discards the migrated field rejects the
operation. No database write is performed. before remains unchanged;
after is a detached snapshot. changed() tells you whether their canonical
serialized data differs. Repeating an already-current migration validates it
without calling configuration/value converters again.
Continue reading
Extension guides · Definition and registration reference Last modified on October 17, 2026