Skip to main content

About dbt State Preview

dbt State makes dbt smarter about what to build. Instead of rebuilding every node on every run, dbt reuses nodes by cloning from another location or skipping a rebuild when the logic and data haven't changed.

With dbt State, dbt first compares the logic and data of each node to previous builds across multiple environments on every run — whether orchestrated in the dbt platform, through your own orchestrator, or in development. If the logic is the same and the data is still fresh, dbt reuses an existing object. It will either clone an existing node from elsewhere, or skip executing a model that already exists, rather than building it anew. Additionally, it will automatically defer to production state without the need to manually set the --defer or --state flags.

dbt State can reuse all node types that create relations in the database (such as models, snapshots, seeds) and data tests.

dbt State works with dbt Core, the dbt platform, and dbt Fusion engine, across all environments and orchestrators, making it a flexible approach regardless of how you run dbt.

Benefits

dbt State delivers efficiency gains across both production and development environments:

  • Fresher data, lower costs — Nodes only rebuild when the result would be different (new data or code changes), reducing warehouse compute while keeping production data fresh.
  • Faster iteration cycles — In development, dbt automatically clones selected nodes from production whenever possible, so you spend less time waiting for builds and more time writing code.
  • Smarter than standard deferral — Unlike standard deferral, which always builds selected nodes and only defers unselected upstream references, dbt State decides whether transformations need to run at all, or whether an existing table can simply be cloned.

How dbt State works

When you run a command like dbt build --select +my_model, dbt State evaluates each selected node and applies the most efficient approach it can:

  • Reuse node from same schema (skip) — dbt checks whether the object already exists in the target schema, its logic hasn't changed, and its upstream parents haven't received fresh data beyond the configured lag_tolerance. If all conditions are met, dbt skips the node entirely, as if it was never selected. For data tests, if the nodes being tested haven't changed since the last run, the previous test result is reused without re-executing the test query.
  • Reuse node from different schema (clone) — If the same object exists with matching logic and fresh data, dbt State clones it. The node is marked as Reused at a fraction of the compute cost.
  • Normal build — If reuse is not possible, dbt builds the node as normal, automatically deferring any unselected upstream nodes.

Without dbt State, every selected node rebuilds on every run regardless of whether anything has changed.

For the full list of available configs, see dbt State configs.

Supported data warehouses

dbt State is supported on the following data warehouses:

  • Snowflake
  • Databricks
  • BigQuery
  • Redshift

More data warehouses are on the roadmap. If you're using another data warehouse and are interested in dbt State, let us know.

Signing up for dbt State

When you sign up for dbt State, you'll choose one of two paths:

  • dbt platform account — dbt State is connected to your existing dbt platform account. Your dbt State credentials are the same as your platform credentials, and dbt State has access to your platform environments and jobs.
  • Standalone account (app.state.dbt.com) — A standalone dbt State account is independent of any dbt platform account. You manage dbt State credentials separately, and dbt State has no visibility into your platform environments or jobs.

A standalone account makes sense if you:

  • Don't have a dbt platform account
  • Don't have admin permissions to enable dbt State in your dbt platform account
  • Want to test dbt State without connecting it to your dbt platform account yet

FAQs

What happened to state-aware orchestration?
How is dbt State different from using state:modified?
Does dbt State support incremental models?
How is data stored in dbt State?
Where does the metadata about last updated timestamp come from?
How does dbt State calculate that a model has changed?
What happens if dbt State servers fail?
What if I work on multiple projects that each use their own dbt State?
What if my prod environment isn't named prod?

Was this page helpful?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

0
Loading