# dbt Core changelog > Analytics engineering: transform data in your warehouse. - Vendor: dbt Labs - Category: Developer Tools - Official site: https://www.getdbt.com - Tracked by: What's New (https://whatsnew.fyi/product/dbt-core) - Harvested from: GitHub (dbt-labs/dbt-core) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v2.0.0-alpha.5 - Date: 2026-07-20 - Version: v2.0.0-alpha.5 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.5 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v2.0.0-alpha.5 - Labels: Pre-release - **added** — Migrate Redshift catalog macros to SHOW TABLES and SVV_REDSHIFT_COLUMNS when datasharing is enabled for cross-database relation catalog generation - **added** — 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 - **added** — Add catalog_database support to v2 catalogs.yml with highest priority in generate_database_name for Snowflake, BigQuery biglake_metastore, and Databricks unity - **added** — Fire telemetry event on static analysis propagation completion - **added** — Add POST /api/v1/analytics/events relay endpoint - **added** — Add distribution field and server-authoritative fields to docs analytics events - **added** — Add +resource_tags config support for seeds and snapshots in dbt_project.yml - **added** — Implement symbolic linter - **added** — Analysis nodes now have compiled, compiled_code, and compiled_path populated in the manifest after dbt compile - **fixed** — Populate defer_relation on graph.nodes entries so node.defer_relation works in Jinja - **fixed** — Correct defer_relation wire shape on graph.nodes to match dbt-core's DeferRelation dataclass - **fixed** — Prevent panic when calling insert() on a mutable list with an out-of-bounds index and return a proper template error instead - **fixed** — Parse-time config.get() now matches dbt-core behavior by returning empty string for every key except meta - **fixed** — Resolve event_time from seed and snapshot inputs for microbatch models - **fixed** — Fix dbt State view reuse during full-refresh runs - **fixed** — Generic test nodes with long names no longer have empty depends_on.macros in the manifest - **fixed** — Fix Spark schema existence and listing on the Hive metastore via show databases instead of information_schema.schemata - **fixed** — Replace panic with user-facing error when an exposure depends_on entry does not resolve to a ref(), source(), or metric() call - **fixed** — Improve Snowflake dbt State metadata error when database or schema is empty ##### 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 co _[Truncated at 4000 characters — full notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.5]_ ### v1.12.0 — dbt-core v1.12.0 - Date: 2026-07-16 - Version: v1.12.0 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.12.0 - **removed** — Remove the experimental dbt login command and the bundled dbt-state plugin including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars - **changed** — Flags introduced in 1.9 and 1.10 now default to true - **added** — Make MAXIMUM_SEED_SIZE_MIB configurable - **added** — Support partial parsing for function nodes - **added** — Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics - **added** — Allow defining function arguments with default values - **added** — Add directory change instruction after dbt init - **added** — Raise jsonschema-based deprecation warnings by default - **fixed** — Disable unit tests whose model is disabled - **added** — Implement config.meta_get and config.meta_require - **deprecated** — Deprecate null return values from generate_schema_name macro behind require_valid_schema_from_generate_schema_name flag - **added** — Add ability to indicate dbt Model also represents a Semantic Model - **added** — Add parsing for semantic layer dimensions added to columns as part of new YAML - **added** — Add parsing for new YAML for semantic layer entities attached to dbt models - **added** — Process semantic metrics in v2 YAML if they are not merged into a model - **added** — Add parsing for v2 metrics on models and finish implementing their dependency behaviors - **added** — Add unit tests to the Jinja graph object enabling tools like dbt-project-evaluator to run checks on unit tests - **added** — Allow jinja suffixed extensions for markdown and sql files - **added** — Allow continue running child on parent error - **added** — Add support for vars.yml to declare project variables ##### 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](https://github.com/dbt-labs/dbt-core/issues/NA)) - Flags introduced in 1.9 and 1.10 defaults to true ([#12713](https://github.com/dbt-labs/dbt-core/issues/12713)) ###### Features - Make MAXIMUM_SEED_SIZE_MIB configurable ([#7117](https://github.com/dbt-labs/dbt-core/issues/7117), [#7124](https://github.com/dbt-labs/dbt-core/issues/7124)) - Support partial parsing for function nodes ([#12072](https://github.com/dbt-labs/dbt-core/issues/12072)) - Add UnparsedMetricV2 to read in new-style YAML Semantic Layer Metrics. ([#12157](https://github.com/dbt-labs/dbt-core/issues/12157)) - Allow for defining funciton arguments with default values ([#12044](https://github.com/dbt-labs/dbt-core/issues/12044)) - Add directory change instruction after dbt init ([#9041](https://github.com/dbt-labs/dbt-core/issues/9041)) - Raise jsonschema-based deprecation warnings by default ([#12240](https://github.com/dbt-labs/dbt-core/issues/12240)) - :bug: :snowman: Disable unit tests whose model is disabled ([#10540](https://github.com/dbt-labs/dbt-core/issues/10540)) - Implement config.meta_get and config.meta_require ([#12012](https://github.com/dbt-labs/dbt-core/issues/12012)) - Deprecate null return values from generate_schema_name macro, behind require_valid_schema_from_generate_schema_name flag ([#12347](https://github.com/dbt-labs/dbt-core/issues/12347)) - Add ability to indicate dbt Model also represents a Semantic Model. (Not fully supported yet.) ([#.](https://github.com/dbt-labs/dbt-core/issues/.)) - 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.) ([#.](https://github.com/dbt-labs/dbt-core/issues/.)) - Add parsing for new YAML for semantic layer entities attached to dbt models. ([#12395](https://github.com/dbt-labs/dbt-core/issues/12395)) - Process semantic metrics in v2 YAML if they are not merged into a model. ([#12161](https://github.com/dbt-labs/dbt-core/issues/12161)) - Add parsing for v2 metrics on models and finish implementing their dependency behaviors. ([#12397](https://github.com/dbt-labs/dbt-core/issues/12397)) - Add the ability to process derived semantic entities to dbt models, as required by new YAML schema. ([#12401](https://github.com/dbt-labs/dbt-core/issues/12401)) - Enable parsing derived dimensions for v2 semantic layer YAML. ([#12404](https://github.com/dbt-labs/dbt-core/issues/12404)) - Add unit tests to the Jinja `graph` object, enabling tools like dbt-project-evaluator to run checks on unit tests. ([#12033](https://github.com/dbt-labs/dbt-core/issues/12033)) - Implement agg_time_dimension for new semantic YAML. ([#12410](https://github.com/dbt-labs/dbt-core/issues/12410)) - Implement parsing of semantic model object-style configuration in v2 semantic YAML. ([#12413](https://github.com/dbt-labs/dbt-core/issues/12413)) - Implement primary_entity field for semantic models in semantic YAML v2. ([#12414](https://github.com/dbt-labs/dbt-core/issues/12414)) - add config.meta_get to python model parsing ([#12458](https://github.com/dbt-labs/dbt-core/issues/12458)) - Allow jinja suffixed extensions for markdown and sql files ([#11097](https://github.com/dbt-labs/dbt-core/issues/11097), [#3484](https://github.com/dbt-labs/dbt-core/issues/3484)) - Allow continue running child on parent error ([#2142](https://github.com/dbt-labs/dbt-core/issues/2142)) - Added support for vars.yml to declare project variables ([#11144](https://github.com/dbt-labs/dbt-core/issues/11144), [#2955](https://github.com/dbt-labs/dbt-core/issues/2955)) - execute dbt debug logic after creating a new project in dbt init ([#12510](https://github.com/ _[Truncated at 4000 characters — full notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0]_ ### v1.12.0rc3 — dbt-core v1.12.0rc3 - Date: 2026-07-14 - Version: v1.12.0rc3 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0rc3 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.12.0rc3 - Labels: Pre-release - **added** — Add hints for cli users based on dbt usage - **fixed** — 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 - **fixed** — Update reuse relations hint text - **changed** — Reduce parse-time memory and macro-generation overhead by virtualizing macros and switching flat_graph/WritableManifest to lazy no-copy views ##### dbt-core 1.12.0-rc3 - July 14, 2026 ###### Features - Add hints for cli users based on dbt usage ([#15510](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/15501)) - Update reuse relations hint text ([#15510](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/15524)) ###### Contributors - [@aahel](https://github.com/aahel) ([#15501](https://github.com/dbt-labs/dbt-core/issues/15501)) - [@ash2shukla](https://github.com/ash2shukla) ([#15510](https://github.com/dbt-labs/dbt-core/issues/15510), [#15510](https://github.com/dbt-labs/dbt-core/issues/15510), [#15524](https://github.com/dbt-labs/dbt-core/issues/15524)) - [@peterallenwebb](https://github.com/peterallenwebb) ([#15524](https://github.com/dbt-labs/dbt-core/issues/15524)) ### v1.12.0rc2 — dbt-core v1.12.0rc2 - Date: 2026-07-09 - Version: v1.12.0rc2 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0rc2 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.12.0rc2 - Labels: Pre-release - **changed** — Flags introduced in 1.9 and 1.10 now default to true - **added** — Add catalog_database field to CatalogWriteIntegrationConfig (v1) so catalogs.yml can set a database-name override for any catalog type - **fixed** — Reconstruct unrendered config kwarg values as readable expressions instead of raw AST repr - **fixed** — 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 ##### dbt-core 1.12.0-rc2 - July 09, 2026 ###### Breaking Changes - Flags introduced in 1.9 and 1.10 defaults to true ([#12713](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/15156)) ###### Fixes - Reconstruct unrendered config kwarg values as readable expressions instead of raw AST repr ([#15336](https://github.com/dbt-labs/dbt-core/issues/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 ([#](https://github.com/dbt-labs/dbt-core/issues/)) ###### Contributors - [@MichelleArk](https://github.com/MichelleArk) ([#15336](https://github.com/dbt-labs/dbt-core/issues/15336)) - [@aahel](https://github.com/aahel) ([#15156](https://github.com/dbt-labs/dbt-core/issues/15156)) - [@itsnamangoyal](https://github.com/itsnamangoyal) ([#12713](https://github.com/dbt-labs/dbt-core/issues/12713), [#](https://github.com/dbt-labs/dbt-core/issues/)) ### v1.12.0rc1 — dbt-core v1.12.0rc1 - Date: 2026-07-07 - Version: v1.12.0rc1 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0rc1 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.12.0rc1 - Labels: Pre-release - **removed** — Remove the experimental dbt login command and the bundled dbt-state plugin, including --manage-state/manage_state and the DBT_ENGINE_STATE_* env vars - **changed** — 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 - **fixed** — Fix intermittent "references a model that does not exist" parsing error when unit testing versioned models, caused by non-deterministic filesystem parse order - **changed** — Bump the minimum dbt-core-experimental-parser to 2.0.0a4 ##### 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](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/11139)) ###### Dependencies - Bump the minimum `dbt-core-experimental-parser` to `2.0.0a3` ([#15391](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/NA)) - Bump the minimum `dbt-core-experimental-parser` to `2.0.0a4` ([#13065](https://github.com/dbt-labs/dbt-core/issues/13065)) ###### Contributors - [@ajnovice](https://github.com/ajnovice) ([#12885](https://github.com/dbt-labs/dbt-core/issues/12885), [#NA](https://github.com/dbt-labs/dbt-core/issues/NA)) - [@itsnamangoyal](https://github.com/itsnamangoyal) ([#NA](https://github.com/dbt-labs/dbt-core/issues/NA), [#11139](https://github.com/dbt-labs/dbt-core/issues/11139)) - [@tauhid621](https://github.com/tauhid621) ([#15391](https://github.com/dbt-labs/dbt-core/issues/15391), [#13065](https://github.com/dbt-labs/dbt-core/issues/13065)) ### v2.0.0-alpha.4 - Date: 2026-07-06 - Version: v2.0.0-alpha.4 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.4 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v2.0.0-alpha.4 - Labels: Pre-release - **added** — DuckDB read-write support for Horizon and Unity (Iceberg REST) catalogs via duckdb 1.5.4 with write-compat ATTACH options - **added** — DuckDB catalogs.yml v2 with DuckLake, Iceberg REST, and local filesystem catalogs with catalog-aware materializations - **added** — Redshift database context switching per node via USE / RESET USE when datasharing is enabled - **added** — 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 - **added** — dbt-agent guidance for propagating source column type changes downstream to all models - **added** — dbt-agent guidance for staging column inference versus source reuse, missing-column handling, and time-bounded seed+JOIN patterns - **added** — Mandatory --full-refresh after surrogate_key rename in dbt-agent - **added** — dbt-agent extracted into dedicated crate with prompts, runner, integration tests, and benchmark scripts - **added** — GET /api/v1/identity endpoint in dbt-docs-server - **added** — Compiled code toggle in the Code tab of dbt-docs-server - **added** — Row count stat display in the model list view - **changed** — Bundled dbt-docs-v2 UI updated to 862e5855aaa42463d3b5c34f4b53622ca32721fb - **fixed** — 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 - **fixed** — SparkConnect auth profiles have clear internal representation without requiring a user field - **fixed** — Accept comma-separated ref()/source() calls within a single depends_on list item and tolerate trailing } after Jinja expressions in descriptions - **fixed** — dbt agent build YAML parse error surfacing via OTEL probe and panic fix on wrapped-negative line numbers - **fixed** — Databricks incremental run SQL error when using custom PK constraints by correctly exposing constraint attributes to Jinja templates - **fixed** — Panic when query result contains a map with non-scalar struct values by adding StructConverter to dbt-agate - **fixed** — unique_id parity with dbt-core for singular and schema tests - **fixed** — Ambiguous ref panic for cross-project publication models when used as v2 parser - **fixed** — Operation nodes missing alias, database, schema, tags, config, and index in manifest ##### 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>. 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](https://github.com/dbt-labs/dbt-core/issues/11381)) - [dbt-core] state:modified no longer flags seeds whose meta config is set as environment-aware Jinja in dbt_project.yml. ([#15286](https://github.com/dbt-labs/dbt-core/issues/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](https://github.com/dbt-labs/dbt-core/issues/15286)) - [ _[Truncated at 4000 characters — full notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.4]_ ### v1.11.12 — dbt-core v1.11.12 - Date: 2026-07-01 - Version: v1.11.12 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.11.12 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.11.12 - **fixed** — 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 ##### 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](https://github.com/dbt-labs/dbt-core/issues/13016)) ###### Contributors - [@tauhid621](https://github.com/tauhid621) ([#13016](https://github.com/dbt-labs/dbt-core/issues/13016)) ### v2.0.0-alpha.3 - Date: 2026-06-29 - Version: v2.0.0-alpha.3 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.3 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v2.0.0-alpha.3 - Labels: Pre-release - **added** — For versioned models, automatically create a view at the unsuffixed model name pointing to the latest version, configurable via latest_version_pointer config - **added** — Redshift: use SHOW GRANTS ON TABLE for grants when datasharing is enabled - **added** — 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 - **added** — Extension now uses the dbt login command when signing in - **added** — Support catalog federation between Snowflake Horizon and Unity Catalog - **added** — Added support for Javascript UDFs in Snowflake and BigQuery - **added** — Setup catalogs.yml to provide json schemas - **added** — Add dbt man --schema catalogs to export a type-discriminated JSON schema for catalogs.yml v2 - **added** — Issue compatibility warnings for package versions based on manual compatibility verification when available in Package Hub - **added** — Support the insert_overwrite incremental strategy for the Spark adapter - **added** — Honor per-node +compute config on unit_test nodes to override global --compute flag - **added** — Support the reservation config for BigQuery, allowing query jobs to be routed to a specific BigQuery reservation at profile, project, or model level - **added** — Allow the source application identifier sent during OAuth login to be configured via AuthChainBuilder or DBT_OAUTH_SOURCE_APP environment variable - **added** — Expose has_dbt_state on GET /api/v1/capabilities - **changed** — Support the latest duckdb version 1.5.4 - **fixed** — BigQuery source freshness now correctly handles dotted project IDs by using relation component accessors instead of splitting on '.' - **fixed** — Always quote materialized view path in Redshift - **fixed** — --write-index no longer produces catalog.json as an unintended side effect - **fixed** — Discover source() calls inside conditional branches that evaluate to false during parse render ##### 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](https://github.com/dbt-labs/dbt-core/issues/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] _[Truncated at 4000 characters — full notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.3]_ ### v2.0.0-alpha.2 - Date: 2026-06-18 - Version: v2.0.0-alpha.2 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.2 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v2.0.0-alpha.2 - Labels: Pre-release - **added** — Add --empty support in seed command - **added** — Homebrew distribution: install the dbt Fusion CLI with brew install dbt from the official tap - **added** — 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 - **added** — 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 - **added** — Redshift: use SHOW TABLES FROM SCHEMA for cross-database source freshness when datasharing is enabled - **added** — Emit project-wide catalogs count on the parse-time ResourceCounts telemetry event - **added** — Fabric supports dbt init - **added** — Interactive dbt login honors the DBT_OAUTH_SCOPES env var to request additional OAuth scopes - **added** — dbt docs serve reports actual login status in GET /api/v1/distribution - **added** — Add Workload Identity Federation auth for BigQuery via Microsoft Entra - **fixed** — Restore token-first dispatch for Databricks OAuth so dbt Studio's U2M flow works correctly - **fixed** — equals macro now uses IS NOT DISTINCT FROM clause for comparison - **fixed** — Update try_or_compiler_error to match dbt-core - **fixed** — 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 - **fixed** — Fix /api/v1/search returning 500 when dbt_rt.run_results parquet is absent - **fixed** — 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 - **fixed** — source freshness on_run_end hooks can now access result.node (unique_id, relation_name, etc.) - **fixed** — dbt State auth no longer caches the organization ID; it is always resolved from the live token scope - **fixed** — 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 - **fixed** — 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 ##### 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-pa _[Truncated at 4000 characters — full notes: https://github.com/dbt-labs/dbt-core/releases/tag/v2.0.0-alpha.2]_ ### v1.12.0b3 — dbt-core v1.12.0b3 - Date: 2026-06-15 - Version: v1.12.0b3 - Original notes: https://github.com/dbt-labs/dbt-core/releases/tag/v1.12.0b3 - Permalink: https://whatsnew.fyi/product/dbt-core/releases/v1.12.0b3 - Labels: Pre-release - **fixed** — Allow for setting of OSI documents directory as project config - **fixed** — Support lowercase "osi" directory - **added** — 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** — 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 ##### dbt-core 1.12.0-b3 - June 15, 2026 ###### Fixes - Allow for setting of OSI documents directory as project config ([#13088](https://github.com/dbt-labs/dbt-core/issues/13088)) - Support lowercase "osi" directory ([#13087](https://github.com/dbt-labs/dbt-core/issues/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. ([#](https://github.com/dbt-labs/dbt-core/issues/)) - 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](https://github.com/dbt-labs/dbt-core/issues/15210)) ###### Under the Hood - sync JSON schemas from dbt-fusion ([#N/A](https://github.com/dbt-labs/dbt-core/issues/N/A)) ###### Contributors - [@QMalcolm](https://github.com/QMalcolm) ([#13088](https://github.com/dbt-labs/dbt-core/issues/13088), [#13087](https://github.com/dbt-labs/dbt-core/issues/13087)) - [@aahel](https://github.com/aahel) ([#15210](https://github.com/dbt-labs/dbt-core/issues/15210)) - [@fa-assistant](https://github.com/fa-assistant) ([#N/A](https://github.com/dbt-labs/dbt-core/issues/N/A)) - [@sriramr98](https://github.com/sriramr98) ([#](https://github.com/dbt-labs/dbt-core/issues/))