Core Concepts

Branching & publications

One persistent DAG per project. Branchable product model. Workspaces, sandboxes, commits, proposals, three-way merge — all canonical.

Vadyl treats your product model like source code: there is one persistent branching DAG per project, with immutable commits, mutable workspaces, isolated sandboxes, typed proposals, and three-way merge. Schema, policies, workflows, handlers, scheduled tasks, webhooks, connections, runtime configuration, deployment intent — all of it lives on the DAG.

The DAG

  • Branch — a named lineage. Like a git branch but for your product model.
  • Commit — an immutable snapshot of the contract at a point in time. Content-addressed via SHA-256 of canonical-serialized manifest. Identical content always produces the same commit hash.
  • Workspace — your in-progress overlay on a branch. Optimistic concurrency with version tokens (CAS-protected). Multiple workspaces can fork from the same branch head.
  • Sandbox — an isolated, disposable database (and runtime) for testing risky changes against real-shaped data.
  • Proposal — a typed pull-request analog. Carries a diff between two branches plus approvals, validation results, and policies.
  • Deployment — explicit intent to apply a branch to an environment. Drives DDL execution, runtime publication, and progressive rollout.

Manifest domains

Vadyl's branching substrate covers 19 typed manifest domains as of SnapshotManifest.CurrentFormatVersion = 15. Each domain has its own diff analyzer that produces typed semantic operations (not text diffs). Examples:

  • Schema (entities, fields, relations, indexes, constraints)
  • ProviderBindings (which providers a project is bound to)
  • Federation (cross-project data contracts)
  • Seeds (declarative seed data)
  • RuntimeConfig (capability binding configuration)
  • DeploymentIntent (target environments, ramp policies)
  • Scheduling (task definitions, triggers)
  • Webhooks (endpoints, event filters)
  • SourceAssets (authored code modules)
  • Connections (governed external integrations)
  • Handlers, Workflows, DatabaseSources, VersionGovernance, Automations, Agents, …

Three-way merge

Merging branches uses semantic three-way merge against the common ancestor. The merge engine produces typed conflict reports — not line-by-line diffs. A conflict on an entity field is described as "Order.total: precision=10 vs precision=12", not as a string diff. You resolve at the semantic level, then commit the merge.

Path-aware conflict detection means renaming an entity on one branch and adding a field to it on another doesn't conflict — the merger understands rename intent.

Validation pipeline

Every commit and merge runs through the validation pipeline. Built-in rules include schema integrity (no orphan FKs, no duplicate keys), migration safety (would this break a deployed environment?), and destructive change detection. You can register custom validation rules for project-specific invariants.

Validation is fail-closed at the proposal layer — a proposal cannot be merged if validation fails or if the branch's protection policy requires it.

Publications

A ProjectRuntimePublication is a versioned, atomic snapshot of the compiled runtime: schema, handlers, workflows, scheduled tasks, agents, webhooks, capability bindings — everything that participates in serving requests. Publications are monotonic per project and form an auditable history.

Atomic transition: at any moment, a project serves traffic from exactly one publication. The runtime swap is instantaneous. Rollback is a publication-pointer change.

Sandbox isolation

A sandbox is a real database (not a mock) with the branch's DDL applied and optionally pre-seeded from a snapshot. You can fork sandboxes, checkpoint operation logs, undo/redo at the operation level, and merge sandbox-derived changes back into the workspace.

Environments and deployments

An environment (dev, staging, production) is a binding from a branch to a runtime location with its own infrastructure. A deployment is the explicit operation that promotes a branch's commit to an environment, runs DDL through the schema-transition pipeline, advances the publication pointer, and progressively shifts traffic per the ramp policy.

See your first deploy for the end-to-end flow.