DBTScale & Expertise

Fusion, Migration, Anti-Patterns & Staff-Level Judgement

How analytics engineers turn raw warehouse tables into trusted models — pick a topic on the left and its full breakdown loads here: the mental model, the compiled SQL dbt actually issues, live runs you can drive yourself, and the failure modes that quietly ship wrong numbers.

18 min readTopics chapter readerLevel · Hard
01 · Four names, one alpha, one proprietary binary

Two Engines, One Project

Four things, not two. dbt Core v1.x is the Python implementation — Apache 2.0, stable, what you run today. dbt Core v2.0 is the Rust RUNTIME, relicensed out of Fusion under Apache 2.0, and it is an alpha. The dbt Fusion engine is a free binary containing that runtime plus, in dbt Labs' words, "some proprietary code" — free to use, still proprietary, licensed under its own agreement. dbt platform is the commercial SaaS, formerly dbt Cloud. Licence, implementation, distribution and hosting are four separate axes, and every confusing sentence about Fusion is two of them collapsed into one.

4 min · Topic 1 of 9

Twenty-one chapters have targeted one thing: dbt Core 1.12.0, the Python implementation, current stable since 16 July 2026. That is still the right target. But the names around it moved twice in fourteen months, and the version of this story most engineers are carrying — "Core is the Python one, Fusion is the proprietary Rust one" — stopped being true on 1 June 2026.

The widget below runs the same faults through three engines. Ignore speed. The question that decides a migration is how much of your project each engine understands before it sends anything to a warehouse.

Core mental model

Four things, not two. dbt Core v1.x is the Python implementation — Apache 2.0, stable, what you run today. dbt Core v2.0 is the Rust RUNTIME, relicensed out of Fusion under Apache 2.0, and it is an alpha. The dbt Fusion engine is a free binary containing that runtime plus, in dbt Labs' words, "some proprietary code" — free to use, still proprietary, licensed under its own agreement. dbt platform is the commercial SaaS, formerly dbt Cloud. Licence, implementation, distribution and hosting are four separate axes, and every confusing sentence about Fusion is two of them collapsed into one.

Why it matters

Getting these four names wrong costs real money in two directions. Teams migrate to "the open-source Rust engine" and discover the binary they installed is proprietary and the Apache-licensed runtime is an alpha with no beta and no RC behind it. Other teams refuse to look at Fusion because "it is closed", and give up a static-analysis capability that catches a class of defect — an unresolvable column — that dbt Core 1.x structurally cannot see, since it templates SQL rather than comprehending it. The second cost is quieter: on dbt Core 1.x there is no column-level lineage at all, which Chapter 11 established, so every impact question is answered by reading models rather than by asking the tool.

dbt Core 2.0, precisely
The Rust runtime, open-sourced out of Fusion and released as dbt Core under Apache 2.0 on 2026-06-01. Current build 2.0.0a5 (git tag v2.0.0-alpha.5), 20 July 2026. There is no beta, no release candidate and no GA — anyone who tells you dbt Core 2.0 is stable has not read the tag.
The dbt Fusion engine
A free binary distribution built on the v2 runtime plus proprietary code, licensed under the agreement published at getdbt.com/dbt-fusion-engine-license-agreement — that is the page title; the document itself opens by naming itself the "dbt Product Licensing Agreement." Not deprecated: the docs (updated 2026-07-31) describe it as the default experience when you install dbt. Free to use is not the same as open source, and both halves of that sentence are load-bearing.
static_analysis
A Fusion-only config, ignored by dbt Core, taking strict | baseline (default) | off. It is settable in dbt_project.yml (+static_analysis:), in a model's YAML config:, or via {{ config(static_analysis='off') }}, with a --static-analysis CLI flag. Setting it off costs syntax and type checking, CTE previews, and column-level lineage — and it PROPAGATES: a child can never be stricter than its parent.
v2 adapters are re-implemented, not recompiled
The v2 adapters are written in Rust inside the dbt-core monorepo and connect through a pre-existing ADBC driver — dbt Labs do not write drivers. The extension point is an AdapterType enum plus match adapter_type() arms across roughly thirteen files. Your existing Python dbt-<adapter> package does not work on v2; only the Jinja macro layer ports over. That is why the adapter matrix is short and why it grows slowly.
Support windows, which are dated — unlike the sunset, which is not
One year of support per minor: 1.12 is in active support until 2027-07-15, 1.11 is critical-only until 2026-12-18, 1.10 is deprecated. There is no announced end for the 1.x line at all. dbt Labs, verbatim: "You don’t have to move to v2.x today, tomorrow, or ever."
One project, four faults and two non-faults — where does each engine tell you, and what does it know?Same repo, same Snowflake account, same models. The interesting question is not which engine is faster; it is how much of your project each engine understands before it sends anything to a warehouse. Pick a fault.
the fault
-- models/marts/mart_episode_catalogue.sql
select
    episode_id,
    episode_titel        -- transposed, and upstream has no such column
from {{ ref('int_episode_catalogue') }}
dbt Core 1.12.0Python · Apache 2.0 · stable, 16 Jul 2026 · what this KB targetsWAREHOUSE — at run time, from the databaseNot caught. dbt Core 1.12 renders Jinja into a string and sends it; the string is only SQL to the database. You find out from Snowflake, at run time, in whatever environment ran it first.
dbt Core 2.0.0a5the Rust runtime · Apache 2.0 · ALPHA, 20 Jul 2026 · no beta, no RC, no GANOT KNOWN — the engine has no answer to giveNot a documented capability of the open runtime. dbt Labs document static analysis as a Fusion feature and document its config as ignored by dbt Core — so this chapter does not claim the Apache-licensed runtime catches it. Where a source is silent, the honest answer is "unknown", not "probably".
dbt Fusion enginethe v2 runtime plus some proprietary code · a free binary under a proprietary licenceKNOWN — the engine can answer this without runningThis is the difference worth caring about. Fusion comprehends the SQL rather than templating it: dbt Labs describe static analysis as providing syntax and type checking, CTE previews and column-level lineage, and describe turning it off as costing exactly those. The engine can tell you the column does not exist without asking the warehouse.
1.12 · caught before the warehouse3 of 4the unresolvable column is the one that gets away
2.0 alpha · caught before the warehouse3 of 4parse-time strictness, from the runtime
Fusion · caught before the warehouse4 of 4plus the column question, which the other two cannot answer at all
Four names, and only one of them is a licence you already understand
NameWhat it isLicenceStatus on 2026-08-04
dbt Core v1.xThe original Python implementationApache 2.0Stable — 1.12.0, 16 Jul 2026. What this KB targets.
dbt Core v2.0The Rust runtime, open-sourced out of FusionApache 2.0ALPHA — 2.0.0a5, 20 Jul 2026. No beta, no RC, no GA.
dbt Fusion engineA free binary: the v2 runtime plus some proprietary codeProprietary — "dbt Fusion Engine License Agreement" (page title); the document itself is the dbt Product Licensing AgreementNot deprecated. The docs (upd. 2026-07-31) call it the default experience when you install dbt.
dbt platformThe commercial SaaS, formerly dbt Cloud (renamed May 2025)CommercialGA — Developer (Free) · Starter $100/user/mo · Enterprise · Enterprise+
dbt Labs, verbatim on 2026-06-01: "The subset of code (we’re calling it the runtime) which we previously committed to releasing publicly under the ELv2 license is now under the Apache 2.0 license as dbt Core." And, in the same post, "…one called Fusion providing the best experience in a binary containing some proprietary code." Both halves matter: the runtime is Apache-2.0 and alpha; the binary is free to use and still proprietary.
The refusal most learners will meet firstworked example
Config
The 'postgres' adapter is not yet supported by dbt Fusion.
Supported adapters: snowflake, bigquery, databricks, redshift
Quoted from dbt-labs/dbt-adapters#1992 (opened 2026-06-01, closed 2026-06-09) — not from a run of this project, which is on Snowflake. Postgres is the adapter most people learn dbt on and run locally, and it is the one Fusion does not support. dbt Labs have said Postgres support is planned; it is not supported today, and this chapter will not put a date on a plan.
Fusion support is per adapter — never say "Fusion is GA" unqualified
AdapterFusion status (docs updated 2026-07-31)What that means for a team
SnowflakeGAThe one adapter where "should we adopt it in production" is a real question rather than a bet
BigQueryPreviewFine in development; a production switch is a decision about your appetite for preview software
DatabricksPreviewSame shape as BigQuery
RedshiftPreviewSame shape again — and note Cost Insights is only Preview here too
SparkBeta — CLI onlyPer-surface, not just per-adapter: the CLI qualifier is the part people drop when they repeat this
DuckDBBeta — CLI onlySame qualifier
PostgresNOT SUPPORTEDThe single most common local development setup in the dbt world. This is the row to check first, not last.

Status is per adapter AND per surface. "Fusion is GA" and "Fusion is preview" are both wrong as unqualified sentences, and one of them is wrong in the expensive direction.

The surfaces around the engine, each with its own status
SurfaceStatus on 2026-08-04The detail that changes what you do
dbt lint / dbt formatBeta — v2 and Fusion only, built into the dbt platformSQLFluff-compatible: it reads .sqlfluff, uses the same rule codes (CP01, RF03) and honours -- noqa. On dbt Core 1.12 you are running SQLFluff, not dbt lint — do not send a 1.12 reader to it. No speed figure is printed here: two conflicting vendor numbers exist and no independent one does.
dbt Docs v2AlphaNeeds Fusion or dbt Core 2.0. dbt compile --write-index, then dbt docs serve. Column-level lineage only on Fusion with --static-analysis strict.
dbt StatePreviewWorks with dbt Core, Fusion, dbt platform and external orchestrators — Chapter 15 handed it forward with exactly that framing. Config lag_tolerance. Usage-billed, with billing beginning 2026-09-01.
Cost InsightsGA on Snowflake, BigQuery and Databricks (Jul 2026); Redshift PreviewThe cost attribution Chapter 16 built by hand, as a product — on three adapters.
Column-level lineageTwo paths, neither of them free and opendbt Catalog on dbt platform is GA but Enterprise / Enterprise+ only. dbt Docs v2 on Fusion or Core 2.0 is alpha and needs --static-analysis strict. It is not in dbt Core 1.x at all, which Chapter 11 established and this confirms.
Common mistake

Reading "the runtime is now Apache 2.0" as "Fusion is open source now". You tell a procurement or legal reviewer something false, and they find out from the licence file. Only a subset — the runtime — was relicensed, and it ships as dbt Core 2.0 in alpha. The Fusion binary you actually install is governed by the dbt Fusion Engine License Agreement and contains proprietary code by dbt Labs’ own description. The correct sentence has both halves in it.

Reaching for static_analysis: off to make a stubborn model migrate. You pay the entire migration and keep none of the benefit. off costs syntax and type checking, CTE previews and column-level lineage — and because a child can never be stricter than its parent, everything downstream of that model loses them too. The worst part is that it looks like success: the build is green, and you believe you have migrated.

Better habit

Say "dbt platform (formerly dbt Cloud)" the first time in any document that will outlive the week. Half your readers learned the old name; the other half have never seen it.

Before quoting a Fusion status, name the adapter and the surface. "GA on Snowflake; Postgres not supported" is a sentence you can defend. "Fusion is GA" is not.

Put two dates in a calendar rather than a migration in a roadmap: your adapter’s Fusion status, and your minor version’s support window. Those are the only two things that will actually force your hand.

Custom materializations work on v2 — and that is not the same as being fine

The engine renders your Jinja to DDL exactly as before, so your custom materialization keeps working. What you lose is static analysis on that node: the engine cannot know whether your materialization changes columns, so it silently skips analysis for it. No error, no warning. You migrate, you believe you have column-level lineage, and on that subtree you quietly do not. Pre-flight every custom materialization before the migration, because nothing in the migration will mention them.

Python models do run on the v2 engine

On Snowflake, BigQuery and Databricks, Python models are functional on the v2 engine. They sit outside the static-analysis story for the reason Chapter 21 spent a chapter on: dbt never reads your Python, so a Python model cannot be analysed as SQL. dbt Labs describe that as the last open question before GA. No source says Python models need static_analysis turned off, so this chapter does not say it either.

Python models and dbt beyond SQL — chapter 21
The retired repository people cite as evidence

The dbt-fusion repository was retired in favour of dbt-core and its issues moved. It is not archived — GitHub reports archived: false — and its status is not evidence about the engine’s future in either direction. Chapter 21 made the same correction about dbt-redshift’s move into the adapters monorepo. A repository’s housekeeping is not a product decision.

"What is the difference between dbt Core, dbt Cloud and Fusion?"

The weak answer names two things and gets the licence wrong. The strong answer names four and separates the axes: dbt Core v1.x is the Python implementation under Apache 2.0; dbt Core v2.0 is the Rust runtime, also Apache 2.0, currently an alpha; the Fusion engine is a free binary built on that runtime plus proprietary code, under its own licence; and dbt platform is the commercial SaaS, renamed from dbt Cloud in May 2025. Then land the part that shows you have actually used it: status is per adapter and per surface, Snowflake is GA and Postgres is not supported at all.

Remember this

Four names, four axes: implementation, licence, distribution, hosting. The runtime is Apache-2.0 and alpha; the Fusion binary is free and proprietary; support status is per adapter and per surface; and there is no announced end for the 1.x line you are running today.