Skip to content

Schema Evolution

Schemas change over time. Minions handles this gracefully by preserving old data.

ChangeWhat Happens
Field addedExisting minions get the default value (or nothing)
Field removedOld values move to _legacy
Field type changedIncompatible values move to _legacy
Field made requiredExisting minions are flagged for migration
Validation changedOld values are NOT retroactively validated
import { migrateMinion } from 'minions-sdk';
const oldSchema = [
{ name: 'name', type: 'string' },
{ name: 'age', type: 'number' },
];
const newSchema = [
{ name: 'name', type: 'string' },
{ name: 'role', type: 'string', defaultValue: 'user' },
// 'age' removed
];
const migrated = migrateMinion(myMinion, oldSchema, newSchema);
// migrated.fields.role === 'user' (default applied)
// migrated._legacy.age === 30 (preserved from old data)

When fields are removed or become incompatible, their values are preserved in _legacy. This ensures no data is silently lost during schema changes.

{
"fields": { "name": "Alice", "role": "user" },
"_legacy": { "age": 30 }
}