Learn how to use the beta dbt Fusion engine in your Dagster pipelines, and the technical details of how support was added
We’re excited to share support for the dbt Fusion engine has been added to the Dagster dbt integration.
The Fusion engine is in beta, as is the integration Dagster, but if you’re chomping at the bits to explore the new features, then now you can!
With Fusion there are some pretty enticing improvements. One of the most notable being the performance gains; Fusion compiles and parses projects up to 30x faster than dbt Core, slashing development and iteration times from minutes to milliseconds. But on top of that, it also brings new features, like:
- State aware caching for cost reduction
- A SQL-aware language server and improved IDE experience
- Improved metadata management with tagging and column-level lineage
By fusing dbt Fusion into Dagster’s dbt integration, you're getting:
- Hyper-fast iteration - Instant feedback loops make experimentation and debugging much more efficient.
- Smarter editing experience - SQL authoring becomes proactive with insights baked right into your editor.
- Efficient execution - Only changed models rerun, saving both time and compute costs.
Enabling Fusion support in the Dagster dbt integration
If you’re ready to try Dagster’s dbt integration with Fusion, here’s all you need to do:
- Install dbt Fusion dbt Fusion is distributed as a standalone Rust binary. Follow the dbt installation docs or use the provided install script to get the CLI on your PATH.
- Skip installing dbt-core If you want to test the pure Fusion flow, you don’t need dbt-core in your Python environment. Dagster will detect this and automatically switch to CLI-based methods.
- Point Dagster to your dbt project Use the standard DbtCliResource setup in your definitions:
1from dagster_dbt import DbtCliResource
2
3dbt_resource = DbtCliResource(project_dir="path/to/your/dbt/project")
- Pass the project to your @dbt_assets:
1from dagster_dbt import dbt_assets, DbtProject
2
3project = DbtProject("path/to/your/dbt/project")
4
5@dbt_assets(manifest=project.manifest_path, project=project)
6def my_assets(context, dbt: DbtCliResource):
7 yield from dbt.cli(["build"], context=context).stream()
- Run as usual Materialize your assets with Dagster’s orchestration, and enjoy the same asset materializations, checks, and metadata you get with dbt Core—now powered by dbt Fusion’s speed.
The technical details: How we added dbt Fusion support to Dagster
Supporting the dbt Fusion engine in Dagster’s dagster-dbt library required rethinking our integration interacts with dbt itself. Fusion is written in Rust and ships without the dbt-core Python package, so we needed to make the integration work both with and without the Python APIs.
Here’s what we changed under the hood:
- Removed the hard dependency on dbt-core The integration now detects whether dbt-core is installed. If it is, we keep using the familiar Python methods for things like resolving selection strings. If it isn’t, we fall back to invoking dbt CLI commands directly, so Fusion users get full functionality without Python bindings.
- Compatibility shims for missing Python types When dbt-core isn’t installed we now provide internal stand-ins for these so Dagster can still interpret run results and surface rich asset events.
- Updated log parsing for Fusion’s event format dbt Fusion’s CLI output consolidates all model/test execution logs into a NodeFinished event type, whereas dbt Core uses multiple result event types. We created separate parser subclasses for each engine so asset materializations, checks, and metadata extraction remain consistent.
- Manifest differences handled transparently Fusion’s manifest output lacks a child_map field, so Dagster now builds that mapping dynamically to preserve lineage tracking and check associations.
- Engine-aware selection logic If Python APIs are unavailable, Dagster now resolves --select/--exclude/--selector arguments by calling dbt list --output json under the hood, ensuring selections behave identically in both environments.
The result: whether you’re running dbt Core or dbt Fusion, Dagster gives you the same asset awareness, check integration, and orchestration experience, but if you opt to use the new Fusion engine, then you’ll get to see some pretty awesome performance improvements!