dbt-bouncer
Configure and enforce conventions for your dbt project.
Documentation
All documentation can be found on dbt-bouncer documentation website.
Aims
dbt-bouncer aims to:
- Provide a 100% configurable way to enforce conventions in a dbt project.
- Be as fast as possible, running checks against dbt artifacts.
- Be as easy as possible to use, with a simple config file written in
YAMLorTOML. - Be as flexible as possible, allowing checks to be written in Python.
- Provide immediate feedback when run as a pre-commit hook or as part of a CI pipeline.
Features
- Presets — start with a bundled
minimal,standardorstrictconfig, with no config file to write. Rundbt-bouncer run --preset strict. - Baselines — adopt strict checks on an existing project and fail only on new failures. Record today's failures with
dbt-bouncer baseline, or compare against a previous set of artifacts withdbt-bouncer run --state ./base-target. - Discovery — browse every check with
dbt-bouncer list, read one check in detail withdbt-bouncer explain check_model_names, or open the dashboard withdbt-bouncer studio. - Config linting — catch mistakes in your config before a run with
dbt-bouncer validate. - AI agent integration — expose dbt-bouncer to Claude Code, Cursor and other agents over the Model Context Protocol with
dbt-bouncer mcp. - CI-friendly output — write results as
csv,json,junit,sarifortap, and get distinct exit codes for check failures, config errors and artifact errors. - Configuration anywhere — set every
runoption in the config file, on the command line, or through aDBT_BOUNCER_*environment variable.
See the CLI reference for all subcommands and options.
TLDR
-
Install
dbt-bouncer:pip install dbt-bouncer
-
dbt-bouncerrequires amanifest.jsonfile. If not already present, run:dbt parse -
Create a
dbt-bouncer.ymlconfig file:dbt-bouncer init -
Run
dbt-bouncer:$ dbt-bouncer run Running dbt-bouncer (X.X.X)... Loaded config from dbt-bouncer.yml... Validating conf... Parsed artifacts for 'dbt_bouncer_test_project' ╭──────────────────┬─────────────────┬───────╮ │ Artifact │ Category │ Count │ ├──────────────────┼─────────────────┼───────┤ │ manifest.json │ Exposures │ 2 │ │ │ Macros │ 3 │ │ │ Nodes │ 12 │ │ │ Seeds │ 3 │ │ │ Semantic Models │ 1 │ │ │ Snapshots │ 2 │ │ │ Sources │ 4 │ │ │ Tests │ 36 │ │ │ Unit Tests │ 3 │ │ catalog.json │ Nodes │ 13 │ │ │ Sources │ 0 │ │ run_results.json │ Results │ 51 │ ╰──────────────────┴─────────────────┴───────╯ Assembled 463 checks, running... Running checks... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% `dbt-bouncer` failed. Please see below for more details or run `dbt-bouncer` with the `-v` flag. Failed checks ╭────────────────────────────────────┬────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Check name │ Severity │ Failure message │ ├────────────────────────────────────┼────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ check_model_names:48:orders │ ERROR │ Models in the staging layer should always start with "stg_". - `orders` does not match the supplied regex `^stg_`. │ ╰────────────────────────────────────┴────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ Done. SUCCESS=462 WARN=0 ERROR=1
Reporting bugs and contributing code
- Want to report a bug or request a feature? Let us know and open an issue.
- Want to help us build
dbt-bouncer? Check out the Contributing Guide.
Code of Conduct
Everyone interacting in dbt-bouncer's codebase, issue trackers, chat rooms, and mailing lists is expected to follow the Code of Conduct.
Release files for dbt-bouncer 4.0.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_bouncer-4.0.0.tar.gz | 158.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_bouncer-4.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 362.8 kB
Release files / dbt_bouncer-4.0.0.tar.gz
| Download URL | dbt_bouncer-4.0.0.tar.gz |
|---|---|
| Size | 158.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
789799c669d92274610b2711a47b42c73ede8d557b04564c1ed5d4b607bc6608
|
|
BLAKE2b-256 checksum How to use checksums |
a8a0d386862285fb27cc9653a6d704baa7ff92bbbbc33b1291a1d21b8097163e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 22, 2026.
Transparency logRelease files / dbt_bouncer-4.0.0-py3-none-any.whl
| Download URL | dbt_bouncer-4.0.0-py3-none-any.whl |
|---|---|
| Size | 204.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6e4c336e86baa3f34201eef1329b6867d5f941ae03bc636eda23302b64952714
|
|
BLAKE2b-256 checksum How to use checksums |
9c83b98f205a7800106c0fb619cd39365490a26f46d984eac9c0c3953ac01dfd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 22, 2026.
Transparency log