dbt Core v1.12.0 was published on July 16, 2026. The main operational change is the removal of experimental state management, while the release also adds controls for seed table creation, versioned model routing, and private package retrieval.
The full release notes and downloads are on the GitHub release page.
Seed and model routing controls ¶
The dbt seed --empty option creates seed tables without loading their data. That separates relation creation from ingestion, which is useful when a deployment job needs to validate table creation or permissions without moving the seed contents. It also gives CI pipelines a smaller operation when the table shape matters but the rows do not.
This option does not replace a normal seed load. A pipeline that uses it must still schedule the real data load when downstream models depend on seed rows. Operators should also distinguish an intentionally empty seed from an empty result caused by a failed input or an incorrect selection.
Versioned models gain an optional latest version pointer. The global latest_version_pointer_enabled_by_default flag enables the behavior by default, while the per model latest_version_pointer configuration controls it for one model. For a model such as dim_customers, dbt can maintain the familiar name as the pointer to the current version.
That can reduce changes in downstream queries when a new model version becomes current. It also changes the set of relations that dbt creates. Teams with naming checks, grants, or cleanup jobs should account for the pointer before enabling it broadly.
Private package resolution ¶
dbt Core now supports private Git packages declared in packages.yml and dependencies.yml. When configured, dbt resolves the package URL from an environment variable. If that value is absent, it constructs an SSH URL instead.
This makes package retrieval easier to fit into CI secret injection. The fallback still needs working SSH credentials and host trust on the runner. A missing environment value can therefore move package installation onto a different authentication path, so jobs should test both the preferred URL resolution and the fallback behavior.
The release notes do not specify a fixed environment variable name. Keep the configured value in the deployment secret store, and avoid writing resolved credentials into generated artifacts or job logs.
Upgrade notes ¶
The breaking change is the removal of the experimental dbt login command and the bundled dbt-state plugin. The related --manage-state option, manage_state configuration, and DBT_ENGINE_STATE_* environment variables are also removed. Any wrapper, image, or pipeline that uses those interfaces must stop relying on them before moving to v1.12.0.
The release also changes flags introduced in versions 1.9 and 1.10 so that they default to true. The summary does not enumerate those flags. Review issue 12713 and set explicit values where a pipeline depends on the previous behavior. Explicit configuration is safer than inheriting a changed default across development and production.
These two changes deserve the first upgrade checks. One removes interfaces entirely, while the other can alter behavior without a configuration diff. Run the existing parse, seed, and model selection checks against the new binary before updating shared runners.
Where to get it ¶
- dbt Core v1.12.0 release page
- dbt Core repository
- Tag:
v1.12.0