🕵️ dbtective
dbtective is a Rust-powered 'detective' for dbt metadata best practices. As your dbt project grows, keeping metadata consistent and high-quality can become a real challenge.
Explore the full documentation or the possible rules.
dbtective makes it easy to spot and fix common issues, examples:
- Missing descriptions: Does every model and seed have a description?
- Column types: Are all columns explicitly typed?
- Ownership: Do all sources have an owner?
- Naming conventions: Are all marts following your team's naming standards?
We detect and enforce these rules in your cli, prek/pre-commit and CI/CD pipeline, so fast you will barely notice🕵️.
Supports dbt Core v1 and v2, including v2's new Parquet artifacts.
Installation
Pip (pypi)
pip install dbtective
uv
Install as a dev dependency:
uv add dbtective --dev
Homebrew
brew install feliblo/tap/dbtective
GitHub Actions
Run dbtective as part of your CI/CD pipeline. See the GitHub Actions documentation for more details.
- uses: feliblo/dbtective@v0.3.5
with:
config-file: "dbtective.yml"
entry-point: "."
only-manifest: "true"
verbose: "false"
prek/pre-commit
Prerequisite: dbtective is installed via one of the methods above.
We recommend using --only-manifest and --hide-warnings with prek/pre-commit to avoid issues caused by catalog.json mismatches. Eligible catalog rules automatically fall back to manifest data. See the pre-commit documentation and Only Manifest Mode for details.
Add the following to your .pre-commit-config.yaml:
repos:
- repo: https://github.com/feliblo/dbtective
rev: v0.3.5
hooks:
- id: dbtective-run
entry: dbtective run
args: [--only-manifest, --hide-warnings, --auto-parse]
And run:
prek install
prek run --all-files
# or with pre-commit
pre-commit install
pre-commit run --all-files
Shell installer (macOS/Linux)
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/feliblo/dbtective/releases/latest/download/dbtective-installer.sh | sh
PowerShell installer (Windows)
irm https://github.com/feliblo/dbtective/releases/latest/download/dbtective-installer.ps1 | iex
Binary download
Pre-built binaries for Linux, macOS, and Windows are available on the releases page.
Quickstart
All possible rules can be found in the rules documentation. Information about customizing dbtective is shown at the config documentation
-
Generate your config file by answering a few simple questions:
dbtective initThis walks you through picking a config format, and which rules to enable. It then generates a config you can start with. See the CLI reference for details.
-
(Optional) Generate the dbt manifest and catalog files if you haven't done so already. Most dbt commands automatically generate the
manifest.json, but if you want to ensure both files are up to date, run:# dbt v1 dbt compile dbt docs generate # dbt v2 — one command produces everything dbtective needs dbt build --write-index --static-analysis strict
Tip: For local development and pre-commit, use
--only-manifestto skipcatalog.json. Eligible catalog rules will fall back to manifest data automatically.On dbt v2 the Parquet index carries column types itself, so
--only-manifestis not needed. Notedbt docs generatewas removed in v2; usedbt compile --write-catalogif you still want acatalog.json. -
Run
dbtectivein the root of your current directory or specify an entry point if your dbt_project is not located in the root/current drectory.dbtective run dbtective run --entry-point "my_dbt_project"
-
Review the output and fix any issues found.
-
(Optional) Integrate
dbtectiveinto your CI/CD pipeline or pre-commit hooks to automate rules on every commit and/or pull request.
Contributing
We welcome contributions! Whether you're fixing bugs, adding features, or improving documentation, your help makes dbtective better for everyone.
For detailed contributing guidelines, development setup, and coding standards, please see the contributing documentation.
Acknowledgements
This project is heavily inspired by dbt-bouncer. It tries to improve certain aspects of the amazing work by pgoslatara, while giving me an opportunity to improve my Rust. More about the aspects we try to improve is available in our FAQ.
Metadata
Release files for dbtective 0.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| dbtective-0.3.5-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for dbtective-0.3.5-py3-none-win_amd64.whl |
| dbtective-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details for dbtective-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
| dbtective-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details for dbtective-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
| dbtective-0.3.5-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details for dbtective-0.3.5-py3-none-macosx_11_0_arm64.whl |
| dbtective-0.3.5-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details for dbtective-0.3.5-py3-none-macosx_10_12_x86_64.whl |
Total release size: 15.7 MB
Release files / dbtective-0.3.5-py3-none-win_amd64.whl
| Download URL | dbtective-0.3.5-py3-none-win_amd64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2bc63cce1615ec4a510a58fe96abba71c8e34e7229256b8087c2340c55433d20
|
|
BLAKE2b-256 checksum How to use checksums |
6ea957b27851c30e6329ed13787cdfa537f090a9f4baeed1445682e3c6cff9bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dbtective-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | dbtective-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
136a932f0cb93f708b7fb5ac188636d06a4fde50bba6216138d6dc8de0528104
|
|
BLAKE2b-256 checksum How to use checksums |
baf4063f0fc57b880628b3a409230f9fd51d8cda55c68a14eccdd57b0145f6e8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dbtective-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | dbtective-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
71dfe92e74d4d59d4656e5cfdaf6fb8c0fc6cef7a839ffd613a94b36bbb8d956
|
|
BLAKE2b-256 checksum How to use checksums |
4342c98ee8caf9f90b6c43c9615b7a721bad699f8076dcf714f543cbcef4ea4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dbtective-0.3.5-py3-none-macosx_11_0_arm64.whl
| Download URL | dbtective-0.3.5-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
738bd45a9f55c2023b3806e68bfadd987c2818a1e76d3b89a2116e7bfad0a6d4
|
|
BLAKE2b-256 checksum How to use checksums |
12528bb30f85a477482e62e5b4aa3ee719629aa6e5f9263620f504bfc52755a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / dbtective-0.3.5-py3-none-macosx_10_12_x86_64.whl
| Download URL | dbtective-0.3.5-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5b88f02674fdd2f98c695a5285d8fb0af63df31b0d83d6325ae517ba4ab69949
|
|
BLAKE2b-256 checksum How to use checksums |
dcb7c598fdea08d478840fd45bf29de2f35300273cecbc180d1913732aca476c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for dbtective 0.3.5
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.