factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
A typed SQL compiler for Databricks, Snowflake, BigQuery, and DuckDB, with contracts, change plans, and local tooling.
DataRust · PythonGitHub @rocky-dataOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A SQL transformation engine that type-checks your whole pipeline and catches breaking changes before they run — branches, replay, column-level lineage, compile-time contracts, per-model cost. Adapters: Databricks, Snowflake, BigQuery, DuckDB. Single static Rust binary. Apache 2.0.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Rocky compiles SQL models, reports supported static problems, and helps you review changes before execution.
Rocky works with Databricks, Snowflake, BigQuery, and DuckDB. You keep your warehouse and your existing SQL. Apache 2.0.
The failures that cost the most are the quiet ones. A source column can change
type. Someone can rename a column and break downstream models. Rocky reports
type and contract problems when the available SQL, schemas, and configuration
make them visible. A clean compile does not prove every query will run in a
warehouse or produce correct values.Read the full README ↗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 run
rocky 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-only
With 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. |
Each feature has a runnable demo in examples/playground/pocs/.
Know the limits:
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.
ROCKY_EXPLAINED.md| No lock-in |