dbt-core v1.12.5 was published on 15 September 2026. The patch makes the semantic layer Dimension type satisfy the metricflow-semantic-interfaces protocol by adding an optional datatype field, and it raises the metricflow install floor from 0.211.0 to 0.213.0. The other published note is packaging: the PyPI description now carries a banner that points readers at the v2 install docs.
The full release notes and downloads are on the GitHub release page.
Datatype on the Dimension artifact ¶
Semantic manifest classes for this line live in core/dbt/artifacts/resources/v1/semantic_model.py. Dimension is the object dbt-core stores for one dimension on a semantic model. metricflow-semantic-interfaces is the shared protocol those objects have to match. MetricFlow 0.213.0, published on 10 September 2026, added a DataType field on that protocol. A Dimension built by dbt-core 1.12.4 has no such attribute, so it fails the structural check against the interface shipped with MetricFlow 0.213.0.
v1.12.5 imports DataType from metricflow_semantic_interfaces.type_enums and appends one field to Dimension:
datatype: Optional[DataType] = None
The field follows expr, metadata, and config. The default is None, so constructors that omit datatype still build. YAML schema, CLI flags, and rendered SQL are untouched in this diff. Readers of dimension.datatype get None until another writer sets the value. Protocol checks now see the field the 0.213.0 interface asks for.
Projects with no semantic models still install this wheel, and the new field stays idle. They meet the dependency floor at install time.
The release notes credit itsnamangoyal for the protocol fix.
MetricFlow floor is now 0.213.0 ¶
core/pyproject.toml declares the Python dependency. The requirement moved from metricflow>=0.211.0,<1.0 to metricflow>=0.213.0,<1.0. The upper bound remains <1.0. The floor moved so the installed interfaces package actually exports DataType. The import in semantic_model.py is unconditional. A metricflow install below 0.213.0 fails while that module loads, because DataType is absent from metricflow_semantic_interfaces.type_enums. The failure happens at import.
The pin is on the metricflow distribution. packages.yml does not list it, and dbt deps does not update it. Pip, uv, and Poetry apply the pin while resolving dbt-core. A clean install with no extra constraints takes metricflow 0.213.0 or a newer 0.x release below 1.0. A constraints file, uv.lock, poetry.lock, or hashed requirements file that still names 0.211 or 0.212 fails resolution. Worker images and CI jobs that install from those locks fail at image build until the pin moves.
v1.12.5 lines the artifact class up with MetricFlow 0.213.0. Environments that kept an older metricflow beside dbt-core 1.12.4 have to raise that pin. MetricFlow 0.213.0 is a separate release, and its notes sit outside this changelog. This diff leaves rendered metric SQL alone. Any SQL change after the bump would come from the MetricFlow library the new floor allows, so read that release before raising a held pin.
Banner on the PyPI description ¶
The last item is package page copy. The banner was inserted at the top of core/README.md, the file PyPI serves as the dbt-core description. It says v2 is published as two distributions. The banner names pip install dbt for the default distribution and describes that build as the full feature set. It names pip install dbt-oss for the subset limited to Apache 2 open source code. The banner says a v2 install can omit the separate pip install dbt-<adapter> step, and that the dbt-core name on PyPI will be deprecated over the long term. It points readers at the v2 install docs.
dbt parse, dbt build, and dbt run are unchanged, and this tag adds no CLI warning. dbt-core 1.12.5 still installs. The text matters to PyPI readers and to jobs that scrape the README. Teams that stay on the 1.12 line keep the current install command. New install docs are pointed at pip install dbt or pip install dbt-oss. tauhid621 is the author listed for the banner.
Upgrade notes ¶
Plan on a Python dependency bump. Semantic project files can stay as they are.
- Raise any direct pin of
metricflowto at least 0.213.0 and keep it below 1.0, matchingmetricflow>=0.213.0,<1.0incore/pyproject.toml. - Rebuild
uv.lock,poetry.lock, pip constraint files, and hashed requirements before an image installsdbt-core1.12.5. - Leave
packages.ymlunchanged.dbt depswill not move the Python package. - Leave semantic YAML unchanged. The
datatypefield onDimensiondefaults toNone. - Profile keys, env vars, and CLI flags are unchanged. The PyPI banner does not block install of this tag.
Where to get it ¶
The release tag page and the source repository are different GitHub paths.
- Release notes and downloads: GitHub release page
- Source repository: project repository
- Tag:
v1.12.5