v0.4.0 out now  ·  built on Zed v1.17.2

The dbt IDE your models deserve.

zdbt is a fork of Zed with dbt built into its bones — Jinja-aware SQL, a dbt language server, one-keystroke query results, and an interactive column-level lineage canvas. Native GPUI. Zero webviews.

macOS · Linux · Windows  —  free & open source, GPL-3.0

fct_orders.sql — zdbt
1-- fct_orders · materialized: table
2{{ config(materialized='table') }}
3
4select
5  o.order_id,
6  c.customer_name,
7  sum(p.amount) as amount
8from {{ ref('stg_orders') }} o
9join {{ ref('stg_payments') }} p
10  on o.order_id = p.order_id
11group by 1, 2
▦ Results ⟨/⟩ Compiled ◇ Lineage
#order_idcustomeramount ▼
110482Acme Corp4,120.50
210391Globex3,987.00
310057Initech2,340.75
410210Umbrella1,876.20
stg_orders stg_payments fct_orders mart_fin

Features

Everything dbt,
zero context switching.

Open a model and zdbt already knows your project — profiles, environment, lineage, compiled SQL. Results are one keystroke away.

Run anything with

Execute the current model — or just the SQL you selected — through dbt show. Results land in a grid with sorting, live search, a column picker, resizable columns, pinned row numbers, and CSV export.

🕸

Column-level lineage canvas

Layered auto-layout with crossing reduction, materialization colors, per-node collapse, drag & pan, semantic zoom. Click a column to light up its transformation path across the DAG.

Resolved from the real SQL AST — 77% of columns on our reference project; the rest fall back to name matching, which can over-link.

🧬

Jinja-aware dbt SQL

Native tree-sitter grammar with combined SQL injection — statements survive {{ ref(…) }} interruptions. Default for every .sql file.

🛰

dbt language server

dbt Fusion's dbt lsp first — completions, hover, go-to-definition, diagnostics — falling back to the community server. dbt Core has no lsp subcommand, so Core users point lsp.dbt-lsp.binary.path at it themselves.

🧭

Browse-driven navigation

Opening a model recenters the lineage on it; clicking a node opens the file. Two views of one project, always in sync.

🔩

Your project, auto-wired

zdbt discovers nested dbt_project.yml files, in-repo profiles (local_profiles/, .dbt/), loads .env secrets up to the repo root — into the dbt process only — and keeps the manifest & catalog fresh with automatic dbt parse. Fifteen settings on a dedicated page when you want control.

# on open
 project: employees/dbt_project.yml
 profiles: local_profiles/
 env: 8 vars from .env
 dbt parse · catalog fresh

Agents

Your AI assistant
can read the DAG.

zdbt is also an MCP server. Open a dbt project and it registers itself with the built-in agent — no config file, no setup. Ask about a column and the agent traces it through the lineage instead of guessing from file text.

Six tools, zero configuration

  • dbt_list_models — every model, source, seed and snapshot
  • dbt_model_info — description, relation, columns and their sources
  • dbt_lineage — upstream and downstream nodes with levels
  • dbt_column_lineage — one column's path, hop by hop
  • dbt_show — run a model or ad-hoc SQL, rows as JSON
  • dbt_compile — the rendered SQL

Runs headless, so dbt_show and dbt_compile need a dbt already on your PATH — and dbt_show queries the real warehouse.

# in the zdbt agent panel — nothing to configure
> where does revenue_net in fct_orders come from?

→ dbt_column_lineage(fct_orders, revenue_net)
  stg_payments.amount
    → int_payments.gross      sum(amount)
    → fct_orders.revenue_net  gross - refunds

# same binary, any MCP client
claude mcp add dbt -- \
  /Applications/zdbt.app/Contents/MacOS/zed --dbt-mcp

Workflow

Three steps to insight.

01

Open a model

The lineage panel recenters instantly. Upstream sources on the left, downstream marts on the right — collapse what you don't need.

02

Hit

The model — or your selection — compiles and runs against your warehouse. Jinja resolved, limits applied, secrets from .env.

03

Explore results

Sort, search, hide columns, export CSV. Flip to Compiled to read the exact SQL, or trace a column across the DAG.

Download

Free. Open source. Yours.

Prebuilt binaries for Apple Silicon macOS, x86_64 Linux and x86_64 Windows. Intel Macs and ARM Linux build from source. Installs alongside official Zed and never auto-updates over it.

Every build is unsigned — the steps below are how you get past that safely. All versions on the releases page.

macOS — first launch

Apple removed the old right-click → Open bypass in macOS 15, so unsigned apps are approved in Settings now.

  1. Open the .dmg, drag zdbt to Applications.
  2. Launch it. macOS refuses — click Done.
  3. System Settings → Privacy & Security, scroll to Security, click Open Anyway.
  4. Launch again and confirm Open.

On macOS 14 and older: right-click the app → Open → Open.

Linux

The tarball unpacks as zed-dev.app — keep the folder intact and symlink the launcher rather than copying it.

tar -xzf zdbt-linux-x86_64.tar.gz
mkdir -p ~/.local/opt
mv zed-dev.app ~/.local/opt/zdbt
ln -sf ~/.local/opt/zdbt/bin/zed \
   ~/.local/bin/zdbt

Windows

A per-user installer — no admin rights needed. Because it is unsigned, SmartScreen will interpose once.

  1. Run zdbt-windows-x86_64-setup.exe.
  2. SmartScreen → More infoRun anyway.
  3. Installs to %LOCALAPPDATA%\Programs.

Requires Windows 10 1709 or newer.

Verify your download

Each release ships a SHA256SUMS.txt covering all three artifacts. Pass --ignore-missing, or it reports the two files you didn't download as failures.

# macOS
shasum -a 256 --ignore-missing -c SHA256SUMS.txt
# Linux
sha256sum --ignore-missing -c SHA256SUMS.txt
# or build from source (Rust + cmake)
git clone https://github.com/arezki1990/dbt-zed
cd dbt-zed
cargo build --release -p zed --features gpui_platform/runtime_shaders
./target/release/zed /path/to/your/dbt/project