About behavior changes
A behavior change is a deliberate update to dbt where the same project code and commands produce a different result than before—for example, a new validation error, a changed macro signature, or a breaking change to artifacts or structured logs. It is not a bug fix, a new warning, or a non-breaking addition.
dbt gates these changes behind behavior change flags, so you control when to adopt the new behavior.
The following are examples of behavior changes:
- dbt begins raising a validation error that it didn't previously.
- dbt changes the signature of a built-in macro. Your project has a custom reimplementation of that macro. This could lead to errors, because your custom reimplementation will be passed arguments it cannot accept.
- A dbt adapter renames or removes a method that was previously available on the
{{ adapter }}object in the dbt-Jinja context.
The following are not behavior changes:
- Fixing a bug where the previous behavior was defective, undesirable, or undocumented.
- dbt begins raising a warning that it didn't previously.
- dbt updates the language of human-friendly messages in log events.
Behavior change flags
These flags must be set in the flags dictionary in dbt_project.yml. They configure behaviors closely tied to project code, which means they should be defined in version control and modified through pull or merge requests, with the same testing and peer review.
Flag lifecycle
Behavior change flags go through three phases of development:
- Introduced (disabled by default): dbt adds logic to support both 'old' and 'new' behaviors. The 'new' behavior is gated behind a flag, disabled by default, preserving the old behavior.
- Mature (enabled by default): The default value of the flag is switched to the new behavior by default. You can still preserve the old behavior, but you may see deprecation warnings.
- Removed (generally enabled): The old behavior is removed from the dbt codebase(s). Most flags are supported indefinitely, but there is no committement to supporting them forever. If a flag is removed, there will be significant advanced warning.
Introduced in dbt Core v1
This table outlines which month of the Latest release track in dbt and which version of dbt Core contains the behavior change's introduction (disabled by default) or maturity (enabled by default).
| Loading table... |
Flags reaching maturity
Several behavior change flags on the dbt platform Latest release track are planned to reach maturity on September 1, 2026, switching their default values from false to true. The September 1 date applies only to the dbt platform release tracks. The flags have reached maturity in dbt Core v1.12. For intro dates, refer to the dbt Core behavior changes table.
| Loading table... |
Introduced in Fusion and Core v2
The following flags are specific to Fusion and have no equivalent in dbt Core. They are configured the same way — in the flags: block of dbt_project.yml.
| Loading table... |
Adapter-specific behavior change flags
This table outlines which version of the dbt adapter contains the behavior change's introduction (disabled by default) or maturity (enabled by default).
| Loading table... |
FAQs
Was this page helpful?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.