Skip to main content

Transactional pipelines

In Bauplan, every pipeline run behaves like a database transaction. That means:

  • If the run succeeds, Bauplan commits all outputs.
  • If the run fails, the data on your current branch remains untouched.

This behavior applies automatically - whether you're developing locally or running production jobs on a schedule.

Bauplan enforces transactionality with temporary execution branches:

  • When you trigger a run, the platform forks your current branch to create an isolated branch: Bauplan materializes intermediate outputs in this temporary branch.
  • If the run succeeds, Bauplan merges the outputs into your working branch, making it point to the latest commit - your branch now reflects the results of that pipeline run.
  • If the run fails, your working branch remains unchanged. Bauplan preserves intermediate artifacts for inspection.

This guarantees that every change to your lakehouse is atomic, isolated, and versioned.

          ┌────────────┐
│ main/ │
│ active │
│ branch │
└─────┬──────┘

(run triggered from this branch)


┌────────────────────┐
│ temporary branch │
│ (isolated run) │
└─────────┬──────────┘


┌─────────────────────────────┐
│ pipeline succeeds? │-─────────────────┐
└─────────────┬───────────────┘ │
│ yes │ no
▼ ▼
┌────────────────────────┐ ┌───────────────────────────┐
│ Merge into working │ │ Keep active branch clean │
│ branch as new Ref │ │ Keep temp branch for logs │
└───────────┬────────────┘ └─────────┬─────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌─────────────────────────────┐
│ Active branch now │ │ Inspect failed run metadata │
│ points to new Ref │ │ Re-run or debug as needed │
└──────────────────────┘ └─────────────────────────────┘