Skip to main content
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