dbt Core Updates & Release Notes
53 updates curated from 2 sources by the Releasebot Team. Last updated: Aug 14, 2026
- Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.6.19
dbt Core 1.6.19 warns on deprecated versions and drops Python 3.8 support and testing.
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
@gshank (#10861)
@peterallenwebb (#10861)
Original source - Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.5.12
dbt Core 1.5.12 warns on deprecated versions and drops Python 3.8 support.
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
@gshank (#10861)
@peterallenwebb (#10861)
Original source All of your release notes in one feed
Join Releasebot and get updates from dbt and hundreds of other software products.
- Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.4.10
dbt Core ships 1.4.10 with deprecation warnings for older dbt versions and drops Python 3.8 support.
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
@ash2shukla (#15964)
Original source - Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.3.8
dbt Core 1.3.8 adds deprecation warnings for older dbt versions and fixes packaging and semver comparison logic.
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
- @ash2shukla (#15964)
- Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.2.7
dbt Core 1.2.7 warns on deprecated versions and fixes logging, semver comparisons, packaging, and seed handling.
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
- @ash2shukla (#15964)
Similar to dbt Core with recent updates:
- Claude updates125 release notes · Latest Aug 13, 2026
- Snowflake updates221 release notes · Latest Aug 14, 2026
- dbt Adapters updates10 release notes · Latest Nov 12, 2025
- Claude Code updates417 release notes · Latest Aug 15, 2026
- Anthropic updates57 release notes · Latest Aug 14, 2026
- Gemini updates389 release notes · Latest Aug 13, 2026
- Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 14, 2026
dbt-core v1.1.6
dbt Core 1.1.6 warns on deprecated versions and fixes semver, JSON logging, and seed handling.
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
- @ash2shukla (#15964)
- Aug 14, 2026
- Date parsed from source:Aug 14, 2026
- First seen by Releasebot:Aug 13, 2026
- Modified by Releasebot:Aug 14, 2026
dbt-core v1.8.10
dbt Core 1.8.10 warns users when they are using a deprecated dbt version.
dbt-core 1.8.10 - August 14, 2026
Features
Warn users if they are using a deprecated dbt version (#15964)
Original source - Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
dbt-core v1.12.2
dbt Core 1.12.2 warns on deprecated versions and fixes Databricks config validation warnings.
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
@ash2shukla (#15964)
@fa-assistant (#N/A)
@sd-db (#N/A)
Original source - Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
dbt-core v1.12.1
dbt Core adds OpenTelemetry span instrumentation for node and hook execution, fixes inflated dbt build node counts with unit tests, makes unit test model resolution deterministic, and reparses adapter macros after Fusion manifests.
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
@aiguofer (#15527)
@itsnamangoyal (#11139)
@sfc-gh-ppruett (#11367)
@sfc-gh-vguttha (#11367)
@tauhid621 (#11185, #11367, #)
Original source - Aug 12, 2026
- Date parsed from source:Aug 12, 2026
- First seen by Releasebot:Aug 13, 2026
dbt-core v1.11.13
dbt Core 1.11.13 fixes flaky parsing issues in unit tests and versioned models, removes false duplicate test errors, and warns users on deprecated dbt versions. It also updates Docker image dependencies to restore release build reliability.
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
- @ajnovice (#NA)
- @ash2shukla (#15964)
- @itsnamangoyal (#11139, #, #11139)
- Aug 10, 2026
- Date parsed from source:Aug 10, 2026
- First seen by Releasebot:Aug 11, 2026
v2.0.0-beta.1
dbt Core ships 2.0.0-beta.1 with broader adapter support, faster dbt State and retry behavior, stronger linting and test handling, improved Jinja and manifest parity, and a long list of reliability fixes across BigQuery, Snowflake, Redshift, Databricks, DuckDB, and more.
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 dbt-labs/dbt-adapters@9fce78f
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
@@tanukifk
Original source
@AndreaBozzo (#15280, #15280)
@ChenyuLInx
@HannanNaeem
@Pavan19047 (#15385)
@VersusFacit
@aahel
@aiguofer
@ajhlee-dbt (#15544, #13600, #14631, #14635, #9923, #15611)
@akbog (#15514, #12989)
@arijitroy003 (#15585)
@ash2shukla
@b-per
@benhurstephen (#15590)
@chayac
@chrispasakarnis
@colin-rogers-dbt
@debrin-og
@eliasdefaria
@erindru
@itsannbat (##14572, #15499, #14468, #15374, #14454)
@izeigerman
@j-clemons (#15569, #15260)
@jcserv
@joshuataylor
@katieclaiborne-duet
@kczimm
@kendru
@koletzilla (#14585)
@lottaquestions (#15756, #14455)
@mach-kernel (#15169, #14570)
@maxmalkin
@mishamsk
@mvanhorn (#14097)
@priyankahotkar (#15378)
@r-jais
@ragesh-g
@sadboy
@serramatutu (#15494, #15464, #15464, #15661)
@tauhid621
@treysp
@versusfacit (#14615)
@vgapeyev
@xuliangs (#15467)
@yuwtennis
@zhong
@zhong-xu
@zozo123 (#15323) - Aug 7, 2026
- Date parsed from source:Aug 7, 2026
- First seen by Releasebot:Aug 9, 2026
- August 2026
- No date parsed from source.
- First seen by Releasebot:Aug 5, 2026
Docs changes
dbt Core improves the docs experience with simpler v1 and v2 navigation, clearer Core and licensing guidance, refreshed adapter and Fusion availability info, and new availability badges that make it easier to see what applies at a glance.
To simplify the docs experience, clarify availability, and make it easier to find what applies to you, we made the following changes to the docs site:
tl;dr: The docs are now organized around v1 and v2 for simplified docs versioning and navigation. We've clarified dbt Core and licensing, reorganized v2 content, and refreshed adapter and Fusion availability guidance. If you notice anything off or have any feedback, we'd love to hear it! Open up a docs issue here.
Changes to the docs site
- Enhancement: We've updated the version switcher on the docs site. The version switcher now just shows v1 and v2. v2 is the current generation of dbt, built on Rust for a faster, richer dev experience; v1 is the Python-based generation of dbt. Refer to dbt versions for what's different between v1 and v2.
- New: We've added a dedicated page explaining dbt Core and its distributions. dbt Core 2.0 is the Rust-based open-source runtime. dbt Core v1.x is the Python-based runtime. Refer to About dbt Core for more info.
- New: Licensing across dbt Core now has its own page, so you can see what applies to your setup in one place. Refer to dbt licensing.
- Enhancement: Static analysis now lives with the rest of your build docs and available in v2.
- Enhancement: The Fusion upgrade readiness checklist now sits right next to the v2 upgrade guide, and the networking and telemetry references moved in local install and Reference.
- Enhancement: More adapters are closer to general availability — Snowflake, BigQuery, Databricks, and Redshift are now in Preview, and Spark and DuckDB are in Beta. Refer to Adapter lifecycles for the current status of each adapter.
- Enhancement: Simplified and clarified the Fusion feature tables to make it easier to see what's available and how to get it.
- New: Added availability badges to pages and sections so you can quickly see what applies to your setup at a glance.
- Aug 1, 2026
- Date parsed from source:Aug 1, 2026
- First seen by Releasebot:Aug 4, 2026
- Modified by Releasebot:Aug 15, 2026
August 2026
dbt Core adds Analyst read GA, richer job run timing views, and broader Semantic Layer and Cost Insights capabilities. It also expands Redshift external OAuth support, improves SCIM error details, and tightens GraphQL complexity handling for a more secure, easier-to-manage experience.
New: The Analyst read permission set is now generally available (GA) for Enterprise plans. Analyst read is a project-level permission set that provides read-only access to analyze dbt models and project resources, and read-only users can connect to analysis features such as the dbt MCP server.
Enhancement: Cost Insights now supports cost attribution for Snowflake Adaptive Warehouses. For setup details, refer to Assign required permissions.
New: The Model timing tab in job run details has been redesigned with a richer, scalable view that includes metric tiles, an execution timeline with grouping and highlight controls, a concurrency-over-time chart, and a searchable resource details table.
New: Semantic Layer development connections to Redshift now support external OAuth using Okta or Microsoft Entra with AWS IAM Identity Center.
Enhancement: System for Cross-domain Identity Management (SCIM) API errors for seat or licensing failures now include email addresses so you can identify which users are blocking provisioning.
Behavior change: Semantic Layer GraphQL queries that exceed the complexity limit of 200,000 now return an error instead of completing with a warning. If you hit this error, request fewer fields, use pagination, narrow your filters, or split the query into smaller ones.
Enhancement: The Analyst read permission set now includes read access to Connections (account and project), Projects, Git repository settings, Semantic Layer configuration, Environments, custom environment variables, and Catalog metadata. Analysts can view that configuration without assigning additional permission sets, once added to a group with Analyst read.
- Jul 20, 2026
- Date parsed from source:Jul 20, 2026
- First seen by Releasebot:Jul 21, 2026
v2.0.0-alpha.5
dbt Core ships a broad alpha update with major parity and stability improvements, including catalog and deferral enhancements, stronger state and test handling, expanded adapter support, and a long list of fixes that harden parsing, manifests, and docs tooling.
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
@@koletzilla
Original source
@HannanNaeem
@Thrasi
@VersusFacit
@aahel
@aiguofer
@ajhlee-dbt
@ajnovice
@akbog (#15477)
@alexander-bogdanowicz
@ashtonwalden
@b-per
@claude
@dataders
@debrin-og
@eliasdefaria
@itsnamangoyal
@j-clemons (#14542)
@jasonlin45
@jcserv
@kczimm
@lottaquestions
@mach-kernel
@r-jais (#15249)
@ragesh-g
@sadboy
@vgapeyev
@xuliangs
Curated by the Releasebot team
Releasebot is an aggregator of official product update announcements from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.