dbt-osmosis is a Python CLI and package for dbt development workflows.
It centers on four primary surfaces:
- schema YAML management (
yaml organize,yaml document,yaml refactor) - column-level documentation inheritance across dbt lineage
- ad-hoc SQL compile/run helpers
- an optional Streamlit workbench for interactive dbt SQL development
The repository also ships additional command families for generation, natural-language helpers, schema diffing, SQL linting, and test suggestions.
The Docusaurus site is the canonical reference for the current CLI, configuration model, support matrix, and workflow guides:
- Docs site: https://z3z1ma.github.io/dbt-osmosis/
- CLI reference: https://z3z1ma.github.io/dbt-osmosis/docs/reference/cli
- Configuration guide: https://z3z1ma.github.io/dbt-osmosis/docs/tutorial-yaml/configuration
- Migration guide: https://z3z1ma.github.io/dbt-osmosis/docs/migrating
dbt-osmosis currently targets:
- Python 3.10-3.13
- dbt Core 1.8+
- a dbt adapter version compatible with the dbt Core runtime in that environment
Repository-managed DuckDB fixture coverage is explicitly exercised through the published DuckDB-backed matrix in CI today (1.8-1.10) plus a latest-core compatibility job that runs basedpyright, dbt parse, and the full pytest suite under dbt-core 1.11 with the latest published dbt-duckdb adapter (currently 1.10.1). Package metadata and install paths are not capped at dbt Core 1.10.
Optional extras:
dbt-osmosis[workbench]for the Streamlit workbench and related UI dependenciesdbt-osmosis[openai]for LLM-assisted synthesis and natural-language generation features
With uv:
uv tool install --with="dbt-<adapter>" dbt-osmosisWith pip:
pip install "dbt-osmosis" "dbt-<adapter>"Replace <adapter> with your dbt adapter package, for example duckdb, snowflake, bigquery, postgres, or redshift.
- Configure YAML routing in
dbt_project.yml:
models:
your_project_name:
+dbt-osmosis: "_{model}.yml"- Optionally set per-folder behavior with
+dbt-osmosis-optionsand a repo-level YAML formatter indbt-osmosis.yml:
formatter: "prettier --write"- Preview changes safely:
dbt-osmosis yaml refactor --dry-run --check- Apply the update once the diff looks right:
dbt-osmosis yaml refactor --auto-applyTop-level commands currently exposed by dbt-osmosis --help:
yaml— manage schema YAML files and documentation inheritancesql— compile or run ad-hoc SQL in dbt contextworkbench— launch the Streamlit workbenchgenerate— generate sources, staging models, models, and SQLnl— natural-language query/model helperstest— suggest dbt teststest-llm— validate LLM client configurationdiff— report schema drift between YAML and the databaselint— lint SQL strings, models, or a whole project
For command-by-command flags and examples, use the docs-site CLI reference rather than relying on this landing page.
Local development in this repository is built around uv, task, and Ruff.
Common workflows:
task format
task lint
task testNotes:
- Ruff is the active formatter, linter, and import sorter.
taskis not just verification; the default task formats, lints, runs tests, and then ensures the dev environment is synced.- Repository test fixtures are DuckDB-only today; contributor examples use
demo_duckdb, and targeted core tests may needuv run dbt parse --project-dir demo_duckdb --profiles-dir demo_duckdb -t testto refreshdemo_duckdb/target/manifest.json. - Docs-site commands use the Node toolchain under
docs/:
npm --prefix docs run start
npm --prefix docs run build
npm --prefix docs run serveThe optional workbench is a Streamlit app for interactive dbt SQL development.
Install the extra and launch it with:
pip install "dbt-osmosis[workbench]"
dbt-osmosis workbenchThe hosted demo is linked from the badge at the top of this README.
You can run dbt-osmosis yaml refactor -C as a pre-commit hook:
repos:
- repo: https://github.com/z3z1ma/dbt-osmosis
rev: v1.3.0
hooks:
- id: dbt-osmosis
files: ^models/
args: [--target=prod]
additional_dependencies: [dbt-<adapter>]That hook keeps schema YAML changes visible in the commit that introduced them.
