← All Releases

v0.2.50

2026-08-03

ONE ENVIRONMENT, EIGHTEEN ENGINES

The simplification release. Everything DVT runs on now lives in ONE environment — the per-engine private runtimes are gone, and with them the entire class of drift, provenance and missing-adapter failures they bred. Eighteen engines are supported out of one install: Postgres, Redshift, Snowflake, BigQuery, Athena, Databricks, DuckDB (and MotherDuck), Trino, ClickHouse, Oracle, SQL Server, Fabric, SQLite, StarRocks, Exasol, MySQL, MySQL 5.7 and MariaDB — every one validated against its real engine. dvt sync is now one install with a collision guard: it sets up the engine core, every adapter, your drivers and the Sling engine, self-heals a corrupted download, and removes conflicting packages with a stated reason. On top of the simpler engine room: seeds honor selection exactly as you'd expect — graph selectors included — --fail-fast stops a run at the first failure, the health surface guards every scaffolded setting in dvt_project.yml, and retract tells the truth about what it dropped, where it actually landed.

ADDED

  • --fail-fast / -x on dvt run and dvt build: the first failure stops all unstarted work across every phase — seeds, upstream models, federation waves, and the closing engine phase. Whatever is already executing finishes, the tally reports skipped work honestly, and the run exits nonzero.
  • Seed selection, complete: --select and --exclude on dvt seed and on the build's seed phase, with graph selectors resolved exactly — dvt build --select +my_model pulls the model's seed ancestors into the load, and nothing else.
  • Config health, generalized: every scaffolded dvt_project.yml setting (federation_direct, suite_port) must exist in the file. A deleted key flags the project unhealthy in dvt config-checkup; dvt config-fix restores it with its explanatory comment and a .bak of what it changed.

CHANGED

  • ONE environment (the architecture change everything else rides on): a single engine core carrying all eighteen adapters replaces the per-engine private runtimes. No more registry, no more per-engine binaries, no drift to detect — an adapter either imports or dvt sync installs it.
  • The MySQL family returns: MySQL, MySQL 5.7 and MariaDB are supported engines again, on the current engine core, with the connection mode that ends the crash class that forced their removal.
  • dvt sync self-heals: a truncated Sling engine download (the source of an infamous silent failure) is detected by actually executing the binary, deleted, and re-fetched.
  • The suite port comes from dvt_project.yml and nowhere else: no sticky records, no port scanning, no dynamic allocation. An occupied port is a hard error naming the holder — your API URLs never move. Run multiple projects by giving each its own suite_port.
  • clean-bak-files sweeps the entire project tree — any .bak file, every folder, the root included.
  • Seeds keep their two enhancements over the standard behavior — Sling bulk loading for large files, and csv / parquet / json / jsonl as first-class seed formats — while matching standard selection semantics exactly.

FIXED

  • Retract drops relations where they actually LANDED, not where the project file points: the materialization ledger's recorded schema is the authority, so a relation that landed in an unexpected schema is found, dropped and cleared instead of surviving every retract behind a green no-op. An empty retract says "Nothing to drop" and why.
  • Engine-true schema defaults in the connection layer: DuckDB and SQLite default to main, ClickHouse addresses database.table, BigQuery carries its dataset — no more relations silently landing in a phantom public schema on engines that don't have one.
  • A fresh project's first build no longer fails on a missing target schema — the seed lane creates it (engines where schemas are users excepted).
  • DuckDB targets with a non-default schema no longer fail during staged loads.
  • A failed seed under --fail-fast aborts the build; without it, dependents of the failed seed are skipped by name and everything independent still runs.

Get it: pip install dvt-core==0.2.50 · wheels on PyPI for macOS (arm64 + x86_64) and Linux x86_64, Python 3.10–3.14 — the full platform matrix.