// the find
gouline/dbt-metabase
dbt + Metabase integration
dbt-metabase syncs your dbt manifest to Metabase — pushing column descriptions, FK relationships, and semantic types so your BI tool's data model stays in sync with your transformation layer. It also runs the reverse: pulling Metabase questions and dashboards back as dbt exposures. Aimed at data teams who use dbt as their schema source of truth and are tired of manually maintaining Metabase metadata.
Bidirectional sync is the right design — models push to Metabase, exposures pull back to dbt, and both directions are first-class. The meta field approach (metabase.semantic_type, metabase.fk_target_table) is clean and doesn't require forking dbt schema conventions. There's a working sandbox with Docker Compose and real fixture data, which means you can actually test changes without a production Metabase. Configuration hierarchy (CLI > env vars > config file) is sensible and well-implemented.
The tool is tightly coupled to Metabase's internal API, which Metabase breaks without warning between versions — the separate mbql4/mbql5 test fixture directories are evidence this has already bitten them once. Exposure extraction produces YAML that embeds Metabase IDs and timestamps as inline markdown, making diffs noisy and the output awkward to review in PRs. No incremental sync — it re-exports everything on every run, which gets slow on large dbt projects with hundreds of models. The programmatic API is a thin wrapper around CLI logic with no async support, so scripting it into a pipeline means blocking on serial API calls to Metabase.