Rocky checks your SQL models before they run, and helps you review every change before it reaches the warehouse.
You keep your warehouse and your SQL. Rocky runs on Databricks, Snowflake, BigQuery, DuckDB and more. Apache 2.0.
edit SQL ──▶ rocky compile ──▶ rocky plan ──▶ rocky apply ──▶ warehouse
│ │
▼ ▼
type and contract what will change,
errors, before SQL saved for review
runs anywhere
A clean compile finds the problems that your SQL, schemas and config make visible. It does not prove that every query runs or returns correct values.
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/rocky-data/rocky/main/engine/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/rocky-data/rocky/main/engine/install.ps1 | iex
rocky playground my-first-project
cd my-first-project
rocky compile && rocky test && rocky runrocky run does plan and apply in one step. The playground runs on local DuckDB, so you need no credentials. Next: the playground guide, then connect a warehouse.
In your browser. rocky serve --ui shows what needs you, your models and their DAG, recent runs, and plans waiting for review. See the browser UI guide.
rocky serve --ui --token "$(openssl rand -hex 16)" --token-scope read-onlyWith a read-only token, the page cannot run or approve anything. Plain rocky serve --ui on your own machine starts operator mode, where the page can approve and apply plans.
In VS Code. The Rocky extension shows errors as you type, column types on hover, and go-to-definition across models.
| You want to | Rocky gives you | Read more |
|---|---|---|
| Catch a broken model before it runs | rocky compile: types, references and contracts, checked offline |
Compiler |
| See what a change breaks downstream | rocky lineage-diff main: affected tables and columns, as PR-ready Markdown |
Lineage diff |
| Review before you write | rocky plan saves the change. rocky apply <plan-id> runs it. |
Core pipeline |
| Try a change safely | Named branches and rocky replay |
Branches |
| Load only new rows | strategy = "incremental" |
Incremental |
| Test data | Checks and declarative [[tests]] |
Checks and tests |
| Control what agents may do | [policy] rules: allow, require review or deny. An AI-written plan needs an approval marker. |
Operating Rocky with agents |
| Declare a data product | products/<name>.toml, verified and compiled. rocky fulfill is experimental. |
Products |
| Leave | rocky emit-sql writes plain SQL. rocky import-dbt brings a dbt project in. |
No lock-in |
Each feature has a runnable demo in examples/playground/pocs/.
Know the limits:
- An approval marker is not a signature. The marker is the file that approves an AI-written plan. It records that someone approved on this machine, not who.
- A check that runs after a warehouse write cannot undo that write.
- Rocky adds the grants you declare and never revokes one.
See Who enforces what.
| Status | Adapters |
|---|---|
| Generally available | Databricks, the most complete adapter |
| Supported for local work | DuckDB: the playground and rocky test |
| Beta | Snowflake, BigQuery, Trino, PostgreSQL, Redshift, ClickHouse, SQL Server, Apache Spark |
| Sources (read) | Fivetran, Airbyte, Iceberg REST catalog, a manual table list |
The checker works the same on every warehouse. What runs after it differs: for example, Trino and ClickHouse refuse strategy = "merge". See Connect a warehouse for each adapter's limits.
| Path | What it is |
|---|---|
engine/ |
The rocky CLI (Rust), with the browser UI built in (engine/ui/) |
editors/vscode/ |
The VS Code extension |
sdk/python/ |
rocky-sdk, a Python client |
integrations/dagster/ |
dagster-rocky, the Dagster integration |
examples/playground/ |
Sample project and runnable demos |
deploy/ |
Docker Compose and Helm for a self-hosted rocky serve |
Build from source with just build. See CONTRIBUTING.md.
- Docs: rocky-data.dev
- A plain-English tour:
ROCKY_EXPLAINED.md - Questions: Discussions
- Sponsor: GitHub Sponsors

