2.0.0-alpha.3
Released June 29, 2026
Features
- [dbt-fusion] Sqlfluff parity
- [dbt-fusion] For versioned models, automatically create a view at the unsuffixed model name (e.g.
dim_customers) pointing to the latest version (e.g.dim_customers_v2). Enabled by default; disable per-model withlatest_version_pointer: {enabled: false}or globally with the project flaglatest_version_pointer_enabled_by_default: false. Customize the pointer alias via thelatest_version_pointer.aliasconfig or by overriding thegenerate_latest_version_pointer_aliasmacro. - [dbt-fusion] Redshift: use SHOW GRANTS ON TABLE for grants when datasharing is enabled
- [dbt-fusion] Make the maximum seed size hashed for state:modified comparison configurable via --maximum-seed-size-mib, the DBT_MAXIMUM_SEED_SIZE_MIB (or DBT_ENGINE_MAXIMUM_SEED_SIZE_MIB) env var, and dbt_project.yml flags (default 1 MiB; 0 disables the limit). Seed contents are now hashed incrementally with line-ending normalization, plus a Windows legacy-checksum fallback for state comparison.
- [dbt-extension] Signing in from the extension now uses the dbt login command.
- [dbt-fusion] Support catalog federation between Snowflake Horizon and Unity Catalog
- [dbt-fusion] Added support for Javascript UDFs in Snowflake and BigQuery
- [dbt-fusion] Setup catalogs.yml to provide json schemas.
- [dbt-fusion] Add
dbt man --schema catalogsto export a type-discriminated JSON schema for catalogs.yml v2 - [dbt-fusion] Issue compatibility warnings for package versions based on manual compatibility verification when available in Package Hub
- [dbt-fusion] Support the insert_overwrite incremental strategy for the Spark adapter
- [dbt-fusion] Classification
- [dbt-fusion] Honor per-node
+computeconfig on unit_test nodes, allowing a unit_test to override the global--computeflag (e.g.+compute: sidecarunder global--compute remote). - [dbt-fusion] Support the
reservationconfig for BigQuery, allowing query jobs to be routed to a specific BigQuery reservation at the profile, project (+reservation), or model ({{ config(reservation=...) }}) level. - [dbt-fusion] Allow the source application identifier sent during OAuth login to be configured via AuthChainBuilder or the DBT_OAUTH_SOURCE_APP environment variable
- [dbt-fusion] Expose has_dbt_state on GET /api/v1/capabilities
- [dbt-core] support the latest duckdb version 1.5.4 (#15279)
Fixes
- [dbt-fusion] BigQuery source freshness now correctly handles dotted project IDs (e.g. mycompany.io) by using relation component accessors instead of splitting the FQN on '.'. Also fixes a secondary bug where each per-dataset query included a redundant table_id IN (...) filter built from relations in unrelated datasets.
- [dbt-fusion] (fix redshift) always quote materialized view path
- [dbt-fusion] --write-index no longer produces catalog.json (was unintended side effect of #10750; pass --write-index --write-catalog to restore). --write-metadata alone no longer queries the warehouse. Catalog data is now fetched at most once per invocation and shared across all consumers.
- [dbt-fusion] Discover source() calls inside conditional branches that evaluate to false during the parse render.
- [dbt-fusion] Fix field-level manifest conformance gaps for metrics and semantic_models: metric label falls back to name at resolve time (matching dbt-core); semantic model entity description defaults to empty string and entity config defaults to {meta: {}} when unset. Fields where Fusion emits richer values than dbt-core (tags, meta, unrendered_config) are left as-is — these are improvements, not bugs.
- [dbt-fusion] Databricks: under catalogs v2, use CREATE OR REPLACE TABLE for managed Iceberg tables (table_format: iceberg) regardless of file_format, instead of plain CREATE TABLE
- [dbt-fusion] Support incremental materializations on the Spark adapter (append strategy)
- [dbt-fusion] Surface cached data test failures in dbt State builds
- [dbt-fusion] LSP fix code lens when static analysis off
- [dbt-fusion] Report dbt State-reused data tests as reused in dbt test output
- [dbt-fusion] sidecar: empty-string CAST to NULL, *_from_parts zero-tuple to NULL, unknown format string to NULL, timestamp_ltz_from_parts bridges
- [dbt-fusion] Snapshot nodes now correctly serialize config.materialized as snapshot instead of table in the manifest
- [dbt-fusion] ISO date format support for microbatch dates.
- [dbt-fusion] Accept dbt-core-style type annotations on macro arguments (e.g.
param: str) - [dbt-fusion] Singular tests whose ref() or source() calls target a node that doesn't exist in the project are now excluded from the schedule (NodeNotFoundOrDisabled warning at parse time, no execution), matching dbt-core behavior. Previously Fusion scheduled and executed those tests, hitting a dbt1501 render error.
- [dbt-fusion] Accept dotted snapshot block names (e.g.
{% snapshot snp.sql %}) by stopping at the first dot, matching dbt-core behavior - [dbt-fusion] Support comma-separated expression lists in Jinja
doblocks (e.g.{%- do a.append(x), b.append(y) -%}) - [dbt-fusion] fix standardize_grants_dict crash when show_grants returns 0 rows (Redshift, Snowflake, Databricks)
- [dbt-fusion] Support Jinja2 filter postfix attribute access (e.g.
rows|first.col) in minijinja parser - [dbt-fusion] Spark: correctly classify existing relations as views so view models drop with DROP VIEW instead of DROP TABLE
- [dbt-fusion] Promote SA to strict for unit tests with overridden compute, allow unit test nodes to access LP if compute is sidecar.
- [dbt-fusion] Test nodes on disabled models are now emitted into manifest.disabled instead of being silently dropped
- [dbt-fusion] Give each microbatch batch its own statement-result registry so concurrent_batches=true models no longer fail with "The 'statement' result named '' has already been loaded into a variable"
- [dbt-fusion] Unit tests on models that call dbt UDFs via function() no longer fail with a spurious JinjaError (dbt1501); the tested model's function dependencies are now allowed during unit test rendering
- [dbt-fusion] finally and consciously decouple the DuckDB adapter from it's weird cousin Extended
- [dbt-fusion] Fix BigQuery get_relation crash during replay when the INFORMATION_SCHEMA.SCHEMATA location query returns an empty (zero-column) batch; get_dataset_location now returns no location instead of erroring.
- [dbt-fusion] Map Spark EXTERNAL/MANAGED relation types to table so DROP renders a valid
drop tableinstead of an invaliddrop external. Spark 4 reports managed Hive tables as EXTERNAL (TRANSLATED_TO_EXTERNAL), which broke --full-refresh over Thrift - [dbt-fusion] Prevent
dbt system uninstallfrom removing a binary owned by Homebrew, pip, or winget; surface the package manager's uninstall command instead - [dbt-fusion] preserve legacy seed checksum compatibility
- [dbt-fusion] Ensure that persisted_docs configs for seeds are deserialized to the manifest.
- [dbt-fusion] Add support for databricks configs view_update_via_alter, incremental_apply_config_changes, and use_safer_relation_operations
- [dbt-fusion] Fix dbt State support for custom materializations
- [dbt-fusion] Fix manifest emission of null for adapter-specific config fields (sources: external_location, formatter, sync, schema_origin; models: compute, sync, and other adapter extras) — these are now omitted when unset, matching dbt-core behavior
- [dbt-fusion] dbt docs serve now emits a clear error when target/index is missing instead of silently exiting with code 1
- [dbt-fusion] Log when commands auto-install dependencies without an existing package-lock.yml.
- [dbt-fusion] Fix wizard subagents hanging indefinitely due to deadlocked event forwarding, unbounded wait_agent retries, and DuckDB checkpoint race
- [fusion] (dbt-adapter): all ambiguous to_rfc3339 calls are mapped to microsecond precision for Bigquery. Unblocks bigquery microbatch use cases.
- [fusion] Support lag_tolerance seconds period
- [dbt-core] state:modified no longer flags environment-aware warehouse-specific configs (e.g. copy_grants) set as Jinja in dbt_project.yml. (#15263)
- [fusion] Fix cached dbt State warning tests
- [fusion] Per-version access field on versioned models is now respected
- [fusion] ref() version pins now preserve original type (int/float/string) in manifest refs
- [dbt-core] state:modified no longer flags environment-aware grants configs set as Jinja in dbt_project.yml (e.g. grants driven by target.name). The unrendered grants config is compared instead of the target-rendered values. Affects seeds in particular. (#15302)
- [fusion] Allow tests attached to disabled models to preserve manifest metadata without failing on legacy generic test argument syntax.
- [dbt-core] Fix state:modified to no longer flag seeds whose column_types config is set as environment-aware Jinja in dbt_project.yml. (#15286)
- [dbt-core] state:modified no longer flags seeds whose quote_columns config is set as environment-aware Jinja in dbt_project.yml. (#15286)
- [dbt-core] Report CV10 quoted literal style violations with their own rule identity instead of CV11 casting style. (#15328)
- [fusion] Yaml: fix quoted string values parsed as numbers
Under the Hood
- [dbt-index] grain_declared falls back to primary_key inferred during parse when no compile data is present
- [dbt-fusion] Added snowflake config in UDF configs
- [dbt-fusion] Add a catalog-free untyped BigQuery binder (bigquery-untyped dialect) for column lineage, producing the same LP shape and column names as the typed binder
- [dbt-fusion] Match Fusion manifest serialization for exposures with Core for manifest parity
- [dbt-fusion] Reuse the Bigquery grammar and binder for BigqueryUntyped column lineage, removing the duplicate parser, lexer, and grammar."
- [dbt-fusion] Emit a Vortex Login event on dbt login with success/failure, login type, user cookie, project ID, and platform identity fields from the JWT.
- [dbt-fusion] Removed DataFusion-backed task execution
- [dbt-fusion] Fix implementation of legacy
valid_snapshot_target - [dbt-fusion] Add unit tests for Spark incremental materializations
- [dbt-fusion] Group CommonArgs flags into labeled help sections (Project, Selection, Execution, Logging, Artifacts, Event Time) and add a Sample heading to the node-selection commands so per-subcommand
--helpshows a focused summary - [dbt-fusion] Upgrade Rust toolchain to 1.96
- [dbt-fusion] Errors and logs now show phase accurate paths for analyses, funcs, seeds and sources
- [dbt-fusion] Errors and logs now report phase accurate paths for exposures, macros, hooks, and metrics
- [dbt-fusion] Add
manage_stateto invocation telemetry to track dbt State management (auto-deferral) enablement - [internal] Allows the source application used in analytics to be specified when creating an interactive
AuthChainor anOAuthInteractiveResolverdirectly. - [internal] Bump up the duckdb driver checksums
- [internal] Add anonymous IDs to dbt Wizard error telemetry.
- [dbt-fusion] Update driver
- [dbt-fusion] Improve salesforce adapter jinja
- [fusion] Add registry-backed JSON deserialization support for dbt-tracing telemetry records.
- [internal] dbt-ci:
pypi publish --download-base-url <url> --target <triple>...builds the download-at-install sdist (downloads the release wheels, hashes the live bytes, assembles the sdist) and publishes it (filetype=sdist) to PyPI - [fusion] Bump Databricks
- [fusion] Fix subtraction underflow panic in partial-parse when operations have invalid spans after JSON deserialization
- [internal] Bump the extended DuckDB driver
Contributors
- @HannanNaeem
- @aahel
- @aiguofer
- @ajhlee-dbt
- @ajnovice
- @akbog
- @arjitj2
- @aswanson
- @chasewalden
- @chayac
- @colin-rogers-dbt
- @dataders (#15279)
- @debrin-og
- @eddowh
- @j-clemons
- @jasonlin45
- @jcserv
- @kczimm
- @kendru
- @lottaquestiions (#15263)
- @lottaquestions (#15302, #15286, #15286)
- @mach-kernel
- @maxmalkin
- @mishamsk
- @ragesh-g
- @sadboy
- @serramatutu
- @sriramr98
- @tauhid621
- @tomighita
- @versusfacit
- @vgapeyev
- @wolfram
- @xuliangs