megachangelog
Announcement2.0.0-alpha.3

dbt v2.0.0-alpha.3

Alpha release introducing versioned model pointers, JavaScript UDF support, catalog federation, incremental strategy improvements, and numerous bug fixes across adapters including BigQuery, Redshift, Spark, and Databricks. Also adds JSON schema support for catalogs and package compatibility warnings.

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 with latest_version_pointer: {enabled: false} or globally with the project flag latest_version_pointer_enabled_by_default: false. Customize the pointer alias via the latest_version_pointer.alias config or by overriding the generate_latest_version_pointer_alias macro.
  • [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 catalogs to 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 +compute config on unit_test nodes, allowing a unit_test to override the global --compute flag (e.g. +compute: sidecar under global --compute remote).
  • [dbt-fusion] Support the reservation config 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 do blocks (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 table instead of an invalid drop external. Spark 4 reports managed Hive tables as EXTERNAL (TRANSLATED_TO_EXTERNAL), which broke --full-refresh over Thrift
  • [dbt-fusion] Prevent dbt system uninstall from 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 --help shows 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_state to 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 AuthChain or an OAuthInteractiveResolver directly.
  • [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

alpha-releaseudfsadapterscatalogsversioning

Source: original entry ↗