dbt Core

Databases & DataApache-2.0

Analytics engineering: transform data in your warehouse.

Latest v1.12.4 · by dbt LabsWritten in RustWebsitedbt-labs/dbt-coreRSS

Release activity

Release activity — 38 releases across 23 days since Jun 15, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Jun 15, 2026. Older weeks are hidden at this screen width.
JunJulAugSep
SundayNo releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026No releases on Sep 6, 2026
Monday1 release on Jun 15, 2026No releases on Jun 22, 20261 release on Jun 29, 20261 release on Jul 6, 2026No releases on Jul 13, 20261 release on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 20261 release on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 20262 releases on Aug 31, 2026No releases on Sep 7, 2026
TuesdayNo releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 20261 release on Jul 7, 20261 release on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 20261 release on Aug 18, 2026No releases on Aug 25, 2026No releases on Sep 1, 20263 releases on Sep 8, 2026
WednesdayNo releases on Jun 17, 2026No releases on Jun 24, 20261 release on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 20264 releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 20261 release on Sep 2, 20263 releases on Sep 9, 2026
Thursday1 release on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 20261 release on Jul 9, 20261 release on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 20261 release on Aug 13, 20261 release on Aug 20, 20261 release on Aug 27, 20261 release on Sep 3, 2026No releases on Sep 10, 2026
FridayNo releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 20268 releases on Aug 14, 20261 release on Aug 21, 2026No releases on Aug 28, 2026No releases on Sep 4, 2026
SaturdayNo releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026No releases on Aug 29, 2026No releases on Sep 5, 2026

38 releases since Jun 15, 2026, busiest day 8

Changelog

v2.0.0-dev.39-test-pypi

Pre-release
Added 1
  • ClickHouse adapter support via new adbc_clickhouse driver with connection-level settings, default database configuration, literal '?' in SQL support, and dbt version identification in HTTP User-Agent

From dbt Core

2.0.0-dev.39

Released September 09, 2026

Features
  • [ClickHouse] Connection-level settings (profile custom_settings plus v1-parity synchronous-operation defaults), default database wired to the profile schema, literal '?' in SQL, and dbt identified as dbt/<version> in the HTTP User-Agent (system.query_log.http_user_agent), via the new adbc_clickhouse driver (#14585)
Contributors
View originalPermalink
How v2.0.0-dev.39-test-pypi went

v2.0.0-dev.38-test-pypi

Pre-release
Added 1
  • ClickHouse connection-level settings including profile custom_settings, v1-parity synchronous-operation defaults, default database wired to the profile schema, literal '?' in SQL support, and dbt identification as dbt/<version> in the HTTP User-Agent via the new adbc_clickhouse driver

From dbt Core

2.0.0-dev.38

Released September 09, 2026

Features
  • [ClickHouse] Connection-level settings (profile custom_settings plus v1-parity synchronous-operation defaults), default database wired to the profile schema, literal '?' in SQL, and dbt identified as dbt/<version> in the HTTP User-Agent (system.query_log.http_user_agent), via the new adbc_clickhouse driver (#14585)
Contributors
View originalPermalink
How v2.0.0-dev.38-test-pypi went

v2.0.0-dev.37-test-pypi

Pre-release
Added 1
  • ClickHouse connection-level settings including profile custom_settings, synchronous-operation defaults, default database wired to the profile schema, literal '?' in SQL, and dbt identification as `dbt/<version>` in the HTTP User-Agent via the new adbc_clickhouse driver

From dbt Core

2.0.0-dev.37

Released September 09, 2026

Features
  • [ClickHouse] Connection-level settings (profile custom_settings plus v1-parity synchronous-operation defaults), default database wired to the profile schema, literal '?' in SQL, and dbt identified as dbt/<version> in the HTTP User-Agent (system.query_log.http_user_agent), via the new adbc_clickhouse driver (#14585)
Contributors
View originalPermalink
How v2.0.0-dev.37-test-pypi went

v2.0.0-rc.2

Pre-release
Added 4
  • ClickHouse dbt unit tests are now supported
  • ClickHouse multi-statement SQL containing backslash escapes is now split correctly by the statement splitter
  • ClickHouse table is now compatible with MVs with mv_on_schema_change defaulting to fail and repopulate_from_mvs_on_full_refresh replaying MV queries
  • ClickHouse materialized_view supports on_schema_change, in-place refresh-schedule updates with MODIFY REFRESH, multi-MV update/rename flows, refreshable: false, and projections accept the index form with up-front validation
Fixed 4
  • Respect full refresh when view_update_via_alter is enabled for Databricks views
  • Keep column metadata local to each column instead of inheriting parent resource metadata
  • Detect Databricks materialized view query changes and require full refresh when compiled SQL changes
  • Skip Databricks get_relation_config tag and column-tag metadata queries when the model does not configure tags

From dbt Core

2.0.0-rc.2

Released September 08, 2026

Features
  • [ClickHouse] dbt unit tests are supported; multi-statement SQL containing ClickHouse backslash escapes is now split correctly by the statement splitter (#14585)
  • [ClickHouse] table now compatible with MVs (mv_on_schema_change defaults to fail, repopulate_from_mvs_on_full_refresh replays the MV queries), materialized_view supports on_schema_change, in-place refresh-schedule updates (MODIFY REFRESH) with safe transition errors, multi-MV update/rename flows and refreshable: false, and projections accept the index form with up-front validation. (#14585)
Fixes
  • Respect full refresh when view_update_via_alter is enabled for Databricks views. (#14359)
  • Keep column metadata local to each column instead of inheriting parent resource metadata. (#16097)
  • Detect Databricks materialized view query changes and require full refresh when compiled SQL changes (#16123)
  • Skip Databricks get_relation_config tag and column-tag metadata queries when the model does not configure tags (#16057)
Contributors
View originalPermalink
How v2.0.0-rc.2 went
v1.12.4Latest

dbt-core v1.12.4

Added 1
  • Add otel_trace_id() and otel_span_id() Jinja functions to correlate query comments and model SQL with OpenTelemetry trace/span ids
Fixed 4
  • Re-parse the built-in generic tests (test_not_null, test_unique, test_accepted_values, test_relationships) after loading a Fusion-generated manifest, so they are not permanently evicted and left undefined at test-compile time
  • Write target/manifest.json from the corrected in-memory manifest after loading a Fusion-generated manifest, so the on-disk artifact reflects the rediscovered adapter macros actually used for compilation instead of Fusion's raw bundled macros
  • Capture and re-emit fusion parser subprocess output through dbt-core's event system instead of letting it pass through to raw stdout/stderr, re-leveling each line by its json-compat severity when available
  • Validate that a resolved package installation path stays within the configured packages-install-path

From dbt Core

dbt-core 1.12.4 - September 08, 2026
Features
  • Add otel_trace_id() and otel_span_id() Jinja functions to correlate query comments and model SQL with OpenTelemetry trace/span ids (#)
Fixes
  • Re-parse the built-in generic tests (test_not_null, test_unique, test_accepted_values, test_relationships) after loading a Fusion-generated manifest, so they are not permanently evicted and left undefined at test-compile time (#15914)
  • Write target/manifest.json from the corrected in-memory manifest after loading a Fusion-generated manifest, so the on-disk artifact reflects the rediscovered adapter macros actually used for compilation instead of Fusion's raw bundled macros (#)
  • Capture and re-emit fusion parser subprocess output through dbt-core's event system instead of letting it pass through to raw stdout/stderr, re-leveling each line by its json-compat severity when available (#15672)
  • Validate that a resolved package installation path stays within the configured packages-install-path (#N/A)
Under the Hood
  • sync JSON schemas from dbt-fusion (#N/A)
Contributors
View originalPermalink
How v1.12.4 went
v1.11.15

dbt-core v1.11.15

Fixed 1
  • Validate that a resolved package installation path stays within the configured packages-install-path

From dbt Core

dbt-core 1.11.15 - September 08, 2026
Fixes
  • Validate that a resolved package installation path stays within the configured packages-install-path (#N/A)
Contributors
View originalPermalink
How v1.11.15 went

v2.0.0-dev.35-test-pypi

Pre-release
Added 1
  • Recognize Databricks persist_constraints and schema.yml meta.constraints so Fusion can persist legacy constraints and unnamed primary-key expressions
Fixed 1
  • Match dbt-databricks table-property comparison by retaining all remote properties and detecting changes to configured properties

From dbt Core

2.0.0-dev.35

Released September 03, 2026

Features
  • Recognize Databricks persist_constraints and schema.yml meta.constraints so Fusion can persist legacy constraints and unnamed primary-key expressions. (#15773)
Fixes
  • Match dbt-databricks table-property comparison by retaining all remote properties and detecting changes to configured properties. (#16051)
Contributors
View originalPermalink
How v2.0.0-dev.35-test-pypi went

v2.0.0-rc.1

Pre-release
Added 5
  • Add Exasol adapter (Phase 1) with connection/auth, TLS and timeout profile options, metadata adapter, type conversion, reserved-keyword auto-quoting, materializations, snapshots, model contracts, constraints, grants, persist_docs, catalog generation, source-freshness, cross-database utilities, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) for standalone querying of exported index
  • Add ClickHouse configs for definer, sql_security, and inserts_only
  • Track ref()/source()/this call provenance during Jinja rendering with on_this_reference listener hook for dbt.hard_coded_reference lint rule
Changed 4
  • ClickHouse model settings and query_settings configs now render into DDL with version-gated DDL using real server version
  • ClickHouse incremental strategies now resolve and validate like the Python adapter with on_schema_change support for codec-aware ALTERs
  • Fusion accepts Databricks Python environment_key and environment_dependencies and uses them on serverless job submit
  • OSS CLI now builds as a binary named dbt instead of dbt-sa-cli
Fixed 11
  • Fix regression in log-format-file use
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names
  • Disambiguate generated generic-test SQL asset paths on name collisions so tests are no longer silently dropped from the manifest
  • Stop the v2 parser emitting a null macros key for unit tests that set overrides without macros
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias
Security 1
  • Skip symlink, hard link, and device entries when extracting package tarballs

From dbt Core

2.0.0-rc.1

Released September 02, 2026

Features
  • Add Exasol adapter (Phase 1): connection/auth with TLS and timeout profile options, metadata adapter, agate/seed type conversion (incl. HASHTYPE) and typed SQL literals, reserved-keyword auto-quoting, and the full macro bundle — materializations (table/view/incremental append·merge·delete+insert·microbatch), snapshots (timestamp/check, hard deletes), model contracts and constraints, on_schema_change, grants, persist_docs for tables and views, catalog generation, source-freshness, cross-database utils (dateadd/datediff/last_day/hash/bool_or/listagg/safe_cast/equals/split_part), distribute_by/partition_by/primary_key configs, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration. (#15701)
  • Fusion accepts Databricks Python environment_key and environment_dependencies and uses them on serverless job submit (https://github.com/databricks/dbt-databricks/issues/1636). (#15966)
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) so standalone querying of an exported index (views.sql) never silently exposes a compile-only or never-populated column at parse time.
  • [ClickHouse] New configs available: definer, sql_security, inserts_only. Available but not working yet: projections, codec. (#14585)
  • [ClickHouse] Model settings and query_settings configs now render into DDL, and version-gated DDL uses the real server version via a once-per-process probe. (#14585)
  • [ClickHouse] clickhouse_s3source() renders the s3() table function, and model contracts are enforced end-to-end (constraint rendering, per-column codec/ttl, real column types). (#14585)
  • Track ref()/source()/this call provenance during Jinja rendering (on_this_reference listener hook), powering the dbt.hard_coded_reference (DBT05) lint rule (#16080)
  • [ClickHouse] Incremental strategies now resolve and validate exactly like the Python adapter (delete+insert, insert_overwrite, microbatch), and on_schema_change (fail/append_new_columns/sync_all_columns) works on incremental models with codec-aware ALTERs. (#14585)
Fixes
  • Fix regression in log-format-file use (#15685)
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys (#15250)
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names (#15689)
  • Disambiguate generated generic-test SQL asset paths on name collisions so tests on different models/columns that flatten to the same generated name are no longer silently dropped from the manifest
  • Stop the v2 parser emitting a null macros key for unit tests that set overrides without macros, which made dbt-core fail to deserialize the fusion-produced manifest (#16009)
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias to match dbt-core's YAML config acceptance
  • Preserve declaration order when rendering Databricks table properties (#16036)
  • Databricks: emit INSERT BY NAME REPLACE WHERE only when DBR 18.0+ supports the combination, and warn when insert_overwrite cannot honor REPLACE ON on older clusters (#15999)
  • The download-at-install sdist now declares the runtime dependencies and requires-python of the wheel it installs, so uv pip install dbt-core/dbt-oss no longer produces an unimportable package
  • Apply Databricks model and column constraints only when contract.enforced is true (#16056)
  • Accept the config value shapes dbt Core tolerates but Fusion rejected - mapping-valued constraints, list-valued dist, and unquoted YAML 1.1 booleans (yes/no/on/off) in contract.enforced, contract.alias_types, docs.show, and the BigQuery partition_by booleans
  • Keep a singular test that refs a disabled model in the manifest nodes with enabled=false, and stop emitting a user-visible NodeNotFoundOrDisabled warning for it, matching dbt-core
Under the Hood
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli (build output is at target/<profile>/dbt)
  • Pre-release dbt-core sdists (2.x and up) now print an install-time notice pointing at the dbt and dbt-oss distributions
Security
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is
Contributors
View originalPermalink
How v2.0.0-rc.1 went

v2.0.0-dev.34-test-pypi

Pre-release
Added 9
  • Add Exasol adapter Phase 1 with connection and auth support, metadata adapter, type conversion, reserved-keyword auto-quoting, materializations, snapshots, model contracts, constraints, grants, persist_docs, catalog generation, source-freshness, cross-database utilities, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration
  • Fusion accepts Databricks Python environment_key and environment_dependencies for serverless job submit
  • Add parse-safe views for dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, and dbt.columns
  • ClickHouse supports new configs definer, sql_security, and inserts_only
  • ClickHouse model settings and query_settings configs now render into DDL with version-gated DDL using real server version
Changed 1
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli
Fixed 10
  • Fix regression in log-format-file use
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias
  • Preserve declaration order when rendering Databricks table properties
  • Databricks emit INSERT BY NAME REPLACE WHERE only when DBR 18.0+ supports the combination and warn when insert_overwrite cannot honor REPLACE ON on older clusters
Security 1
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is

From dbt Core

2.0.0-dev.34

Released August 31, 2026

Features
  • Add Exasol adapter (Phase 1): connection/auth with TLS and timeout profile options, metadata adapter, agate/seed type conversion (incl. HASHTYPE) and typed SQL literals, reserved-keyword auto-quoting, and the full macro bundle — materializations (table/view/incremental append·merge·delete+insert·microbatch), snapshots (timestamp/check, hard deletes), model contracts and constraints, on_schema_change, grants, persist_docs for tables and views, catalog generation, source-freshness, cross-database utils (dateadd/datediff/last_day/hash/bool_or/listagg/safe_cast/equals/split_part), distribute_by/partition_by/primary_key configs, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration. (#15701)
  • Fusion accepts Databricks Python environment_key and environment_dependencies and uses them on serverless job submit (https://github.com/databricks/dbt-databricks/issues/1636). (#15966)
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) so standalone querying of an exported index (views.sql) never silently exposes a compile-only or never-populated column at parse time.
  • [ClickHouse] New configs available: definer, sql_security, inserts_only. Available but not working yet: projections, codec. (#14585)
  • [ClickHouse] Model settings and query_settings configs now render into DDL, and version-gated DDL uses the real server version via a once-per-process probe. (#14585)
  • [ClickHouse] clickhouse_s3source() renders the s3() table function, and model contracts are enforced end-to-end (constraint rendering, per-column codec/ttl, real column types). (#14585)
  • Track ref()/source()/this call provenance during Jinja rendering (on_this_reference listener hook), powering the dbt.hard_coded_reference (DBT05) lint rule (#16080)
  • [ClickHouse] Incremental strategies now resolve and validate exactly like the Python adapter (delete+insert, insert_overwrite, microbatch), and on_schema_change (fail/append_new_columns/sync_all_columns) works on incremental models with codec-aware ALTERs. (#14585)
Fixes
  • Fix regression in log-format-file use (#15685)
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys (#15250)
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names (#15689)
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias to match dbt-core's YAML config acceptance
  • Preserve declaration order when rendering Databricks table properties (#16036)
  • Databricks: emit INSERT BY NAME REPLACE WHERE only when DBR 18.0+ supports the combination, and warn when insert_overwrite cannot honor REPLACE ON on older clusters (#15999)
  • The download-at-install sdist now declares the runtime dependencies and requires-python of the wheel it installs, so uv pip install dbt-core/dbt-oss no longer produces an unimportable package
  • Apply Databricks model and column constraints only when contract.enforced is true (#16056)
  • Accept the config value shapes dbt Core tolerates but Fusion rejected - mapping-valued constraints, list-valued dist, and unquoted YAML 1.1 booleans (yes/no/on/off) in contract.enforced, contract.alias_types, docs.show, and the BigQuery partition_by booleans
  • Keep a singular test that refs a disabled model in the manifest nodes with enabled=false, and stop emitting a user-visible NodeNotFoundOrDisabled warning for it, matching dbt-core
Under the Hood
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli (build output is at target/<profile>/dbt)
  • Pre-release dbt-core sdists (2.x and up) now print an install-time notice pointing at the dbt and dbt-oss distributions
Security
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is
Contributors
View originalPermalink
How v2.0.0-dev.34-test-pypi went

v2.0.0-dev.33-test-pypi

Pre-release
Added 9
  • Add Exasol adapter with connection/auth, metadata adapter, type conversion, reserved-keyword auto-quoting, materializations, snapshots, model contracts, constraints, grants, persist_docs, catalog generation, source-freshness, cross-database utilities, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration
  • Fusion accepts Databricks Python environment_key and environment_dependencies and uses them on serverless job submit
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) for standalone querying of exported index
  • ClickHouse: add configs for definer, sql_security, and inserts_only
  • ClickHouse: model settings and query_settings configs now render into DDL with version-gated DDL using real server version
Changed 1
  • OSS CLI now builds as binary named dbt instead of dbt-sa-cli
Fixed 10
  • Fix regression in log-format-file use
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and legacy data-paths alias
  • Preserve declaration order when rendering Databricks table properties
  • Databricks: emit INSERT BY NAME REPLACE WHERE only when DBR 18.0+ supports it and warn when insert_overwrite cannot honor REPLACE ON on older clusters
Security 1
  • Skip symlink, hard link, and device entries when extracting package tarballs

From dbt Core

2.0.0-dev.33

Released August 31, 2026

Features
  • Add Exasol adapter (Phase 1): connection/auth with TLS and timeout profile options, metadata adapter, agate/seed type conversion (incl. HASHTYPE) and typed SQL literals, reserved-keyword auto-quoting, and the full macro bundle — materializations (table/view/incremental append·merge·delete+insert·microbatch), snapshots (timestamp/check, hard deletes), model contracts and constraints, on_schema_change, grants, persist_docs for tables and views, catalog generation, source-freshness, cross-database utils (dateadd/datediff/last_day/hash/bool_or/listagg/safe_cast/equals/split_part), distribute_by/partition_by/primary_key configs, and interactive dbt init setup
  • Add Databricks query tags with automatic dbt metadata and profile- and model-level configuration. (#15701)
  • Fusion accepts Databricks Python environment_key and environment_dependencies and uses them on serverless job submit (https://github.com/databricks/dbt-databricks/issues/1636). (#15966)
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) so standalone querying of an exported index (views.sql) never silently exposes a compile-only or never-populated column at parse time.
  • [ClickHouse] New configs available: definer, sql_security, inserts_only. Available but not working yet: projections, codec. (#14585)
  • [ClickHouse] Model settings and query_settings configs now render into DDL, and version-gated DDL uses the real server version via a once-per-process probe. (#14585)
  • [ClickHouse] clickhouse_s3source() renders the s3() table function, and model contracts are enforced end-to-end (constraint rendering, per-column codec/ttl, real column types). (#14585)
  • Track ref()/source()/this call provenance during Jinja rendering (on_this_reference listener hook), powering the dbt.hard_coded_reference (DBT05) lint rule (#16080)
  • [ClickHouse] Incremental strategies now resolve and validate exactly like the Python adapter (delete+insert, insert_overwrite, microbatch), and on_schema_change (fail/append_new_columns/sync_all_columns) works on incremental models with codec-aware ALTERs. (#14585)
Fixes
  • Fix regression in log-format-file use (#15685)
  • Allow Databricks incremental models to use delete+insert with correctly quoted unique keys (#15250)
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names (#15689)
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias to match dbt-core's YAML config acceptance
  • Preserve declaration order when rendering Databricks table properties (#16036)
  • Databricks: emit INSERT BY NAME REPLACE WHERE only when DBR 18.0+ supports the combination, and warn when insert_overwrite cannot honor REPLACE ON on older clusters (#15999)
  • The download-at-install sdist now declares the runtime dependencies and requires-python of the wheel it installs, so uv pip install dbt-core/dbt-oss no longer produces an unimportable package
  • Apply Databricks model and column constraints only when contract.enforced is true (#16056)
  • Accept the config value shapes dbt Core tolerates but Fusion rejected - mapping-valued constraints, list-valued dist, and unquoted YAML 1.1 booleans (yes/no/on/off) in contract.enforced, contract.alias_types, docs.show, and the BigQuery partition_by booleans
  • Keep a singular test that refs a disabled model in the manifest nodes with enabled=false, and stop emitting a user-visible NodeNotFoundOrDisabled warning for it, matching dbt-core
Under the Hood
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli (build output is at target/<profile>/dbt)
  • Pre-release dbt-core sdists (2.x and up) now print an install-time notice pointing at the dbt and dbt-oss distributions
Security
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is
Contributors
View originalPermalink
How v2.0.0-dev.33-test-pypi went

v2.0.0-dev.30

Pre-release
Added 4
  • Add Exasol adapter with connection/auth, TLS and timeout profile options, metadata adapter, agate/seed type conversion with HASHTYPE support, typed SQL literals, reserved-keyword auto-quoting, materializations (table/view/incremental), snapshots, model contracts and constraints, on_schema_change, grants, persist_docs, catalog generation, source-freshness, cross-database utilities, distribute_by/partition_by/primary_key configs, and interactive dbt init setup
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) for standalone querying of an exported index without exposing compile-only or never-populated columns at parse time
  • Add new ClickHouse configs: definer, sql_security, inserts_only
  • Track ref()/source()/this call provenance during Jinja rendering via on_this_reference listener hook to power the dbt.hard_coded_reference (DBT05) lint rule
Changed 2
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias to match dbt-core's YAML config acceptance
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli
Fixed 2
  • Fix regression in log-format-file use
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names
Security 1
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is

From dbt Core

2.0.0-dev.30

Released August 27, 2026

Features
  • Add Exasol adapter (Phase 1): connection/auth with TLS and timeout profile options, metadata adapter, agate/seed type conversion (incl. HASHTYPE) and typed SQL literals, reserved-keyword auto-quoting, and the full macro bundle — materializations (table/view/incremental append·merge·delete+insert·microbatch), snapshots (timestamp/check, hard deletes), model contracts and constraints, on_schema_change, grants, persist_docs for tables and views, catalog generation, source-freshness, cross-database utils (dateadd/datediff/last_day/hash/bool_or/listagg/safe_cast/equals/split_part), distribute_by/partition_by/primary_key configs, and interactive dbt init setup
  • Add parse-safe views (dbt.graph_nodes, dbt.models, dbt.seeds, dbt.tests, dbt.snapshots, dbt.sources, dbt.analyses, dbt.operations, dbt.functions, dbt.columns) so standalone querying of an exported index (views.sql) never silently exposes a compile-only or never-populated column at parse time.
  • [ClickHouse] New configs available: definer, sql_security, inserts_only. Available but not working yet: projections, codec. (#14585)
  • Track ref()/source()/this call provenance during Jinja rendering (on_this_reference listener hook), powering the dbt.hard_coded_reference (DBT05) lint rule (#16080)
Fixes
  • Fix regression in log-format-file use (#15685)
  • Include invocation IDs in default Databricks query comments and preserve run-operation connection names (#15689)
  • Accept sequence-valued column_types, mapping-valued event_time, scalar policy_tags, and the legacy data-paths alias to match dbt-core's YAML config acceptance
Under the Hood
  • The oss CLI now builds as a binary named dbt instead of dbt-sa-cli (build output is at target/<profile>/dbt)
Security
  • Skip symlink, hard link, and device entries when extracting package tarballs instead of extracting them as-is
Contributors
View originalPermalink
How v2.0.0-dev.30 went
v1.12.3

dbt-core v1.12.3

Fixed 2
  • Send the x-ms-blob-type: BlockBlob header and accept 201 Created when uploading artifacts to an Azure Blob Storage signed URL so artifact ingestion no longer fails with 400 MissingRequiredHeader on Azure-hosted regions
  • Include the storage provider's error code alongside the status code in upload errors
Security 1
  • Require sqlparse>=0.5.5,<0.7.0 to fix CVE-2026-54284, CVE-2026-59893, CVE-2026-59894 and CVE-2026-71491 parser denial-of-service vulnerabilities

From dbt Core

dbt-core 1.12.3 - August 20, 2026
Fixes
  • Send the x-ms-blob-type: BlockBlob header and accept 201 Created when uploading artifacts to an Azure Blob Storage signed URL, so artifact ingestion no longer fails with 400 MissingRequiredHeader on Azure-hosted regions. Upload errors now include the storage provider's error code alongside the status code. (#N/A)
Dependencies
  • Require sqlparse>=0.5.5,<0.7.0, sqlparse 0.6.0 is the fixed release for CVE-2026-54284, CVE-2026-59893, CVE-2026-59894 and CVE-2026-71491 (parser denial-of-service). (#15988)
Contributors
View originalPermalink
How v1.12.3 went
v1.11.14

dbt-core v1.11.14

Security 1
  • Require sqlparse>=0.5.5,<0.7.0 to fix CVE-2026-54284, CVE-2026-59893, CVE-2026-59894 and CVE-2026-71491 (parser denial-of-service)

From dbt Core

dbt-core 1.11.14 - August 20, 2026
Dependencies
  • Require sqlparse>=0.5.5,<0.7.0, sqlparse 0.6.0 is the fixed release for CVE-2026-54284, CVE-2026-59893, CVE-2026-59894 and CVE-2026-71491 (parser denial-of-service). (#15988)
Contributors
View originalPermalink
How v1.11.14 went

v2.0.0-beta.2

Pre-release
Added 5
  • Add support for ClickHouse Dictionary materialization
  • Add more settings and missing internal methods for ClickHouse
  • Add support for ClickHouse's index definition
  • Support authentication: ActiveDirectoryAccessToken for dbt-fusion fabric, authenticating with a pre-minted Entra bearer token from the access_token profile field
  • Add relation-scoped catalog macro (get_catalog_relations) for ClickHouse, fixing catalog fetch failures with --write-catalog
Fixed 1
  • Fix seed data types are not Nullable for ClickHouse and incorrect primary key declaration when configured as a list

From dbt Core

2.0.0-beta.2

Released August 18, 2026

Features
  • Add support for ClickHouse Dictionary materialization (#14580)
  • Clickhouse: Add more settings and missing internal methods (#14587)
  • Add support for ClickHouse's index definition (#14583)
  • [dbt-fusion] (fabric) support authentication: ActiveDirectoryAccessToken, authenticating with a pre-minted Entra bearer token from the access_token profile field (#15926)
  • Add relation-scoped catalog macro (get_catalog_relations) for ClickHouse, fixing catalog fetch failures with --write-catalog (#14585)
  • Seed data types are not Nullable for ClickHouse. Fix incorrect primary key declaration when configured as a list' (#14585)
Contributors
View originalPermalink
How v2.0.0-beta.2 went
v1.2.7

dbt-core v1.2.7

Added 1
  • Warn users if they are using a deprecated dbt version
Fixed 4
  • Remove pin on packaging and stop using it for prerelease comparisons
  • Fix semver comparison logic by ensuring numeric values
  • Fix producing non json log when log format is json
  • Enable seeds to be handled from stored manifest data

From dbt Core

dbt-core 1.2.7 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Fixes
  • Remove pin on packaging and stop using it for prerelease comparisons (#6834)
  • Fix semver comparison logic by ensuring numeric values (#7039)
  • Fix producing non json log when log format is json (#7972)
  • Enable seeds to be handled from stored manifest data (#6875)
Contributors
View originalPermalink
How v1.2.7 went
v1.1.6

dbt-core v1.1.6

Added 1
  • Warn users if they are using a deprecated dbt version
Fixed 4
  • Remove pin on packaging and stop using it for prerelease comparisons
  • Fix semver comparison logic by ensuring numeric values
  • Fix producing non json log when log format is json
  • Enable seeds to be handled from stored manifest data

From dbt Core

dbt-core 1.1.6 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Fixes
  • Remove pin on packaging and stop using it for prerelease comparisons (#6834)
  • Fix semver comparison logic by ensuring numeric values (#7039)
  • Fix producing non json log when log format is json (#7972)
  • Enable seeds to be handled from stored manifest data (#6875)
Contributors
View originalPermalink
How v1.1.6 went
v1.3.8

dbt-core v1.3.8

Added 1
  • Warn users if they are using a deprecated dbt version
Fixed 2
  • Remove pin on packaging and stop using it for prerelease comparisons
  • Fix semver comparison logic by ensuring numeric values

From dbt Core

dbt-core 1.3.8 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Fixes
  • Remove pin on packaging and stop using it for prerelease comparisons (#6834)
  • Fix semver comparison logic by ensuring numeric values (#7039)
Contributors
View originalPermalink
How v1.3.8 went
v1.4.10

dbt-core v1.4.10

Added 1
  • Warn users if they are using a deprecated dbt version
Removed 1
  • Remove support and testing for Python 3.8, which is now EOL

From dbt Core

dbt-core 1.4.10 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Under the Hood
  • Remove support and testing for Python 3.8, which is now EOL. (#10861)
Contributors
View originalPermalink
How v1.4.10 went
v1.5.12

dbt-core v1.5.12

Added 1
  • Warn users if they are using a deprecated dbt version
Removed 1
  • Remove support and testing for Python 3.8, which is now EOL

From dbt Core

dbt-core 1.5.12 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Under the Hood
  • Remove support and testing for Python 3.8, which is now EOL. (#10861)
Contributors
View originalPermalink
How v1.5.12 went
v1.6.19

dbt-core v1.6.19

Added 1
  • Warn users if they are using a deprecated dbt version
Removed 1
  • Remove support and testing for Python 3.8

From dbt Core

dbt-core 1.6.19 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Under the Hood
  • Remove support and testing for Python 3.8, which is now EOL. (#10861)
Contributors
View originalPermalink
How v1.6.19 went
v1.7.20

dbt-core v1.7.20

Added 1
  • Warn users if they are using a deprecated dbt version

From dbt Core

dbt-core 1.7.20 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
View originalPermalink
How v1.7.20 went
v1.8.10

dbt-core v1.8.10

Added 1
  • Warn users if they are using a deprecated dbt version

From dbt Core

dbt-core 1.8.10 - August 14, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
View originalPermalink
How v1.8.10 went
v1.9.11

dbt-core v1.9.11

Added 1
  • Warn users if they are using a deprecated dbt version

From dbt Core

dbt-core 1.9.11 - August 13, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
View originalPermalink
How v1.9.11 went
v1.12.2

dbt-core v1.12.2

Added 1
  • Warn users if they are using a deprecated dbt version
Fixed 1
  • Recognize Databricks adapter config keys (query_tags, zorder, options, unique_tmp_table_suffix, skip_optimize) in jsonschema validation so they no longer raise spurious CustomKeyInConfigDeprecation warnings

From dbt Core

dbt-core 1.12.2 - August 12, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Fixes
  • Recognize Databricks adapter config keys (query_tags, zorder, options, unique_tmp_table_suffix, skip_optimize) in jsonschema validation so they no longer raise spurious CustomKeyInConfigDeprecation warnings (dbt-databricks#1540, dbt-databricks#1302) (#N/A)
Under the Hood
  • sync JSON schemas from dbt-fusion (#N/A)
Contributors
View originalPermalink
How v1.12.2 went
v1.10.23

dbt-core v1.10.23

Added 1
  • Warn users if they are using a deprecated dbt version

From dbt Core

dbt-core 1.10.23 - August 12, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
View originalPermalink
How v1.10.23 went
v1.11.13

dbt-core v1.11.13

Added 1
  • Warn users if they are using a deprecated dbt version
Fixed 3
  • Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order
  • Fix partial parsing ghost-duplicate that raised a false "found two data_tests" error by cleaning up disabled generic and singular test nodes on schema re-parse
  • Stop resolving a unit test's tested model eagerly at parse time; resolve it only in the single deterministic post-parse pass so resolution no longer depends on filesystem parse order

From dbt Core

dbt-core 1.11.13 - August 12, 2026
Features
  • Warn users if they are using a deprecated dbt version (#15964)
Fixes
  • Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order (#11139)
  • Fix partial parsing ghost-duplicate that raised a false "found two data_tests" error by cleaning up disabled generic and singular test nodes on schema re-parse (#)
  • Stop resolving a unit test's tested model eagerly at parse time; resolve it only in the single deterministic post-parse pass so resolution no longer depends on filesystem parse order at all (deeper fix for (#11139)
Dependencies
  • Bump ca-certificates, libpq-dev, and openssh-client in Docker image to current bullseye versions to fix Docker release build failure caused by superseded package versions (#NA)
Contributors
View originalPermalink
How v1.11.13 went
v1.12.1

dbt-core v1.12.1

Added 1
  • Add OpenTelemetry span instrumentation for node and hook execution, gated behind the --snowflake-projects-otel flag (off by default)
Fixed 4
  • Fix dbt build node count being inflated when unit tests are selected by adding the unit test count to num_nodes exactly once instead of on every dequeue
  • Stop resolving a unit test's tested model eagerly at parse time and resolve it only in the single deterministic post-parse pass so resolution no longer depends on filesystem parse order
  • Re-parse adapter macros from the installed adapter package after loading a Fusion-generated manifest, ensuring the user's installed dbt-adapter version is used instead of Fusion's compile-time bundled copy
  • Fix OpenTelemetry hook spans by naming them by hook and transaction phase, skipping calls that run no hooks, and adding node context and status

From dbt Core

dbt-core 1.12.1 - August 12, 2026
Features
  • Add OpenTelemetry span instrumentation for node and hook execution, gated behind the --snowflake-projects-otel flag (off by default) (#11367)
Fixes
  • Fix dbt build node count ("X of Y") being inflated when unit tests are selected, by adding the unit test count to num_nodes exactly once instead of on every dequeue while run_count is still 0 (#11185)
  • Stop resolving a unit test's tested model eagerly at parse time; resolve it only in the single deterministic post-parse pass so resolution no longer depends on filesystem parse order at all (deeper fix for (#11139)
  • Re-parse adapter macros from the installed adapter package after loading a Fusion-generated manifest, ensuring the user's installed dbt- version is used instead of Fusion's compile-time bundled copy (#15527)
  • Fix OpenTelemetry hook spans: name them by hook and transaction phase, skip calls that run no hooks, and add node context and status. (#11367)
Dependencies
  • Bump dbt-core-experimental-parser to 2.0.0b1 lowerbound (#)
Contributors
View originalPermalink
How v1.12.1 went

v2.0.0-beta.1

Pre-release
Added 19
  • Provide option of using default profile.yml during init
  • Allow continue running children on parent error
  • Implement selector selector method
  • Support overloaded UDFs via overrides block in function YAML
  • Implement dbt state explain in Fusion
  • Test optimization to skip provably redundant tests
Fixed 2
  • Fix stale sourced_remote schema cache for DuckDB adapter causing unit test fixture column mismatches after model schema changes
  • Fixed file-system reserved characters in FQNs from being included in paths by replacing them with double underscores

From dbt Core

2.0.0-beta.1

Released August 10, 2026

Features
  • Provide option of using default profile.yml during init
  • Allow continue running children on parent error
  • Implement selector selector method
  • Support overloaded UDFs via overrides block in function YAML
  • Implement dbt state explain in Fusion
  • Test optimization to skip provably redundant tests
  • Add cargo xtask apply-ci-goldies to fetch CI logs via gh and apply golden-file patches onto the current worktree.
  • Support Databricks Azure service principal (Microsoft Entra ID) authentication via azure_client_id/azure_client_secret (auth_type azure-client-secret), matching dbt-core/dbt-databricks
  • Add Docker and docker compose support for self-hosting the dbt docs server (dbt docs serve)
  • Clickhouse: Add missing configurations for ClickHouse table materialization (#14585)
  • Add --infer-schemas, --skip-type-checking, and --show-sources flags for catalog-free binding to bind SQL without introspection.
  • Support pseudocolumns (e.g. BigQuery's _FILE_NAME) in unit tests
  • Add machine-readable JSON output for dbt --format json --version
  • Add the dbt.import_ctes (DBT01) lint rule, requiring every ref()/source() to be imported through a top-level CTE
  • Add opt-in Redshift grants support for groups and roles
  • Support dbt node selection (--select/--exclude/--selector) for lint and format in both symbolic and rendered render modes
  • Add unit tests to the Jinja graph object
  • Add error_code and error_message fields to the dbt login Vortex telemetry event
  • dbt State: speculatively submit models, snapshots, and data tests while the dependency last-modified prefetch is still in flight, so nodes no longer block on the full prefetch before a cache decision
  • Report the dbt invocation ID (and dbt platform run ID when present) with dbt State telemetry so runs can be correlated end to end
  • Skip provably redundant accepted-values data tests
  • Add undocumented dbt internal get-distribution-info command for resolving dbt release-channel and distribution info, falling back to <dbt> --version to infer generation and distribution when a target dbt doesn't support the command itself. --all now discovers every dbt on PATH concurrently and skips the doomed internal probe for non-native (script) installs, cutting multi-install discovery time substantially. Each probe is now bounded by a wait/graceful-terminate/forceful-kill timeout so a hung or badly-behaved dbt on PATH can't stall or block discovery indefinitely. When a Homebrew-tap conflict identifies an already-installed dbt Cloud CLI, get-distribution-info now also reports its uninstall command
  • When a Snowflake metadata warehouse is configured, dbt State now fetches table last-modified freshness metadata with one query per schema in parallel (bounded by the configured thread count), instead of running the per-schema dumps sequentially
  • Support dbt State configs on snapshots and data tests
  • [BigQuery] Link to docs for Storage API errors (#15544, #13600)
Fixes
  • Fix stale sourced_remote schema cache for DuckDB adapter causing unit test fixture column mismatches after model schema changes
  • Fixed file-system reserved characters in FQNs from being included in paths by replacing them with double underscores.
  • Always show a fallback line in the Test Failures summary for failed tests, even when no diff table or stored failures relation is available
  • fix: explicitly set default empty variable for $SHELL so that the script will not end while setting the $SHELL.
  • Treat unresolvable Snowflake views as stale for dbt State reuse decisions.
  • Fix typo in the try_or_compiler_error type-check warning message ("a optional argument argument" -> "an optional argument") (#15323)
  • Allow state-org-id in the dbt-cloud block of dbt_project.yml.
  • model.batch.event_time_start and model.batch.event_time_end are now datetime objects in Jinja context, enabling .strftime() and other datetime methods to work as in dbt Core
  • Fix state modified selection for hook and test alias diffs
  • Preserve lowercase Snowflake SHOW and DESCRIBE result column names so dbt_constraints can access run_query columns and rows.
  • on-run-end hooks can now call datetime methods such as .replace(tzinfo=...) and .strftime(...) on result.timing[*].started_at and .completed_at fields.
  • Fix the @ graph operator (and the equivalent childrens_parents YAML selector) returning an empty set when applied to a leaf node. It now correctly returns the node together with its ancestors. (#15280)
  • Fix source freshness failing entirely when a single source errors in the MapReduce aggregation phase. (#15385)
  • Make dbt State disable itself and continue when accounts are disabled or locked, while keeping user-actionable auth errors fatal.
  • dbt init no longer leaves a stale authenticator field when switching from SSO/MFA to Password or Key pair authentication for Snowflake profiles (#15378)
  • Normalize BigQuery model context column data types when contract alias_types is enabled (e.g. FLOAT -> FLOAT64), matching dbt Core. (#14097)
  • Versioned models: per-version docs (show/node_color) now override top-level model docs, matching dbt-core behavior
  • Force dbt State cache misses for BigQuery external table sources whose metadata timestamps do not reflect backing data changes.
  • [Redshift] Honor the is_serverless profile flag (plus serverless_work_group and serverless_acct_id) so Serverless workgroups reached via a non-serverless host (e.g. an SSM port-forward) are treated as Serverless and no longer require cluster_id, matching dbt Core.
  • Generic tests with auto-truncated names now correctly set config.alias and unrendered_config.alias in the manifest, matching dbt-core behavior
  • Populate warning/error code and name in legacy Core-compat JSON log output
  • Support non-ASCII Jinja macro names in Fusion parsing.
  • Match dbt-core by ignoring the legacy tests alias on versioned model versions.
  • Accept Core manifest value shapes. (#15169, #14570)
  • BigQuery: emit the expiration_timestamp relation option (and render options in dbt-core's insertion order) when hours_to_expiration is present but renders to a non-numeric value such as null, matching dbt Core instead of dropping the option
  • Fix config precedence bug where +schema: null or +database: null in dbt_project.yml incorrectly overrode schema/database values set in schema.yml properties files
  • (dbt-auth): Bigquery: Better error handling and messages to guide uses using api_endpoint with emulators and other strict hosts (#14615)
  • Do not use unit test configs for state:modified determination
  • Fix macro manifest parity for materialization supported languages.
  • [BigQuery] Drop Storage API permission requirement when listing schemas (#14631)
  • (state:modified) Restore rendered comparison of freshness in source nodes
  • (adapters/redshift) sync v1 Jinja macros using https://github.com/dbt-labs/dbt-adapters/commit/9fce78f44db248ba33832c0f65c884a5139c0169
  • Include file paths on missing doc macro warnings and suppress empty-path duplicates.
  • Retire the last unrendered-enhanced key comparisons in state:modified (in function nodes)
  • (adapters/redshift) relation cache tracks relations' dependencies; bring the view materialization in sync with v1 (#15467)
  • Match dbt-core unique filter behavior for modules.datetime.date values.
  • Fixed a TOCTOU race in dbt-loader that could panic when a dbt project was loaded concurrently from multiple threads, by initializing DISPATCH_CONFIG with get_or_init instead of a check-then-set
  • Fix dbt State schema-level freshness dump returning empty for Snowflake schemas with lowercase names in dbt_project.yml, causing an unnecessary fallback to per-relation freshness queries.
  • Preserved successful Snowflake freshness metadata when another database batch is inaccessible
  • Support Redshift statement cancellation. Now pressing Ctrl-C during a dbt run will abort the statements server-side and early exit. (#15494)
  • Added DBT_RESOURCE_TYPES / DBT_EXCLUDE_RESOURCE_TYPES env variables to dbt build --help
  • (state:modified) Stop treating function tags/group changes as config modifications on the sparse-fallback comparison path
  • dbt-sa-cli force defer introspective nodes on compile (#15569)
  • Count failed unit tests correctly in interactive progress output
  • Fix the @ graph operator (and the equivalent childrens_parents YAML selector) returning an empty set when applied to a leaf node. It now correctly returns the node together with its ancestors. (#15280)
  • dbt retry now runs exactly the nodes recorded as retryable in run_results.json, matching dbt-core, instead of re-expanding that selection with eager indirect selection. It no longer pulls in tests the original command never ran: data tests attached to a retried model when retrying dbt run, already-passed unit tests, or tests excluded by the original --indirect-selection / --exclude (which could also turn a passing retry into a failure when the excluded test had a second, unbuilt parent).
  • [BigQuery] Allow get_relation to find tables in hidden datasets (#14635)
  • Fix range() returning incorrect values when using negative steps. (#15585)
  • LSP: Fixed LSP panic when a 'dbt clean' was invoked
  • Skip post-success warehouse metadata refreshes for dbt State executions without confirmation tokens when a heuristic timestamp is available.
  • Treat Snowflake TEMPORARY relations as tables in list_relations to prevent a panic when SHOW OBJECTS returns a session-scoped temp table
  • Fix BigQuery unit test CTE aliases for quoted project identifiers.
  • Correct the naming of install_prerelease field in packages.yml
  • Clear stale dbt State final metadata after successful no-confirmation executions so downstream misses use the planned prefetch path, including BigQuery schema prefetch.
  • Fix state:modified false positives for semantic models and metrics: restore the SemanticEntity/semantic-model-config manifest round-trip, load previous-state metrics for comparison, and align metric content comparison with dbt-core.
  • Align inherited +tags order with dbt-core (parent then child, no alphabetical sort) (#15590)
  • Skip static analysis for models with a custom materialization.
  • Windows install script no longer overwrites an existing PowerShell $PROFILE with an empty file when setting the dbt alias
  • Database (and other execution-time) errors during test execution now always surface as a run error, independent of the test's severity config; severity only governs successfully-returned test results, matching dbt Core (#15514)
  • Emit unsupported engine environment variable and source status warnings through structured tracing
  • reject incremental models with contract enforcement and invalid on_schema_change (##14572)
  • Fixed cancelled models sometimes being reported as Passed or Succeeded
  • Match dbt Core's fromjson fallback behavior by returning the default value, or None, when JSON parsing fails
  • Render {{ this }} as the physical relation instead of a self-referential CTE for ephemeral models, matching dbt-core (#13961)
  • Snowflake Horizon (built-in) iceberg tables no longer fail to compile when a resolved transient config is present., whether inherited from a project-wide default or set explicitly on the model.
  • INT64 partitioned tables now use the proper partition bucket names. (#15464)
  • BigQuery driver used to crash whenever the resulting dataset contained INT64 pseudocolumns. (#15464)
  • Prefer DBT_ENGINE_* environment variables over their legacy DBT_* aliases when both are set
  • Always emit the full set of per-node keys in run_results.json (including failures as null for skipped nodes), matching dbt Core and fixing downstream consumers such as the dbt-artifacts package
  • Fixed empty flag issue where no real data is being written
  • Fixing dbt clone message for ephemeral models, should be skipping instead of giving No relation found output
  • Keep dbt State initialization available when schema metadata prefetch fails by caching unknown freshness for the affected schema group.
  • Honor a null config in the dbt_project.yml models hierarchy so it clears a value inherited from a higher level (starting with hours_to_expiration), and ensure a more-specific level's value always overrides a cleared parent, matching dbt Core precedence
  • Naive Python datetime values now render %z and %Z as empty strings in strftime(), matching Python behavior.
  • Fixed agate tuple rendering in Jinja output to avoid an extra trailing comma before the closing parenthesis.
  • Support ConstraintNotEnforced and ConstraintNotSupported in warn_error_options, and emit these warnings when an adapter does not enforce or support a model/column constraint
  • Honor the project segment when resolving 3-part ADO private packages (org/project/repo) so the correct provider configuration is selected when multiple projects share an org (#12989)
  • Normalize deprecation_date to a timezone-aware timestamp in manifest.json so dbt Core consumers can parse it without a TypeError
  • Preserve cached dbt State data test warning outcomes when replaying reused test results.
  • [BigQuery] Detect cluster_by order changes only when fields change (#9923)
  • Show with ephemermal ref missing rendered ephemeral node (#15260)
  • Fold the microbatch event-time window into the run-cache key so re-running a microbatch model over an unchanged window is a whole-model no-op while a different window executes
  • Fix source table-level config incorrectly overriding root project overlay for dependency package sources
  • Support model.update() in dbt Jinja model contexts.
  • Fix cross-package macro attribute-access calls missing from depends_on.macros
  • Fix macro nodes always having empty depends_on.macros in manifest
  • Support --resource-type and --exclude-resource-type filters for dbt test.
  • Preserve microbatch event-time filtering when ref and source are overridden through the builtins namespace
  • Preserve default schema on dbt State enriched SQL requests, including data tests without target tables.
  • Bring dbt-state's semantic-extras key list up to parity with the Python query-cache client, wiring the newly-added model/snapshot/test config keys (contract, constraints, cluster_by, unique_key, grants, event_time, sql_header, lookback, partition_by, table_format, and dialect-specific attributes) into the actual cache-key extraction so config changes to these fields trigger re-execution instead of a stale NO-OP
  • Submit standard incremental models that use a custom incremental_strategy macro to dbt State as DBT_CUSTOM instead of warning and forfeiting caching
  • Render a source's loaded_at_query through Jinja during dbt State prefetch so macros (and {{ this }}) resolve before the freshness query reaches the warehouse (#15499)
  • Fix SQL mismatch false positives for dbt_date and dbt_utils macros (e.g. date_spine) in Time Machine replay by treating read-only execute calls (SELECT/SHOW) as unordered across segment boundaries, and removing hardcoded AdapterType::Snowflake from replay argument matching
  • Fix BigQuery snapshot ALTER TABLE ... ADD COLUMN to include the database qualifier
  • dbt State: Start sending clone_chain_depth_limit to the server to help make correct clone decisions
  • Fix unit test overrides.macros.run_started_at raising unknown method strftime errors
  • Fix dbt State clearing a table's cached last-modified epoch after its own submit decision (even when reused/skipped), which caused a spurious per-node freshness fallback query and StateServiceWarn (dbt1410) warning for any downstream model that ref()s it directly, on every build.
  • Evict a node's cached last-modified epoch and existence after it executes without a confirmed dbt State request because the request failed, so downstream nodes in the same invocation are not incorrectly skipped based on stale freshness
  • Unit test fixtures with invalid columns now error instead of warning and passing
  • Fix spurious UnusedResourceConfigPath warning for models disabled via dbt_project.yml on incremental/partial-parse runs, caused by disabled nodes not being seeded from the parse cache before the unused-config check ran. (#15348)
  • Omit BASE_LOCATION on Snowflake iceberg and dynamic iceberg tables when the resolved external_volume is unset or explicitly set to the reserved 'SNOWFLAKE_MANAGED' value, so managed-storage Iceberg tables no longer fail with a BASE_LOCATION compilation error
  • Calls to Snowflake stored procedures that return TABLE no longer panic with a driver fatal error (#15661)
  • Jinja-render semantic layer YAML (metrics, saved queries) like other schema.yml properties, excluding only metric filter and saved_queries.query_params.where, which stay verbatim for MetricFlow (#14468)
  • Fix dbt State on production deployments: exclude exposures from the freshness prefetch, which generated invalid metadata SQL from their empty database and schema; honor an explicit opt-out over DBT_ENGINE_MANAGE_STATE so --no-manage-state and flags.manage_state: false take effect; and resolve dbt State on dbt compile and dbt show, which previously ignored the flag (#15374)
  • Skip static analysis for custom materializations that shadow a built-in name (e.g. table, incremental), matching the existing behavior for novel-named custom materializations. Fixes malformed SQL when such a materialization guards graph.nodes introspection behind {% if execute %}.
  • Databricks: detect a changed view definition so that view_update_via_alter runs ALTER VIEW ... AS before COMMENT ON COLUMN when a new column is added (#15583)
  • (fix adapters/databricks) don't treat empty tokens as PATs
  • Exclude the Fusion-only static_analysis config from state:modified comparisons for sources, snapshots, functions, and analyses, matching dbt-core (which has no such field)
  • Restore write-barrier consumption by method name only in Time Machine semantic replay; SQL content validation happens downstream via the existing sanitizer-aware check, avoiding false-positive "no recorded event" failures for writes with legitimate dynamic content (e.g. audit-log timestamps)
  • Avoid panicking on out-of-range timestamps (e.g. far-future TIMESTAMP_NTZ sentinel values) when converting Arrow timestamp arrays to Jinja values; treat them as null, consistent with other date/time converters
  • [BigQuery] Allow list_relations to list relations under hidden datasets
  • Use dispatch-based custom-materialization detection in the run cache (model execution type and parse-failure dependency extraction), so models whose built-in materialization is shadowed by a user-defined macro are consistently treated as custom.
  • Support Snowflake TIME columns in unit test fixtures.
  • Fail fast instead of hanging for 300s when dbt State needs to authenticate but no interactive terminal is available (CI, batch replay); this now surfaces as a graceful skip like other dbt State unavailability cases instead of a hard AuthFailed error
  • Stop generate_*_name macros from swallowing raise_compiler_error calls (#15611)
  • dbt retry now treats a warn node as retryable only when the retry invocation passes --warn-error, matching dbt-core. Previously retry always re-ran warned nodes, so a severity: warn test that kept warning was re-run on every retry and --warn-error had no effect. The 'Retrying N nodes' banner also no longer describes retried nodes as failed.
  • state:modified no longer reports a phantom meta change when a config key was relocated into +meta between the previous-state manifest and the current project (e.g. by dbt-autofix, when a config key has no field on Fusion's typed config struct)
  • Jinja in macro YAML properties is now evaluated once per parse instead of twice, so a description or meta value that calls something with a side effect (e.g. log()) no longer runs it twice.
  • Jinja in a macro's description is now evaluated in dbt Core's restricted documentation context, so calling a project macro from a description is an error instead of being executed and inlined into the description
  • A failed on-run-end hook no longer records successfully-materialized models as error in run_results.json. Models that materialized keep their success status, and each on-run-end hook is now recorded as its own operation.. node (matching dbt-core). As a result dbt retry finds nothing to retry after an on-run-end failure instead of rebuilding the entire project.
  • Recognize constraints as a valid model config() key (previously rejected as an unrecognized key), matching dbt-core's behavior of accepting it without enforcing it — only the schema.yml constraints: model property is enforced. Cache-invalidation systems like dbt State/Run Cache now correctly react to constraint changes authored either way.
  • Fix dbt State run-cache extraction treating a custom materialization's compiled SQL as having zero upstream dependencies when it is a bare qualified relation reference (e.g. some BigQuery custom materializations), causing the node to be skipped forever instead of being invalidated by real upstream changes
  • Avoid an unnecessary speculative dbt State request when the dependency last-modified prefetch completes during view-definition traversal; readiness is re-checked at the last responsible moment so the node submits non-speculatively with resolved epochs instead.
  • Report a mismatch between the dbt-cloud project-id in dbt_project.yml and ~/.dbt/dbt_cloud.yml up front, naming the project-id and pointing at the offending line, instead of failing later with a generic missing-configuration error (#14454)
  • Match read-only compile-time probes such as dbt_utils.date_spine out of order during Mantle replay, and widen the Databricks probe handling
  • A docs block whose name is not a valid identifier no longer discards every other docs block in the same file
  • The as_bool filter now passes its value through unchanged when rendering text (SQL, macros), matching dbt-core: "true" | as_bool renders true instead of True, and an expression such as target.name in ['dev'] | as_bool — which Jinja parses as a containment check against the filtered list — no longer fails with "cannot perform a containment check on this value"
  • Name the undefined argument when a config() value is undefined
  • Fix timedelta.total_seconds() truncating to whole seconds, so sub-second durations no longer return 0.0. Also makes non-zero sub-second timedeltas truthy and normalizes days/seconds/microseconds and str() for negative durations, matching Python. (#15756)
  • Defer semantic model relations to production when only the semantic model's YAML changed but its underlying model was not rebuilt
  • Snowflake freshness prefetch (and other bulk metadata queries) now switches to a dedicated metadata warehouse once per connection instead of once per query, cutting warehouse-switch overhead for large batches
  • Speed up package-qualified macro name resolution (elementary.foo, dbt_utils.bar). Membership in a package's macro list was a linear scan on every access, so the cost grew with the number of macros in the package; it is now a hash lookup. On a project using elementary (~1000 macros), this takes an on-run-end hook that iterates the graph from ~1.6x slower than dbt Core to parity. (#14455)
  • Fault-isolate per-macro typecheck calls so a single macro body that panics inside the type-inference VM no longer crashes the whole parse/run
  • Preserve unit test CTE closures after trailing SQL line comments.
  • Report a clean, located error for a zero-argument ref() or source() instead of panicking during compilation. Because the panic happened at compile time, one malformed call previously took down parsing for every other model and macro in the project.
Under the Hood
  • Add support for dbt-databricks adapter function recordings
  • Record complete lifecycle telemetry for every local tool-call attempt.
  • Parse the DBT_ENGINE_USE_V2_PARSER environment variable as a recognized no-op
  • Refactor CompileBaseCtx to remove the DummyConfig config slot; introduce OperationCtx and typed builders build_compile_base_ctx / build_operation_context
  • state:modified config-comparison conformance - refactoring retrospective and agent instructions
  • add typed flatten composition seam to node ctxs
  • Complete the move from local LiteLLM to native provider routing with privacy-safe telemetry.
  • Centralize BigQuery unit-test cast check in reusable TypeOps method
  • add typed build_run_node_ctx seam and migrate dbt-freshness onto it
  • Parse the --use-v2-parser / --no-use-v2-parser CLI flags as a recognized no-op
  • Migrate Redshift dbt-auth to the standard IR/pipeline configuration architecture used by other adapters
  • Replace per-struct helper functions in config DefaultTo impls with a DefaultTo trait and ReplaceIfNone marker, eliminating default_hooks, default_quoting, default_docs, default_meta_and_tags, default_classifiers, default_packages, default_column_types, and default_to_grants helpers
  • AdapterResponse is now backed by a ValueMap. This paves the way to adding arbitrary keys to AdapterResponse.
  • (snowflake, redshift) respect quoting configs literally when building the metadata queries
  • dbt State: port DbtNodeState submission from Python to Rust
  • Introduce DefaultTo trait and derive macro for config inheritance
  • Standardize listify-newtype serialization by generating Serialize/Deserialize impls via macro instead of per-field serde attributes
  • Add a run-cache unit test pinning that a model materialized as a built-in name (e.g. table) whose materialization macro is shadowed by a user-defined macro is classified as a custom (DBT_CUSTOM) execution type.
  • dbt State: port persist_docs semantic extra
Security
  • Warn when a package tarball contains symlink, hard link, or device entries; these will stop being extracted in a future release. Also upgrade astral-tokio-tar from 0.5.6 to 0.6.4 (RUSTSEC-2026-0066, RUSTSEC-2026-0112, RUSTSEC-2026-0113, RUSTSEC-2026-0145)
Contributors
View originalPermalink
How v2.0.0-beta.1 went

v2.0.0-alpha.5

Pre-release
Added 9
  • Migrate Redshift catalog macros to SHOW TABLES and SVV_REDSHIFT_COLUMNS when datasharing is enabled for cross-database relation catalog generation
  • Add defer_job_id support via DBT_CLOUD_DEFER_JOB_ID environment variable to append job_id to manifest download URL for job-specific deferral
  • Add catalog_database support to v2 catalogs.yml with highest priority in generate_database_name for Snowflake, BigQuery biglake_metastore, and Databricks unity
  • Fire telemetry event on static analysis propagation completion
  • Add POST /api/v1/analytics/events relay endpoint
  • Add distribution field and server-authoritative fields to docs analytics events
Fixed 10
  • Populate defer_relation on graph.nodes entries so node.defer_relation works in Jinja
  • Correct defer_relation wire shape on graph.nodes to match dbt-core's DeferRelation dataclass
  • Prevent panic when calling insert() on a mutable list with an out-of-bounds index and return a proper template error instead
  • Parse-time config.get() now matches dbt-core behavior by returning empty string for every key except meta
  • Resolve event_time from seed and snapshot inputs for microbatch models
  • Fix dbt State view reuse during full-refresh runs

From dbt Core

2.0.0-alpha.5

Released July 20, 2026

Features
  • Migrate Redshift catalog macros to SHOW TABLES and SVV_REDSHIFT_COLUMNS when datasharing is enabled, so catalog generation works for cross-database relation
  • Adds defer_job_id support via DBT_CLOUD_DEFER_JOB_ID env var. When set alongside defer_env_id, appends ?job_id= to the manifest download URL for job-specific deferral.
  • Add catalog_database support to v2 catalogs.yml: when set, catalog_database takes highest priority in generate_database_name over model database config and target.database. Uses the existing build_catalog_relation pattern — no new adapter method. Supported for Snowflake (all types), BigQuery (biglake_metastore), and Databricks (unity, optional, falls back to catalog_name).
  • Fire telemetry event on static analysis propagation completion
  • Add POST /api/v1/analytics/events relay endpoint (docs v2 → Vortex)
  • docs analytics: add distribution field and hydrate server-authoritative fields (distribution, dbt_version, is_logged_in, dbt Cloud IDs) on POST /api/v1/analytics/events
Fixes
  • Populate defer_relation on graph.nodes entries (models, snapshots, seeds) so node.defer_relation works in Jinja, matching dbt-core
  • Correct defer_relation wire shape on graph.nodes to match dbt-core's DeferRelation dataclass (drop unique_id, add description/compiled_code/meta/tags/config)
  • Prevent panic when calling insert() on a mutable list with an out-of-bounds index; return a proper template error instead. This was the primary panic causing cascading lock poisoned panics in minijinja's MutableVec.
  • Parse-time config.get(name) now matches dbt-core's ParseConfigObject.get (core/dbt/context/providers.py:554) by returning "" for every key except meta. The meta key keeps a permissive chainable stub (ParseConfigValue) so dbt-autofix's recommended config.get('meta').custom_key migration pattern (see dbt-autofix/manual_fixes/custom_configuration.md) keeps working during Fusion's static-analysis compile of materialization bodies. Separately, adapter.get_relation now coerces None/Undefined args to "" at the strict &str unwrap so the compile-phase CompileConfig.get('database')None path (mirroring Python's RuntimeConfigObject.get) flows through without crashing the prefetch-recording call. Together this unblocks the Anisi customer project (account 303 / project 3580) whose snowflake_external_table materialization in dbt_external_tables calls adapter.get_relation(database=config.get('database'), ...). Broader audit of where the same None-tolerance coercion belongs across other adapter methods is a follow-up dbt-core ↔ dbt-fusion parity investigation.
  • Add +resource_tags config support for seeds and snapshots in dbt_project.yml
  • stop using schema cache (prefetch at parse time) for adapter.get_columns_in_relation if it's using in a selected node without using strict static analysis.
  • Resolve event_time from seed and snapshot inputs for microbatch models (matches core v1)
  • dbt State view reuse during full-refresh runs
  • Generic test nodes with long names no longer have empty depends_on.macros in the manifest
  • Spark: fix schema existence and listing on the Hive metastore. check_schema_exists now resolves via show databases instead of the nonexistent information_schema.schemata (fixing snapshots and other guard-then-create paths), and list_schemas reads the show databases result column name-agnostically (namespace on OSS Spark, databaseName on Databricks). Databricks behavior is unchanged.
  • Implement symbolic linter
  • Replace panic with a user-facing error when an exposure depends_on entry does not resolve to a ref(), source(), or metric() call
  • Improve the Snowflake dbt State metadata error when database or schema is empty.
  • model.original_file_path now resolves to the correct path in Jinja macro context during parse phase instead of returning '.'.
  • persist_docs: warn about and skip columns documented in YAML that are not present in the database, instead of failing the model build or silently mis-applying column comments (ports dbt-labs/dbt-adapters#1690)
  • Stop /api/v1/health from leaking the absolute index_dir path; replace with project_loaded + generation (snapshot timestamp) and an X-Docs-Generation header
  • Reduce dbt State auth token request timeout to 15 seconds and retry transient auth service failures.
  • Add graceful shutdown/drain to dbt docs server so rollout restarts don't reset in-flight readers
  • Implement normalize() on pytz timezone objects so unit-test fixtures using modules.pytz.timezone(...).normalize(...) parse instead of failing with an opaque dbt1013 deserialization error
  • Treat an empty or zero-byte selectors.yml as no selector definitions, matching dbt Core behavior instead of raising SelectorError dbt1600
  • Analysis nodes now have compiled, compiled_code, and compiled_path populated in the manifest after dbt compile
  • state:modified no longer flags models whose persist_docs config is set as environment-aware Jinja.
  • Include YAML-supplied generic test config in manifest raw_code.
  • Restore the Snowflake warehouse using its canonical upper-cased name (matching dbt Core's current_warehouse()-based restore), so per-model snowflake_warehouse overrides no longer cause record/replay SQL mismatches
  • Snapshots no longer appear in their own depends_on.macros; fixed by skipping self-referential macro dep recording in the DAG listener
  • LSP fix deferral for show (preview CTE) and compile file (#14542)
  • Match Python re.sub behavior for empty regex matches in dbt Jinja modules.re.
  • Bump Snowflake Driver to 0.21.14 to fix Timestamp Freshness
  • BigQuery: treat 403 access-control failures (missing bigquery.datasets.create IAM permission or VPC Service Controls policy violations) as ignorable permission errors during schema creation, matching dbt-core; runs against centrally-provisioned datasets in governed/VPC-SC environments no longer fail on the eager CREATE SCHEMA step
  • BigQuery unit tests: fixture values that are SQL expressions for STRUCT or GEOGRAPHY columns (e.g. STRUCT(...), ST_GEOGPOINT(...)) are now injected verbatim instead of being single-quoted as string literals, so BigQuery can CAST them to the target type; matches dbt-core
  • Bump pyo3 workspace dependency from 0.27 to 0.29 to support Python 3.15 in CI runner images
  • Fix a client-cancellation panic in the Snowflake ADBC driver on long-running queries.
  • Resolve project flags case-insensitively in the Jinja flags context so a flag set in dbt_project.yml is reachable whether a macro reads it lower-case or upper-case, matching dbt Core
  • Fix show --inline broken when root package is disabled
  • Redshift POSIX regex-negation operators !~ and !~* no longer raise a false-positive dbt0101 SyntaxInvalid diagnostic (#15249)
  • Report cached dbt State data tests attached to unchanged views as no-change reuse.
  • Stop raising a false dbt1159 "Test cannot have the same key '' at the top-level and in config" when a data test has a top-level config key (e.g. where) and a config: block that does not set that key
  • state:modified no longer flags data tests whose schema.yml config uses environment-aware Jinja (where/severity/tags/meta), and now correctly detects genuine changes to a test's where/limit/severity: data tests join the wholesale unrendered_config comparison (dbt-core#15286).
  • Remove synthetic materialization macro call coordinates from runtime error locations.
  • Filter synthetic snapshot macro uids (snapshot..snapshot_) from depends_on.macros in snapshot nodes; these Fusion-internal uids never appear in manifest.macros and caused a dangling reference.
  • Fix unit tests on Redshift failing with an internal error (SQLSTATE XX000) when the tested model uses QUALIFY
  • state:modified no longer flags seeds or snapshots whose config uses environment-aware Jinja (e.g. persist_docs, quote_columns, grants, meta), and now correctly detects genuine changes to a snapshot's meta while no longer over-selecting snapshot group-only changes: seeds and snapshots join the wholesale unrendered_config comparison (dbt-core#15286).
  • Allow default generic tests to aggregate and render task-time aggregation SQL
  • Prevent dbt State metadata MapReduce from stalling behind a speculative connection attempt after worker results are ready.
  • Normalized back-slashes to forward-slashes for path, original_file_path and patch_path
  • state:modified — retire the per-key unrendered config grafts for models and sources
  • Support meta_get on Jinja map values that represent dbt node configs.
  • Support context-backed Jinja map caches that use get and update.
  • state:modified for data tests now follow dbt-core TestConfig key allowlist
  • Report an accurate, path-normalized error when a local: package cannot be resolved: distinguish a missing package directory ("Package directory not found") from a directory that lacks a dbt_project.yml, resolve .. segments in the reported path, and add dbt Core-style guidance
  • Tolerate a partially-migrated package-lock.yml that mixes the name/no-name entry forms: the deprecated lock parser now accepts (and ignores) a name key instead of failing the build with UnusedConfigKey (dbt1060) errors, matching dbt Core
  • Expose model.path relative to the resource root (e.g. staging/orders.sql) in both the config() block and the model body, matching dbt-core; previously it was empty inside config() and carried the models/ prefix in the body
  • Fix microbatch lookback off-by-one so a lookback of N produces N+1 batches (current batch plus N previous), matching dbt-core and the microbatch docs (#15477)
  • dbt retry now preserves --full-refresh from the original run, so incremental models retried after a failed full-refresh build use full-refresh (drop + recreate) semantics instead of incremental merge semantics
  • Hide the internal --write-metadata flag in favor of --write-index, fix 'dbt parse --write-index' to generate the index instead of failing with a save_artifact_meta IO error, and make the dbt-index warnings reference --write-index and respect warn_error_options
  • Reduce BigQuery dbt State freshness fanout by using schema-level metadata refreshes for non-override submit-time misses.
  • Quote grantees when revoking grants, so revoking a grant whose name contains special characters no longer fails with a syntax error.
  • Jinja parser now accepts keyword-argument names spelled like literal keywords (none, true, false), e.g. namespace(gold=0, unknown=0, none=0), matching dbt Core. Previously these raised MacroSyntaxInvalid (dbt1502): non-keyword arg after keyword arg.
  • Support non-ASCII Jinja macro names in Fusion parsing.
  • Ensure data tests submit zero freshness tolerance to dbt State.
  • Translate legacy BigQuery seed +column_types aliases (e.g. float, integer, text) to their canonical types (FLOAT64/INT64/STRING) instead of failing with 'Invalid column description', matching dbt Core
  • Allow dbt State submissions to include upstream dependencies whose last modified timestamp could not be resolved, instead of bypassing state for the model.
  • Bump BigQuery ADBC driver to 0.21.0.dev+dbt0.21.13, wiring HTTPS_PROXY/NO_PROXY support into the OAuth token-exchange transport
Under the Hood
  • Serialize config for macros for manifest parity with core
  • remove unused calculate_freshness_from_metadata_batch method
  • Add live Snowflake ADBC client cancellation regression test
  • Generic and column data tests now include their schema.yml config (where, severity, limit, tags, meta, ...) in unrendered_config, matching models/seeds/snapshots. Preparatory for correct state:modified comparison of data tests.
  • Add ClickHouse to the list of non experimental adapters.
  • Publish pre-release versions to Homebrew and winget during the pre-stable window, and fix the empty-version bug in the release-v2 publish jobs.
  • Add clickhouse-0.1.0 ADBC driver to CDN checksums
Security
  • Remove unused ad-hoc SQL query endpoints (POST /api/v1/query, GET /api/v1/tables) from dbt docs server
Contributors
View originalPermalink
How v2.0.0-alpha.5 went
v1.12.0

dbt-core v1.12.0

Added 16
  • Make MAXIMUM_SEED_SIZE_MIB configurable
  • Support partial parsing for function nodes
  • Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics
  • Allow defining function arguments with default values
  • Add directory change instruction after dbt init
  • Raise jsonschema-based deprecation warnings by default
Changed 1
  • Flags introduced in 1.9 and 1.10 now default to true
Fixed 1
  • Disable unit tests whose model is disabled
Removed 1
  • Remove the experimental dbt login command and the bundled dbt-state plugin including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars
Deprecated 1
  • Deprecate null return values from generate_schema_name macro behind require_valid_schema_from_generate_schema_name flag

From dbt Core

dbt-core 1.12.0 - Alecia Beth Moore-Hart (P!NK) (July 16, 2026)
Breaking Changes
  • Remove the experimental dbt login command and the bundled dbt-state plugin (including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars), reverting PRs (#NA)
  • Flags introduced in 1.9 and 1.10 defaults to true (#12713)
Features
  • Make MAXIMUM_SEED_SIZE_MIB configurable (#7117, #7124)
  • Support partial parsing for function nodes (#12072)
  • Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics. (#12157)
  • Allow for defining funciton arguments with default values (#12044)
  • Add directory change instruction after dbt init (#9041)
  • Raise jsonschema-based deprecation warnings by default (#12240)
  • :bug: :snowman: Disable unit tests whose model is disabled (#10540)
  • Implement config.meta_get and config.meta_require (#12012)
  • Deprecate null return values from generate_schema_name macro, behind require_valid_schema_from_generate_schema_name flag (#12347)
  • Add ability to indicate dbt Model also represents a Semantic Model. (Not fully supported yet.) (#.)
  • Added ability to parse semantic layer dimensions added to columns as part of new YAML. (Not ready for use until more of the new yaml is implemented.) (#.)
  • Add parsing for new YAML for semantic layer entities attached to dbt models. (#12395)
  • Process semantic metrics in v2 YAML if they are not merged into a model. (#12161)
  • Add parsing for v2 metrics on models and finish implementing their dependency behaviors. (#12397)
  • Add the ability to process derived semantic entities to dbt models, as required by new YAML schema. (#12401)
  • Enable parsing derived dimensions for v2 semantic layer YAML. (#12404)
  • Add unit tests to the Jinja graph object, enabling tools like dbt-project-evaluator to run checks on unit tests. (#12033)
  • Implement agg_time_dimension for new semantic YAML. (#12410)
  • Implement parsing of semantic model object-style configuration in v2 semantic YAML. (#12413)
  • Implement primary_entity field for semantic models in semantic YAML v2. (#12414)
  • add config.meta_get to python model parsing (#12458)
  • Allow jinja suffixed extensions for markdown and sql files (#11097, #3484)
  • Allow continue running child on parent error (#2142)
  • Added support for vars.yml to declare project variables (#11144, #2955)
  • execute dbt debug logic after creating a new project in dbt init (#12510)
  • Write compiled SQL for snapshots to target/compiled/ during dbt compile (#7867)
  • Add "selector" selector method (#5009)
  • env vars can now be loaded from .env file (#12106)
  • dbt seed now supports --empty to create the tables without loading data (#8981)
  • automatically create a latest-version pointer (e.g. dim_customers) for versioned models, opt-in via latest_version_pointer_enabled_by_default flag or per-model latest_version_pointer config (#7442)
  • Add catalogs.yml usage tracking (#1122)
  • Add --sql flag to dbt run-operation for executing ad-hoc SQL/Jinja statements (#12478)
  • support for javascript udfs (#12332)
  • Allow event deferral for Parse events (#12339)
  • Support overloaded UDFs via overloads block in function YAML entries (#12250)
  • Add support for private git packages in packages.yml and dependencies.yml. Resolves URLs from a configured environment variable when present, otherwise falls back to constructing an SSH URL. (#12874)
  • Add support for python 3.14 (#12098)
  • Add Reused to NodeStatus and RunStatus (#12912)
  • Add per-overload start and result log events for overloaded UDFs (LogStartOverload, LogOverloadResult) (#12250)
  • Add catalogs.yml v2 support gated behind use_catalogs_v2 flag, with adapter-owned bridge architecture (#12930)
  • Begin writing OSI SL document at end of parsing (#12786)
  • Support parsing OSI semantic layer documents from a project's OSI/ directory into the dbt manifest (#12787)
  • Bundle the dbt-state plugin (>=2.18,<3.0) as an install dependency of dbt-core. The plugin is opt-in: PluginManager skips auto-discovery unless the user passes --manage-state on the CLI, sets DBT_ENGINE_MANAGE_STATE=true, or sets manage_state to true in the flags block of dbt_project.yml (equivalently in the config block of profiles.yml). Discovery filters disabled modules before importlib.import_module is called, so the default opt-in-off state incurs no import cost. (#13014)
  • Add --use-v2-parser to delegate parsing to the fusion parser, load its manifest.json into a runtime Manifest, and bypass dbt-core's parser. Configurable via --v2-parser / DBT_ENGINE_V2_PARSER (defaults to dbt-core-experimental-parser parse) or the flags: section of dbt_project.yml. (#13029)
  • Add support for user settings with flags reading writing (#13031)
  • Add dbt login command (#13032)
  • Tolerate dbt Fusion-specific warn_error_options names instead of erroring, emitting a note that they are ignored because they are specific to the dbt Fusion engine (#12885)
  • Add catalog_database field to CatalogWriteIntegrationConfig (v1) so catalogs.yml can set a database-name override for any catalog type; works in conjunction with the dbt-adapters get_catalog_database_override method to give catalog_database highest priority in generate_database_name (#15156)
  • Add hints for cli users based on dbt usage (#15510)
Fixes
  • Address Click 8.2+ deprecation warning (#12038)
  • Allow dbt deps to run when vars lack defaults in dbt_project.yml (#8913)
  • Include macros in unit test parsing (#10157)
  • Restore DuplicateResourceNameError for intra-project node name duplication, behind behavior flag require_unique_project_resource_names (#12152)
  • Allow the usage of function with --exclude-resource-type flag (#12143)
  • Fix bug where schemas of functions weren't guaranteed to exist (#12142)
  • :bug: :snowman: Correctly reference foreign key references when --defer and --state provided (#11885)
  • Fix generation of deprecations summary (#12146)
  • :bug: :snowman: Add exception when using --state and referring to a removed test (#10630)
  • :bug: :snowman: Stop emitting NoNodesForSelectionCriteria three times during build command (#11627)
  • :bug: :snowman: Fix long Python stack traces appearing when package dependencies have incompatible version requirements (#12049)
  • :bug: :snowman: Fixed issue where changing data type size/precision/scale (e.g., varchar(3) to varchar(10)) incorrectly triggered a breaking change error fo (#11186)
  • :bug: :snowman: Support unit testing models that depend on sources with the same name (#11975, #10433)
  • Fix bug in partial parsing when updating a model with a schema file that is referenced by a singular test (#12223)
  • :bug: :snowman: Avoid retrying successful run-operation commands (#11850)
  • :bug: :snowman: Fix dbt deps --add-package crash when packages.yml contains warn-unpinned: false (#9104)
  • :bug: :snowman: Improve dbt deps --add-package duplicate detection with better cross-source matching and word boundaries (#12239)
  • :bug: :snowman: Fix false positive deprecation warning of pre/post-hook SQL configs (#12244)
  • :bug: :snowman: Fix ref resolution within package when duplicate nodes exist, behind require_ref_searches_node_package_before_root behavior change flag (#11351)
  • Ensure recent deprecation warnings include event name in message (#12264)
  • Improve error message clarity when detecting nodes with space in name (#11835)
  • :bug: :snowman:Propagate exceptions for NodeFinished callbacks in dbtRunner (#11612)
  • Adds omitted return statement to RuntimeConfigObject.meta_require method (#12288)
  • Do not raise deprecation warning when encountering dataset or project configs for bigquery (#12285)
  • Pin sqlparse <0.5.5 to avoid max tokens issue (#12303)
  • Avoid deadlock edgecases of concurret microbatch/batch execution (#11420)
  • Begin emitting deprecation warnings for DSI produced ValidationFutureError issues (#NA)
  • Add @requires.catalogs decorator to compile command to fix REST Catalog-Linked database compilation (#12353)
  • Validate and filter out non-existent columns from seed column types (#12379)
  • Fix false deprecation warning (#12327)
  • Return correctly resolved project path when changing dirs (#9138)
  • Normalize whitespace prior to computing partial parsing checksum when loading model files (#12432)
  • Dont fire config problem event if loaded_at_query is defined for adapters that dont support metadata-based freshness (#12451)
  • Stop raising deprecation warnings for internal python model configs (#12314)
  • Fix foreign key constraint ref() resolving to deferred relation even when target model is selected for build (#12455)
  • Skip raising CustomKeyInConfigDeprecation for config key alias in sql (#12396)
  • Provide user-friendly validations that dimensions with 'validity_params' also have granularities. (#12473)
  • Use resolved profile and target names to allow partial parsing for default profile and target (#7612)
  • Ensure that all locked packages are installed in packages directory (#12509)
  • Fix static_analysis: off being interpreted as boolean false instead of string "off" in manifest.json (#12015)
  • Set expr to column name for column-based dimensions and entities when the semantic layer name differs from the column name, so MetricFlow queries the correct warehouse column (#12512)
  • Correctly map 'hidden' field of metrics to 'is_private' field in manifests. (#12518)
  • Fix dbt retry for microbatch models to use the original invocation time instead of the current time when recomputing batches (#11423)
  • Fix Dimension() jinja in nested metric filters (input_metrics, numerator, denominator) being incorrectly rendered during YAML parsing for v2 semantic layer schema (#12529)
  • Improve logic for detecting config with missing plus prefix in dbt_project.yml (#12371)
  • Fix v2 metric parsing using model name instead of custom semantic_model.name for generated_from, causing conversion metric validation to fail (#12532)
  • Fix doc() Jinja in derived_semantics dimension and entity descriptions being incorrectly rendered during v2 YAML parsing (#12535)
  • Enable sql_header config for data tests gated behind require_sql_header_in_test_configs behavior change flag. (#9775)
  • Better error formatting for semantic manifest validation errors (#9849)
  • Allow macros invoked via run-operation to ref() private and protected models (#8248)
  • Better error and warnings logs with [WARNING] / [ERROR] messages prepended to the logs (#9849)
  • Fix substring match bug in show and compile task selection causing models with reserved substrings in name to be incorrectly filtered (#12539)
  • Add config and allow meta and docs to exist under it for macros (#12383, #9447)
  • DBT_ENGINE prefixed env vars picked up by CLI (#12583)
  • Fix state:modified not detecting .yml property changes for resource_type:function (#12547)
  • Fix duplicate CTE race condition in ephemeral model compilation (#12602)
  • Allow deferral for UDFs (#12080)
  • Resolve full node description while running udfs for better logging (#12600)
  • Update URL and name of behavior change flag for require_ref_searches_node_package_before_root (#12324)
  • Raise PropertyMovedToConfigDeprecation instead of MissingArgumentsPropertyInGenericTestDeprecation (#12572)
  • Fix list-type metric filters under models key being incorrectly rendered at parse time, causing 'Dimension is undefined' errors (#12618)
  • Add @requires.catalogs decorator to test command to fix custom catalog integration support (#12662)
  • Raise custom key in config deprecation warning for invalid config keys in dbt_project.yml (#12542)
  • Fix IndexError when parsing semantic model that references a disabled or missing model (#12671)
  • Support custom ref kwargs in unit tests and generic data tests, behind behavior flag support_custom_ref_kwargs (#12148)
  • Fix AttributeError when docs block argument is non-constant (#12673)
  • Fix AttributeError when generic test config is non-dictionary (#12674)
  • handle jinja2.Undefined in msgpack_encoder (#12677)
  • Fix inheritance for defaults.agg_time_dimension in semantic models. (#12678)
  • Fix case-insensitive env var lookup on Windows (#10422)
  • Ensure MAX_GROUPING_TOKENS and MAX_GROUPING_DEPTH default to None independently (#12694)
  • Fix EISDIR error when compiling snapshots where a snapshot name matches the source filename (#12568)
  • fix: guard against KeyError for custom constraints in same_contract() (#12699)
  • Suppress stacktrace when snapshot validation fails due to missing strategy or unique_key (#12692)
  • Fixed a bug where UDF function schema was not available in jinja context of on-run-end hook (#12516)
  • fix: handle null tables value in source YAML to prevent TypeError (#12704)
  • We can now enable/disable analyses from dbt_project.yml on a project level or a folder level (#11427)
  • Fix "Cannot use selector" error in dbt source freshness (#12718)
  • Ensure property depr checks check for aliases with plus prefix (#12327)
  • Include exception message in run_results.json for run-operation failures (#12730)
  • fix: exclude test_name not inherited when using selector method (#12753)
  • catch InvalidFieldValue and raise ParsingError during context config generation (#12758)
  • Improve partial parsing of semantic models using new-style yaml. (#12763)
  • Fix regression where node.path for snapshots in subdirectories omitted the subdirectory path (#12783)
  • Skip schema-time rendering of version-level data_tests so they can be rendered later with full context (#12805)
  • Sources and Semantic Model now raise a warning if name contains spaces. Use REQUIRE_SOURCE_AND_SEMANTIC_MODEL_NAMES_WITHOUT_SPACES to raise errors instead. (#12767)
  • Add back the removed descriptions render condition (#12865)
  • Fix regression from #12562 where dbt show and dbt compile filtered out every result when --select used a graph operator (+model, model+, @model) or a method selector (e.g. tag:foo, state:modified, fqn:model). The membership check ran against the raw --select strings, so any non-bare selector matched nothing. Filter the streamed ShowNode / CompiledNode events by the resolved set of directly-selected unique_ids instead, using the same selector parser dbt already uses for execution. The substring fix from #12562 (originally #12539) is preserved structurally. (#12562)
  • Allow column-level entity definitions in V2 semantic YAML to omit name, falling back to the column name to match the existing dimension behavior (#DI-4133)
  • Fix version_to_str returning empty string for float NodeVersion values, causing unquoted YAML version scalars (e.g. v: 4.5) to be silently dropped and mis-routed as non-versioned models (#12947)
  • Reconstruct unrendered config kwarg values as readable expressions instead of raw AST repr (#15336)
  • Handle Reused node status in on-run-end summary printer so plugins that emit RunResult(status=Reused, ...) don't crash with unhandled result. (#12972)
  • Skip jsonschema_validation if adapter_type is not available (#12992)
  • Fix deferred function references to use alias instead of bare name (#12895)
  • Cap the Python recursion limit while resolving the selector: method so a circular selector dependency raises a clean DbtRecursionError instead of crashing the process. The previous code relied on Python's default recursion limit (1000) tripping before the OS thread stack overflowed, but on platforms with smaller default stacks (notably Windows, ~1 MB vs ~8 MB on Linux/macOS) the margin can disappear once instrumentation (e.g. coverage) or stack-heavy plugins join the call chain. Lower the limit locally (restored in finally) so the catchable RecursionError fires first on every platform. (#13014)
  • Honor --manage-state when DBT_ENGINE_MANAGE_STATE is set to false. The bundled dbt-state plugin reads DBT_ENGINE_MANAGE_STATE directly in its initialize(), so a CLI override of an opt-out env var was previously dropped silently: PluginManager loaded the plugin but the plugin self-disabled on import. PluginManager now normalizes os.environ to the Click-resolved value before importing each bundled plugin, so all three opt-in surfaces (--manage-state CLI, DBT_ENGINE_MANAGE_STATE env var, manage_state in dbt_project.yml / profiles.yml) behave consistently end-to-end. (#13014)
  • Strip dbt-core-only DBT_ENGINE_* env vars (e.g. DBT_ENGINE_USE_V2_PARSER, DBT_ENGINE_V2_PARSER) from the v2-parser subprocess env, and expand ~ in --v2-parser paths. Fusion hard-errors on unknown DBT_ENGINE_* vars, so enabling the v2 parser via DBT_ENGINE_USE_V2_PARSER previously broke the handoff. Stripping is keyed off click-bound options, so future core-only DBT_ENGINE_* additions are handled automatically. Non-click vars (DBT_ENGINE_STATE_*, recorder, deps) pass through unchanged. (#13029)
  • Write manage_state user_settings in all platform login flows unless explicitly disabled (#13032)
  • Make sure that expires_at in oauth_sessions is int so that its rust interoperable (#13032)
  • Allow for setting of OSI documents directory as project config (#13088)
  • Support lowercase "osi" directory (#13087)
  • Add a direct_parents attribute to model nodes carrying the nearest public ancestors only, and emit it in dbt ls --output=json for models. Lineage consumers can now render DAG edges from direct_parents instead of depends_on.nodes, which carries the full transitive closure across plugin boundaries (still required for node selection and cycle detection). The new attribute is runtime-only and is stripped during manifest serialization, so the manifest.json contract is unchanged. (#)
  • Make the latest_version_pointer collision check quoting/case aware so an unquoted latest-version alias differing from the pointer name only by case is correctly detected on case-insensitive warehouses (#15210)
  • Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order (#11139)
  • Fix partial parsing ghost-duplicate that raised a false "found two data_tests" error by cleaning up disabled generic and singular test nodes on schema re-parse (#)
  • Carry ref/source/function dependencies declared inside an overloaded UDF's overload body onto the root function node, so they are not dropped from the DAG when the overload SQL file is absorbed (#15501)
  • Update reuse relations hint text (#15510)
  • Fix macro namespace resolution so a dbt project named after a macro no longer crashes with 'MacroGenerator' during dispatch (#15556)
  • Persist hint_ts in dbt_home and gate rw on bare Except clause to be more defensive (#15510)
Docs
Under the Hood
  • Update schema file order test (#11869)
  • Update jsonschemas for schema.yml and dbt_project.yml deprecations (#12180)
  • Replace setuptools and tox with hatch for build, test, and environment management. (#12151)
  • Add add_catalog_integration call even if we have a pre-existing manifest (#12262)
  • Bump lower bound for dbt-common to 1.37.2 (#12284)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Handle missing column time granularities during parsing. (#12472)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Make test case for parsing metric filters slightly more robust. (#12528)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Unpin sqlparse dependency, and introduce --sqlparse CLI option for configuring sqlparse limits (#12329)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Update jsonschemas for more accurate deprecation warnings: macro.config should not warn (#12670)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Update the naming of the jsonschema file used for project files (#NA)
  • Recategorize unhandled exceptions to DbtException subclasses (#11191)
  • Ensure catalogs.yml is loaded for any command that requires loading a manifest (#12705)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Improve error message for bad semantic_model config object with disallowed fields in V2 SL YAML. (#12766)
  • Improve type hinting for BaseRunner so that more type errors are caught during development (#12803)
  • sync JSON schemas from dbt-fusion (#N/A)
  • GenericSqlRunner (used for programmatic SQL execution via SqlCompileRunner/SqlExecuteRunner) is now a standalone class instead of inheriting from CompileRunner. This fixes a latent AttributeError in handle_exception and correctly separates the programmatic SQL execution path from the DAG runner hierarchy. (#12811)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Drop usage of deprecated warn_or_error handler method (#8133)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Annotate PARAM_TYPE_MAP to fix mypy failure with click 8.4.0 (#N/A)
  • Allow-list additional DBT_ENGINE_STATE_* engine env vars (EMIT_REUSED_STATUS, OAUTH_CLIENT_ID, AUTH_URL, TOKEN_URL, API_URL) (#13002)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Add v2-parser telemetry — forward dbt-core's invocation_id and set DBT_INVOCATION_ENV=dbt-core-v2-parser on the parser subprocess so embedded telemetry correlates with the host invocation, and emit V2ParserStart/V2ParserEnd events around the handoff so pre-startup failures (missing binary, schema mismatch) are also captured. Bumps dbt-protos lower bound to 1.0.514 for the new event messages. (#13029)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • sync JSON schemas from dbt-fusion (#N/A)
  • Reduce parse-time memory and macro-generation overhead by virtualizing macros and switching flat_graph/WritableManifest to lazy no-copy views (#15524)
Dependencies
  • Use EventCatcher from dbt-common instead of maintaining a local copy (#12124)
  • Upgrading dbt-semantic-interfaces to 0.10.x (#None)
  • Bump minimum click to 8.2.0 (#12305)
  • Bump DSI minimum to 0.10.2 (#NA)
  • Bump dbt-protos minimum to 1.0.418 (#NA)
  • Move click minimum to 8.3.0 (#12378)
  • Bump minimum version of dbt-common to 1.37.3 (#12575)
  • Bump libpq-dev in Docker image from 13.23-0+deb11u1 to 13.23-0+deb11u2 to fix build failure due to superseded package version (#NA)
  • Begin depending on MetricFlow instead of dbt-semantic-interfaces (#12893)
  • Bump libpq-dev in Docker image from 13.23-0+deb11u2 to 13.23-0+deb11u3 to fix build failure due to superseded package version (#NA)
  • Remove unused pytest-logbook and logbook test dependencies from both the default and ci hatch envs. dbt-core dropped its logbook-based logger in (#NA)
  • Bump dbt-adapters lower bound to >=1.24.1 (#12985)
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a1 (#13065)
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a3 (#15391)
  • Bump ca-certificates, libpq-dev, and openssh-client in Docker image to current bullseye versions to fix Docker release build failure caused by superseded package versions (#NA)
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a4 (#13065)
  • Bump dbt-adapters to 1.24.5 lowerbound (#, #)
Contributors

Alecia Beth Moore-Hart (P!NK) (b. 1979)

Thanks to @colin-rogers-dbt for writing this biography of Alecia Beth Moore-Hart (P!NK)—a famous Philadelphian, and the namesake of this dbt Core release.

If you existed on the planet between 2000 and 2012 you have heard her music. The kind of pop music that's inescapable; relentlessly played, parodied, derided and loved. Songs that were sincere to the point of discomfort, unconcerned with following a formula, with no subject being off limits.

Their writer and singer, Alecia Beth Moore-Hart, was born September 8, 1979 in Doylestown, Pennsylvania a small town roughly 40 miles outside of Philadelphia. Growing up in a volatile household she nearly didn't make it: nearly overdosing at a rave on Thanksgiving at 16 years old. The DJ told her to come back the following night for a guest spot on the condition she never touch hard drugs again. She showed up the following night and by the following week was auditioning for labels the following week. What has followed is an unlikely career spanning nine albums and countless tours for millions of fans.

A career defined not be her first album: a commercially successful pop album that she personally hated but by her second. She used the leverage bought by her grammy winning cover of "Lady Marmalade" for the Moulin Rouge soundtrack to demand the freedom to make the album she wanted. The result was "Missundaztood", a confessional genre bending mashup of blues, hip hop and rockl made largely with Linda Perry of 4 Non Blondes. Topically, it covers her parents' divorce, her own self-loathing and the absurdity of pop fame. The label expected disaster. It sold fifteen million copies. The rest is history.

View originalPermalink
How v1.12.0 went
v1.12.0rc3Pre-release

dbt-core v1.12.0rc3

Added 1
  • Add hints for cli users based on dbt usage
Changed 1
  • Reduce parse-time memory and macro-generation overhead by virtualizing macros and switching flat_graph/WritableManifest to lazy no-copy views
Fixed 2
  • Carry ref/source/function dependencies declared inside an overloaded UDF's overload body onto the root function node, so they are not dropped from the DAG when the overload SQL file is absorbed
  • Update reuse relations hint text

From dbt Core

dbt-core 1.12.0-rc3 - July 14, 2026
Features
  • Add hints for cli users based on dbt usage (#15510)
Fixes
  • Carry ref/source/function dependencies declared inside an overloaded UDF's overload body onto the root function node, so they are not dropped from the DAG when the overload SQL file is absorbed (#15501)
  • Update reuse relations hint text (#15510)
Under the Hood
  • Reduce parse-time memory and macro-generation overhead by virtualizing macros and switching flat_graph/WritableManifest to lazy no-copy views (#15524)
Contributors
View originalPermalink
How v1.12.0rc3 went
v1.12.0rc2Pre-release

dbt-core v1.12.0rc2

Added 1
  • Add catalog_database field to CatalogWriteIntegrationConfig (v1) so catalogs.yml can set a database-name override for any catalog type
Changed 1
  • Flags introduced in 1.9 and 1.10 now default to true
Fixed 2
  • Reconstruct unrendered config kwarg values as readable expressions instead of raw AST repr
  • Fix partial parsing ghost-duplicate that raised a false "found two data_tests" error by cleaning up disabled generic and singular test nodes on schema re-parse

From dbt Core

dbt-core 1.12.0-rc2 - July 09, 2026
Breaking Changes
  • Flags introduced in 1.9 and 1.10 defaults to true (#12713)
Features
  • Add catalog_database field to CatalogWriteIntegrationConfig (v1) so catalogs.yml can set a database-name override for any catalog type; works in conjunction with the dbt-adapters get_catalog_database_override method to give catalog_database highest priority in generate_database_name (#15156)
Fixes
  • Reconstruct unrendered config kwarg values as readable expressions instead of raw AST repr (#15336)
  • Fix partial parsing ghost-duplicate that raised a false "found two data_tests" error by cleaning up disabled generic and singular test nodes on schema re-parse (#)
Contributors
View originalPermalink
How v1.12.0rc2 went
v1.12.0rc1Pre-release

dbt-core v1.12.0rc1

Changed 2
  • Tolerate dbt Fusion-specific warn_error_options names instead of erroring, emitting a note that they are ignored because they are specific to the dbt Fusion engine
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a4
Fixed 1
  • Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order
Removed 1
  • Remove the experimental dbt login command and the bundled dbt-state plugin, including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars

From dbt Core

dbt-core 1.12.0-rc1 - July 07, 2026
Breaking Changes
  • Remove the experimental dbt login command and the bundled dbt-state plugin (including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars), reverting PRs (#NA)
Features
  • Tolerate dbt Fusion-specific warn_error_options names instead of erroring, emitting a note that they are ignored because they are specific to the dbt Fusion engine (#12885)
Fixes
  • Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order (#11139)
Dependencies
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a3 (#15391)
  • Bump ca-certificates, libpq-dev, and openssh-client in Docker image to current bullseye versions to fix Docker release build failure caused by superseded package versions (#NA)
  • Bump the minimum dbt-core-experimental-parser to 2.0.0a4 (#13065)
Contributors
View originalPermalink
How v1.12.0rc1 went

v2.0.0-alpha.4

Pre-release
Added 11
  • DuckDB read-write support for Horizon and Unity (Iceberg REST) catalogs via duckdb 1.5.4 with write-compat ATTACH options
  • DuckDB catalogs.yml v2 with DuckLake, Iceberg REST, and local filesystem catalogs with catalog-aware materializations
  • Redshift database context switching per node via USE / RESET USE when datasharing is enabled
  • dbt-agent guidance for surrogate key dbt_project.yml vars, incremental full-refresh, staging enrichment LEFT JOIN, fct-to-dim LEFT JOIN, pre-computed age field warning, and cumulative standings
  • dbt-agent guidance for propagating source column type changes downstream to all models
  • dbt-agent guidance for staging column inference versus source reuse, missing-column handling, and time-bounded seed+JOIN patterns
Changed 1
  • Bundled dbt-docs-v2 UI updated to 862e5855aaa42463d3b5c34f4b53622ca32721fb
Fixed 9
  • BigQuery schema name qualification with target project in create_schema and drop_schema to ensure datasets are created in the correct project when execution_project differs from database
  • SparkConnect auth profiles have clear internal representation without requiring a user field
  • Accept comma-separated ref()/source() calls within a single depends_on list item and tolerate trailing } after Jinja expressions in descriptions
  • dbt agent build YAML parse error surfacing via OTEL probe and panic fix on wrapped-negative line numbers
  • Databricks incremental run SQL error when using custom PK constraints by correctly exposing constraint attributes to Jinja templates
  • Panic when query result contains a map with non-scalar struct values by adding StructConverter to dbt-agate

From dbt Core

2.0.0-alpha.4

Released July 06, 2026

Features
  • [dbt-fusion] DuckDB: read-write Horizon and Unity (Iceberg REST) catalogs via duckdb 1.5.4 / duckdb-iceberg#1017 write-compat ATTACH options (stage_create_tables, disable_multi_table_commit, etc.). Upgrades the read-only support from the base PR.
  • [dbt-fusion] DuckDB catalogs.yml v2: DuckLake, Iceberg REST, and local filesystem catalogs with catalog-aware materializations, plus read-only Horizon and Unity attachments (writes land with duckdb 1.5.4, #10950)
  • [dbt-fusion] [Redshift] Switch the database context per node via USE / RESET USE when datasharing is enabled and the node targets a non-default database
  • [dbt-fusion] dbt-agent: add guidance for surrogate key dbt_project.yml vars, incremental full-refresh after logic changes, staging enrichment LEFT JOIN, fct-to-dim LEFT JOIN, pre-computed age field warning, and cumulative standings MAX vs ROW_NUMBER
  • [dbt-fusion] dbt-agent: add guidance for propagating source column type changes (INT→VARCHAR) to all downstream models
  • [dbt-fusion] dbt-agent: add guidance for staging column inference vs source reuse, missing-column add-not-remove, enumerate-all-affected-models, time-bounded seed+JOIN pattern, mandatory full-refresh after surrogate_key rename
  • [dbt-fusion] dbt-agent: mandatory --full-refresh after surrogate_key rename prominently in surrogate_key.md
  • [dbt-fusion] Extract dbt-agent into dedicated crate with prompts, runner, integration tests, and benchmark scripts
  • [fusion] Add GET /api/v1/identity endpoint to dbt-docs-server
  • [fusion] Bump bundled dbt-docs-v2 UI to 862e5855aaa42463d3b5c34f4b53622ca32721fb
  • [fusion] Add compiled code toggle to the Code tab and consolidate exposure metadata fields into the unified Metadata section
  • [fusion] Show row count stat in the model list view
Fixes
  • [dbt-fusion] BigQuery: qualify schema name with target project in create_schema and drop_schema so datasets are created in the correct project when execution_project differs from database
  • [dbt-fusion] (dbt-auth) SparkConnect auth profiles have clear internal representaiton. To the user view, no "user" is required (but may be provided). An ambient authentication mode which entrusts connections to the networking layer et. al is added."
  • [dbt-fusion] Accept comma-separated ref()/source() calls within a single depends_on list item and tolerate a trailing } after a Jinja expression in descriptions, matching dbt-core leniency.
  • [dbt-fusion] dbt agent build: surface YAML parse errors via OTEL probe; fix panic on wrapped-negative line numbers in context_snippet; use --write-metadata instead of --write-index
  • [dbt-fusion] Fix Databricks incremental run SQL error when using custom PK constraints: correctly expose constraint attributes (type, name, render) to Jinja templates and normalize custom PK expressions for stable incremental diffs
  • [fusion] Fix panic when a query result contains a map with non-scalar (struct) values, e.g. map<string,struct<...>>. dbt-agate now has a StructConverter so struct columns render as dicts instead of failing an unsupported Struct->Utf8 cast.
  • [fusion] Fix unique_id parity with dbt-core for singular and schema tests
  • [fusion] Fix ambiguous ref panic for cross-project publication models when used as v2 parser
  • [fusion] Fix operation nodes missing alias, database, schema, tags, config, and index in manifest
  • [dbt-core] Fix macro original_file_path prefixed with dbt_packages/ instead of being package-relative (#11381)
  • [dbt-core] state:modified no longer flags seeds whose meta config is set as environment-aware Jinja in dbt_project.yml. (#15286)
  • [dbt-core] state:modified no longer flags snapshots whose target_schema, target_database, or alias configs are set as environment-aware Jinja in dbt_project.yml. (#15286)
  • [fusion] Fix explorer breadcrumbs, layout, and filter view behavior; hide analyses everywhere when the hasAnalysis feature flag is off
  • [fusion] Read has_dbt_state from the capabilities API instead of hardcoding false; hide the dbt State upsell for projects that already have dbt state enabled
  • [fusion] When warn_error_options upgrades a Jinja exceptions.warn() call to an error, the node message in run_results.json now shows a clean Compilation Error with the warning text, matching dbt-core behavior
  • [dbt-index] Redshift warehouse tools now accept 'dbname' field in profiles.yml (standard dbt-redshift field name)
  • [fusion] Use unrendered configs to flag changes for models and sources in state:modified selector
  • [dbt-core] state:modified no longer flags snapshots whose dbt_valid_to_current config is set as environment-aware Jinja in dbt_project.yml. (#15286)
  • [fusion] Fix dbt State evaluate_volatile_sql config semantics so true evaluates volatile SQL and false allows reuse.
  • [dbt-core] Include the snapshot filename in the snapshot fqn to match dbt-core, fixing false-positive state:modified results when dbt-core compares against a Fusion-generated manifest (#15286)
  • [dbt-index] Fix dbt-index regressions: CLL parquet not produced on baseline→strict static-analysis transition
  • [internal] route tests to manifest.disabled when both parent model and test are explicitly disabled
  • [fusion] Hide the completions subcommand from dbt help output
  • [dbt-core] state:modified no longer flags data tests whose tags or meta configs are set as environment-aware Jinja in dbt_project.yml. (#15286)
  • [fusion] Use redshift_database_name when checking Redshift SVV_EXTERNAL_TABLES.
Under the Hood
  • [fusion] Resolve send_anonymous_usage_stats for docs serve with precedence --no-send-anonymous-usage-stats > DBT_SEND_ANONYMOUS_USAGE_STATS env > dbt_project.yml flags block > default true, and wire it into analytics_enabled on GET /api/v1/identity
  • [fusion] Migrate dbt-docs-v2 data layer from hand-rolled fetch hooks to TanStack Query
  • [fusion] Consolidate nine near-identical FilterView components into a shared GenericFilterView adapter, removing ~1100 lines of duplication
  • [fusion] Implement array_except as a native DuckDB extension function (sf_array_except) instead of a SQL macro
Contributors
View originalPermalink
How v2.0.0-alpha.4 went
v1.11.12

dbt-core v1.11.12

Fixed 1
  • Stop emitting spurious deprecation warnings for state model configs (pre_clone, lag_tolerance, require_fresh_data_from, etc.) by adding the ModelState schema to the bundled jsonschemas

From dbt Core

dbt-core 1.11.12 - July 01, 2026
Fixes
  • Stop emitting spurious deprecation warnings for state model configs (pre_clone, lag_tolerance, require_fresh_data_from, etc.) by adding the ModelState schema to the bundled jsonschemas (#13016)
Contributors
View originalPermalink
How v1.11.12 went

v2.0.0-alpha.3

Pre-release
Added 14
  • For versioned models, automatically create a view at the unsuffixed model name pointing to the latest version, configurable via latest_version_pointer config
  • Redshift: use SHOW GRANTS ON TABLE for grants when datasharing is enabled
  • Make maximum seed size hashed for state:modified comparison configurable via --maximum-seed-size-mib flag, environment variables, and dbt_project.yml with default 1 MiB
  • Extension now uses the dbt login command when signing in
  • Support catalog federation between Snowflake Horizon and Unity Catalog
  • Added support for Javascript UDFs in Snowflake and BigQuery
Changed 1
  • Support the latest duckdb version 1.5.4
Fixed 4
  • BigQuery source freshness now correctly handles dotted project IDs by using relation component accessors instead of splitting on '.'
  • Always quote materialized view path in Redshift
  • --write-index no longer produces catalog.json as an unintended side effect
  • Discover source() calls inside conditional branches that evaluate to false during parse render

From dbt Core

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
View originalPermalink
How v2.0.0-alpha.3 went

v2.0.0-alpha.2

Pre-release
Added 10
  • Add --empty support in seed command
  • Homebrew distribution: install the dbt Fusion CLI with brew install dbt from the official tap
  • GET /api/v1/models: add catalog field (row_count_stat, bytes_stat, last_modified_stat from warehouse INFORMATION_SCHEMA) and materialized field; dbt build --write-index now queries warehouse catalog stats and writes them to the parquet index
  • Detect how dbt was installed (Homebrew, pip, winget, or the standalone installer) and surface the matching upgrade command; dbt system update now refuses to overwrite a binary managed by a package manager unless --force is passed
  • Redshift: use SHOW TABLES FROM SCHEMA for cross-database source freshness when datasharing is enabled
  • Emit project-wide catalogs count on the parse-time ResourceCounts telemetry event
Fixed 10
  • Restore token-first dispatch for Databricks OAuth so dbt Studio's U2M flow works correctly
  • equals macro now uses IS NOT DISTINCT FROM clause for comparison
  • Update try_or_compiler_error to match dbt-core
  • Preserve runtime invocation/run-result timestamps during direct fusion metadata ingest so dbt_rt.invocations.generated_at and dbt_rt.run_results.created_at are populated again
  • Fix /api/v1/search returning 500 when dbt_rt.run_results parquet is absent
  • Fix v2-parser path - preserve raw user-provided source identifier (including any embedded quote characters) on __source_attr__.identifier so dbt-core's source(...).identifier round-trips for packages like fivetran/zendesk that pre-quote reserved-word table names

From dbt Core

2.0.0-alpha.2

Released June 18, 2026

Features
  • [dbt-fusion] Added --empty support in seed command.
  • [dbt-fusion] Homebrew distribution: install the dbt Fusion CLI with brew install dbt from the official tap.
  • [dbt-fusion] GET /api/v1/models: add catalog field (row_count_stat, bytes_stat, last_modified_stat from warehouse INFORMATION_SCHEMA) and materialized field; dbt build --write-index now queries warehouse catalog stats and writes them to the parquet index
  • [dbt-fusion] Detect how dbt was installed (Homebrew, pip, winget, or the standalone installer) and surface the matching upgrade command; dbt system update now refuses to overwrite a binary managed by a package manager unless --force is passed.
  • [dbt-fusion] Redshift: use SHOW TABLES FROM SCHEMA for cross-database source freshness when datasharing is enabled
  • [dbt-fusion] Emit project-wide catalogs count on the parse-time ResourceCounts telemetry event
  • [dbt-fusion] (fabric) supports dbt init
  • [dbt-fusion] Interactive dbt login honors the DBT_OAUTH_SCOPES env var to request additional OAuth scopes.
  • [dbt-fusion] dbt docs serve reports actual login status in GET /api/v1/distribution
  • [dbt-fusion] Add Workload Identity Federation auth for BigQuery via Microsoft Entra
  • [internal] Add daily conformance-analysis collection: scheduled GHA collects the previous UTC day and uploads per-day error-lines parquet to S3; new cargo conformance fetch/push sync the bucket and collect --start/--end + log-overlap --days N enable multi-day analysis
  • [internal] Add cargo conformance report: a self-contained static HTML UI for an log-overlap run — templates ranked by impact, the concrete strings filling each drain3 <*> wildcard, and drill-down into the original log lines
Fixes
  • [dbt-fusion] (fix adapters/databricks) restore token-first dispatch for Databricks OAuth so dbt Studio's U2M flow works correctly.
  • [dbt-fusion] equals macro now uses IS NOT DISTINCT FROM clause for comparison
  • [dbt-fusion] update try_or_compiler_error to match dbt-core
  • [dbt-index] Preserve runtime invocation/run-result timestamps during direct fusion metadata ingest so dbt_rt.invocations.generated_at and dbt_rt.run_results.created_at are populated again
  • [dbt-fusion] Fix /api/v1/search returning 500 when dbt_rt.run_results parquet is absent (project never run with --use-index)
  • [dbt-fusion] Fix v2-parser path - preserve raw user-provided source identifier (including any embedded quote characters) on source_attr.identifier so dbt-core's source(...).identifier round-trips for packages like fivetran/zendesk that pre-quote reserved-word table names (e.g. Snowflake's GROUP)
  • [dbt-fusion] source freshness on_run_end hooks can now access result.node (unique_id, relation_name, etc.) — fixes compatibility with elementary and other packages that read result.node in on_run_end macros
  • [dbt-fusion] dbt State auth no longer caches the organization ID; it is always resolved from the live token scope, avoiding unnecessary browser re-authentication when a user's organization access changes between invocations
  • [dbt-fusion] Fix v2-parser path - hydrate ColumnInfo.dimension and ColumnInfo.entity from the column when YAML omits required fields, and skip serializing Option::None so dbt-core's mashumaro can deserialize fusion's writable manifest into ColumnDimension/ColumnEntity dict-form variants
  • [dbt-fusion] Fix v2-parser path - only blank path and original_file_path on public model nodes imported via publication artifacts; keep paths for public models from locally-resolved (local/git/registry) packages so dbt-core can write per-model compiled SQL instead of crashing with Errno 21 trying to write to an empty path
  • [dbt-fusion] Fix v2-parser path - emit hook operation nodes with original_file_path of ./dbt_project.yml (package-internal) and path with .sql extension so dbt-core writes compiled hook artifacts to the same per-package location it does without --use-v2-parser
  • [dbt-fusion] Fix Databricks panic when flattening STRUCT keys that were not string.
  • [dbt-core] Fix YAML selector selector: shorthand being silently ignored inside exclude/union, and fix nested exclude being dropped from the serialized manifest (#15140)
  • [dbt-fusion] Show a clear warning when dbt_cloud.yml fails to parse instead of a misleading 'no credentials configured' error
  • [dbt-fusion] Fix schema routing for test failures when +schema: null is set in dbt_project.yml with store_failures: true
  • [dbt-fusion] Read DuckDB catalog column_index as a 32-bit integer instead of a decimal, fixing a type-mismatch error when collecting DuckDB column metadata
  • [dbt-fusion] Fix re.findall Capture objects to be sliceable sequences when pattern has 3+ capture groups
  • [dbt-fusion] Disable dbt State for unsupported adapters
  • [dbt-fusion] Fix manifest deserialization failing on no configs
  • [dbt-fusion] Fix manifest deserialization for fields that are not present
  • [dbt-fusion] Include Databricks-specific config attributes (auto_liquid_cluster, databricks_tags) in the semantic extras so dbt state comparison detects changes to them
  • [dbt-fusion] Search results are now ranked by relevance: exact name matches appear first, followed by prefix matches, then field-priority matches (name, column, tag, fqn, description), with resource type and modeling layer as tiebreakers.
  • [dbt-fusion] (fix adapter/databricks) retry on retryable errors
  • [dbt-fusion] Capture and surface failures for unit test schema fetch phase
  • [dbt-fusion] Relation now renders properly when the region is set on project or database
  • [dbt-fusion] Fix model storing none values as undefined
  • [dbt-fusion] LSP false dbt1089 warning
  • [dbt-fusion] Honor model-level full_refresh: false config on microbatch models under dbt build --full-refresh
  • [dbt-fusion] Emit M015 (DepsInstallInfo) only on successful package install, not M016
  • [dbt-fusion] Allow target variables to be used in dbt_project.yml
  • [dbt-fusion] fix seed configs rejecting valid fields
  • [dbt-fusion] sidecar: DATEADD on TIMESTAMPTZ no longer fails the DuckDB binder under --compute sidecar
  • [dbt-fusion] Fix dbt State reuse for new data tests without cached results
Under the Hood
  • [dbt-fusion] Remove "models" path segment in computed fqn for manifest parity with Core
  • [dbt-fusion] Manifest parity with core fixes for groups
  • [dbt-fusion] Snapshot errors and logs now show phase-accurate paths for artifacts
  • [internal] Add cargo ci homebrew render and cargo ci homebrew publish subcommands for rendering and publishing Homebrew formulas.
  • [internal] Add reusable publish-homebrew.yml workflow that renders the formula and pushes it to a Homebrew tap. Used by the release pipeline and invokable ad-hoc via workflow_dispatch.
  • [dbt-fusion] Improve ClickHouse init: remove database and make password optional
  • [dbt-fusion] Extract package resolution behind PackageResolver trait per package kind, with concurrent resolution per BFS level
  • [dbt-fusion] Serialize external and its subfields for manifest parity with Core
  • [dbt-fusion] Refactor dbt-deps install to a trait-based PackageInstaller running concurrently via futures::join_all; per-variant impls only do install work and populate a shared InstallOutcome, while span lifecycle, telemetry, and error-path partial-progress stamping live in the trait default
  • [fusion] Route view-traversal source extraction through TypeOps so the run-cache uses sdf-frontend bind-context in proprietary builds and the SA sqlparser path otherwise
  • [dbt-fusion] Execute hooks on dbt State reuse
  • [dbt-index] perf(dbt-lineage): --write-lineage overhead reduced from +20s to +2.4s at 5 843 models: bypass build_lineage_environment via direct LineageRow→CLL edge extraction, fix redundant epoch-0 compaction
  • [internal] Add a dedicated dbt Core changelog (CHANGELOG-dbtcore.md) and sync it through copybara so dbt-core publishes its own changelog, starting at 2.0.0-alpha.1, separate from the dbt-fusion changelog
  • [dbt-fusion] Bump dbt-docs-v2 UI bundle to add dbt State banner (a0c6c196807e9e6f2b9ea4fa953e99c2d1031657)
  • [internal] Unify TypeOps source-extraction methods into a single extract_upstreams; absorb the standalone sdf_frontend dep_analysis::extract_sources_from_str into the same canonical path
  • [dbt-fusion] Emit catalog_type on the RunModel telemetry event, resolved from the model's catalog_name via the active write integration in catalogs.yml
  • [dbt-fusion] Re-enable and re-wire the dbt-repl integration test suite, disabled during the dbt-main modularization
  • [dbt-fusion] Use lag_tolerance in freshness reuse messages
  • [internal] Centralize server version lookup: DistInfoProvider gains a default server_version() method so env!("CARGO_PKG_VERSION") is defined in one place.
  • [dbt-fusion] Remove quoting field from SourceConfig; adapter-specific quoting defaults are now applied directly during source resolution instead of being propagated through the config struct
  • [internal] conformance: add resolve-repro subcommand (run_id → S3 artifact path via Datadog) and broaden fetch-repro to resolve the Teleport app + bucket per cell (global prod/prod-emea/prod-au, us-multicell, jp1), with --app/--aws-role/--bucket overrides for cells whose account isn't auto-resolved (eu/us2/us3/onprem)
  • [dbt-fusion] Bump bigquery driver for WIF auth support
Contributors
View originalPermalink
How v2.0.0-alpha.2 went
v1.12.0b3Pre-release

dbt-core v1.12.0b3

Added 1
  • Add a `direct_parents` attribute to model nodes carrying the nearest public ancestors only, and emit it in `dbt ls --output=json` for models
Fixed 3
  • Allow for setting of OSI documents directory as project config
  • Support lowercase "osi" directory
  • Make the latest_version_pointer collision check quoting/case aware so an unquoted latest-version alias differing from the pointer name only by case is correctly detected on case-insensitive warehouses

From dbt Core

dbt-core 1.12.0-b3 - June 15, 2026
Fixes
  • Allow for setting of OSI documents directory as project config (#13088)
  • Support lowercase "osi" directory (#13087)
  • Add a direct_parents attribute to model nodes carrying the nearest public ancestors only, and emit it in dbt ls --output=json for models. Lineage consumers can now render DAG edges from direct_parents instead of depends_on.nodes, which carries the full transitive closure across plugin boundaries (still required for node selection and cycle detection). The new attribute is runtime-only and is stripped during manifest serialization, so the manifest.json contract is unchanged. (#)
  • Make the latest_version_pointer collision check quoting/case aware so an unquoted latest-version alias differing from the pointer name only by case is correctly detected on case-insensitive warehouses (#15210)
Under the Hood
  • sync JSON schemas from dbt-fusion (#N/A)
Contributors
View originalPermalink
How v1.12.0b3 went
View all

Discussion

If you publish dbt Core, you can claim this product by proving you administer its repository.