Skip to main content

dbt-vitals

Its a static analysis and health scoring for dbt projects — the "cargo clippy for dbt."

Unlike a SQL linter (indentation, keyword casing), dbt-vitals looks at your project's structure: dead models, missing tests, duplicated business logic, documentation coverage, and (given warehouse stats) incremental-model candidates. It parses manifest.json / catalog.json — the artifacts dbt already generates — so it needs no warehouse credentials of its own.

Overall Health
76/100
Warnings: 8   Critical: 0   Info: 4

What it checks

Module What it flags Needs catalog.json?
Lineage Dead/unused models, circular dependencies No
Testing Models missing unique/not_null on their likely primary key No
Duplicate Logic Repeated CASE WHEN blocks across models (candidates for a macro) No
Documentation Model/column description coverage % No
Incremental Candidates Large table-materialized models that could be incremental Yes

Local setup

Requires Python 3.9+.

git clone https://github.com/shivah12/dbt-vitals.git
cd dbt-vitals

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

pip install -e ".[dev]"

Run the test suite against the bundled synthetic example project:

pytest

Try the CLI against the bundled example (no real dbt project needed):

dbt-vitals analyze . --manifest examples/sample_manifest.json --catalog examples/sample_catalog.json

Run it against a real dbt project:

cd /path/to/your/dbt/project
dbt compile               # or `dbt docs generate` to also get catalog.json
dbt-vitals analyze .

CLI options

dbt-vitals analyze <target_dir>          # target_dir defaults to "."
  --manifest PATH        # override manifest.json location
  --catalog PATH         # override catalog.json location
  --json                 # machine-readable output
  --ci-comment           # markdown summary for a PR comment
  --fail-under N         # exit 1 if health score < N (CI gating)

CI integration

.github/workflows/dbt-vitals.yml is included — it runs dbt-vitals on every PR, posts the health score as a comment, and fails the build if the score drops below a threshold. Adjust the dbt compile step for your adapter/profile.

Known limitations (by design, for v0.1)

  • Duplicate detection only looks at CASE WHEN expressions, not arbitrary repeated subqueries or joins.
  • Incremental candidates use a fixed row-count threshold, not a real cost/runtime estimate — that would require warehouse-specific query plans.
  • Primary key inference for the testing module is a naming heuristic (id, <model>_id, or any *_id column) since dbt's manifest has no first-class primary key concept.
  • No plugin system yet (warehouse-specific checks) — deliberately deferred, see the original scoping notes for why.

License

MIT — see LICENSE.

Release files for dbt-vitals 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dbt-vitals 0.1.3
File Size Uploaded
dbt_vitals-0.1.3.tar.gz 16.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dbt-vitals 0.1.3
File Interpreter ABI Platform
dbt_vitals-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 33.8 kB

Release files / dbt_vitals-0.1.3.tar.gz

Download URL dbt_vitals-0.1.3.tar.gz
Size 16.3 kB
Tags Source
SHA-256 checksum
How to use checksums
496d6ddef540309c7bfcfde057cee3108817b4303da08b626df12a08987c1d05
BLAKE2b-256 checksum
How to use checksums
e00e6283689ea74b07341002b9063066a40caa126ae96b1dd4f2c9c843151163
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release files / dbt_vitals-0.1.3-py3-none-any.whl

Download URL dbt_vitals-0.1.3-py3-none-any.whl
Size 17.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
232e3bf98c7618f08c6c807a60e0d8746f76c231cd6a9240b9c1088b9f955e8e
BLAKE2b-256 checksum
How to use checksums
cfd434aac09bf89b1ed027a298a7a5ebd8704632de98ebd1c48a3b9f469d9473
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page