Business users answer their own questions from dashboards and metrics your data team defines as YAML and reviews in pull requests. It runs against your own warehouse, and agents query the same definitions over MCP.
# commerce/revenue.yaml
title: Revenue overview
filters:
- {name: dates, type: daterange}
- {name: region, type: select}
- {name: channel, type: select}
tiles:
- metric: revenue
compare: previous_period
# added from + Explore
- title: Orders by weekday
query: orders_by_weekday
chart: bar
Pin a request onto the tile it belongs to and send it to your coding agent. Claude Code, Codex, or your own headless entrypoint, running locally as you. The dashboard updates while you keep chatting.
Dashboards, metrics, agents, even the theme. An agent can draft any of them
and none of it can quietly change what revenue means, because the edit
arrives as a pull request. sqldash lint runs in CI and your coworker approves it.
Passwords and tokens come from environment variables, or from a named profile each teammate keeps on their own machine, the way AWS profiles work. The YAML you commit holds a reference, never a secret.
One flat mapping per source, with the same keys for every engine. Snowflake, BigQuery, Databricks, Redshift, Athena, Postgres, MySQL, SQL Server, Trino, ClickHouse, DuckDB, and SQLite all configure the same way, and anything else connects with a URL.
source:
type: snowflake
account: acme-prod
warehouse: WH
database: ANALYTICS
schema: PUBLIC
username: ${env:SNOWFLAKE_USER}
authentication: externalbrowser
source:
type: bigquery
project: acme-analytics
schema: warehouse
source:
type: databricks
host: dbc-1234.cloud.databricks.com
http_path: /sql/1.0/warehouses/abc123
catalog: main
schema: analytics
token: ${env:DATABRICKS_TOKEN}
source:
type: postgres
host: db.internal
port: 5432
database: analytics
schema: public
username: ${env:PGUSER}
password: ${env:PGPASSWORD}
# every .csv and .parquet next to the dashboard,
# as a view named after the file. Nothing to connect.
source: {type: duckdb, attach_files: true}
# whatever SQLAlchemy can reach, Oracle included
source:
url: oracle+oracledb://analyst:${env:ORACLE_PASSWORD}@db.internal:1521/?service_name=ANALYTICS
sqldash serve runs on your laptop. No cluster to run, no build step, and no account to create.
Credentials come from ${env:VAR} or a per-user profile file, so your warehouse stays the permission model.
sqldash snapshot renders static pages anyone can open, with no credentials in the serving path.
An agent's instructions, data tools, and evals live in agents.yaml,
next to the metrics it reads. Register the repos it should see and
sqldash mcp serves those and nothing else.
Import the LookML and Snowflake semantic views you already have. Export your sqldash metrics back to LookML, a semantic view, or a Cortex Agent at any time, so trying sqldash never locks you in.
dbt Labs released dbt Charts in September 2026, and it shares a lot with sqldash. Both keep dashboards as YAML in git and run SQL against your own warehouse. The difference that matters most is where a number is defined.
queries:
revenue: |
SELECT
DATE_TRUNC('month', day) AS month,
SUM(amount) AS revenue
FROM {{ ref('orders') }}
GROUP BY 1charts:
revenue:
type: line
query: revenue
x: month
y: revenue
The board carries its own SQL, so every board that shows revenue writes it again. Semantic Layer support is planned.
tiles:
- metric: revenue
chart: line
metrics:
revenue:
table: orders
expr: SUM(amount)
time_dimension:
name: day
grain: month
The tile names a metric. Every tile, CLI query, and agent over MCP gets its SQL from this one definition.
ref()The full side by side → As of September 2026
Start with the DuckDB demo, no credentials needed. When you're ready,
sqldash setup connects your warehouse
using a local credential profile.
Prefer not to install it? uvx sqldash init --demo and uvx sqldash serve run it from uv’s cache, and uv fetches Python 3.11 or newer if you need it.
To let your coding agent in, add it once. In Codex run codex mcp add sqldash -- uvx sqldash mcp ., in Claude Code claude mcp add sqldash -- uvx sqldash mcp ., and see MCP for other clients.