Schema changes that don't take prod down.
Vadyl classifies every migration into one of eight risk levels and picks the right strategy. Add a NOT NULL column on a 50M-row table? Expand-then-backfill with checkpoint-resumable batches. Rename a field? Compatibility window with dual-write. Drop a destructive constraint? Approval-gated with explicit acknowledgment. Every transition is durable, resumable, and capability-aware.
Vadyl picks the strategy. You pick the change.
TransitionStrategy is selected from the migration shape × the provider's DbCapabilities. No automatic fallback to a weaker strategy — if no strategy is viable, the transition is rejected before any DDL runs.
MetadataOnly
No physical change. Pure platform metadata mutation — entity rename, label change, annotation update. Instant. Always reversible.
NativeOnline
Provider supports the operation online without locking. SQL Server with ONLINE = ON, PostgreSQL CONCURRENTLY, MySQL INSTANT — Vadyl emits the right syntax per provider.
ExpandThenBackfill
Add the new column nullable. Backfill with checkpoint-resumable batches — pick up where you left off after a crash. Then constrain in a separate transition once data is consistent.
CompatibilityWindow
Old shape and new shape coexist. Application reads and writes both. Window stays open until every consumer cuts over. Then contract.
ShadowCopyCutover
Build a shadow table with the new shape. Live-replicate writes. Atomic swap when caught up — sequential rename for ZeroDowntime tier, brief blocking for the BriefBlocking tier.
BlockingMaintenanceWindow
When nothing else is viable, fall back to a maintenance-gated blocking DDL. Always opt-in via TransitionExecutionOptions.AllowBlocking. Never silent.
Eight states, durable. Crash-resumable.
Every transition is a row in the control plane. State transitions are deterministic. Backfill checkpoints are persisted. A crash mid-run resumes exactly where it stopped.
Coordinated evolution across many entities.
When one transition depends on another — relation cutover, FK retargeting, cross-entity backfill — the EvolutionGraphCoordinator drives the whole graph. Topological tier execution. Cross-entity barriers. Recovery on restart.
Topological execution tiers
Kahn-sorted across RelationDependency edges. Independent entities migrate in parallel. Dependent entities wait at barriers.
Fail-closed on unviable
If any entity in the graph has no viable strategy under its provider's caps, the whole graph plan is rejected. No partial optimistic start.
Cutover boundaries
Nodes past CuttingOver are irreversible by construction. Vadyl marks the boundary and refuses rollback through it.
Recovery on restart
EvolutionRecoveryService is a hosted service. Active phases on a crashed run are marked Failed; paused phases are left as-is for the operator to resume.
Deterministic, durable, crash-resumable
Vadyl picks. No silent fallback.
Checkpoint per batch
Multi-entity coordination
Stop dreading migrations.
Define the new shape. Vadyl classifies the change, picks the strategy, drives the state machine, checkpoints the backfill. You watch the progress, ship when it's green.