dbt-features
Feature catalog for dbt projects, built for ML teams.
Install
pip install dbt-features
For warehouse enrichment (freshness, row counts, null %), install the extra for your warehouse:
pip install 'dbt-features[duckdb]' # local / dbt-duckdb
pip install 'dbt-features[postgres]' # Postgres
pip install 'dbt-features[redshift]' # Redshift
pip install 'dbt-features[snowflake]' # Snowflake
pip install 'dbt-features[bigquery]' # BigQuery
Requires Python 3.10+. The base install does not depend on dbt-core.
Quickstart
Try it with no setup - bundled sample data, served on a free port:
dbt-features demo
On your dbt project:
dbt parse
dbt-features build --connection my_profile --output ./catalog
dbt-features serve --output ./catalog
In CI, gate on the metadata with the linter:
dbt-features lint --strict # fail on errors and warnings
dbt-features lint --entity-catalog entities.yml # also enforce entity names
For production (with type inference and correct schemas):
dbt docs generate # populates catalog.json with column types
dbt-features build \
--manifest target/manifest.json \
--catalog target/catalog.json \
--connection my_profile --target prod \
--output ./catalog
See Production setup for details.
What it does
- Reads your dbt manifest and finds models marked
is_feature_table: true. - Renders a static HTML site: feature groups, features, lineage, ML model consumers.
- With
--connection, pulls freshness, row counts, null %, and cardinality from the warehouse.
Read-only. No backend, no database.
Python API
Downstream tools can build on the parsed catalog instead of re-reading
manifest.json:
from dbt_features import parse_project
catalog = parse_project("path/to/dbt/project")
for group in catalog.feature_groups:
for feature in group.features:
print(feature.name, feature.consumers_derived, feature.consumers_declared)
Stability: parse_project, Catalog, FeatureGroup, Feature,
ExposureInfo, and LineageRef (all re-exported from dbt_features) are the
public, provisional surface. They are intended to be stable but are not
yet semver-locked — the resolved data model is still settling, so expect only
additive changes, called out in the changelog, until the surface is
frozen. Anything prefixed _, the renderer/enrichment internals, and the
HTML layout are internal and may change at any time. Feature.used_by is
deprecated in favour of consumers_derived / consumers_declared and is
slated for removal.
Docs
- Metadata schema - how to mark a model as a feature table
- Warehouse enrichment - freshness, row counts, profile examples
- dbt package - compile-time validation
- Deploying the catalog - GitHub Pages, S3, Netlify
Development
git clone https://github.com/gauthierpiarrette/dbt-features
cd dbt-features
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
License
Apache 2.0. Not affiliated with dbt Labs.
Metadata
Release files for dbt-features 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dbt_features-0.6.0.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_features-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.4 MB
Release files / dbt_features-0.6.0.tar.gz
| Download URL | dbt_features-0.6.0.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f72023b1a89f6efc856ea409920d4b3f6f4add7060b439684b4bddb0055a0dd0
|
|
BLAKE2b-256 checksum How to use checksums |
20cf94f7d522bbd6ff3fb3c5dbe585cd324d1dc743e8ffdf4ff9320de3e53468
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 2, 2026.
Transparency logRelease files / dbt_features-0.6.0-py3-none-any.whl
| Download URL | dbt_features-0.6.0-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d2d048f0f51f6bf7ebdefd5ac67c1893122772e12a2a04b135663d9ed5276894
|
|
BLAKE2b-256 checksum How to use checksums |
872cfa166f605b462f5b331188056c121566c341ca3ccaa76009d5806862fb65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 2, 2026.
Transparency log