Skip to main content

SQLBuild

The refactorable warehouse. Verify early, test properly, and refactor safely.

Website · Docs · Quickstart · Roadmap

Change your warehouse as often as your code. SQLBuild brings compile-time checks, tests and diffs to your SQL, so change is safe. It is a free, open-source framework for SQL and Python data pipelines, and it keeps its state in append-only tables in your own warehouse: no external state database, no manifest files and no paid tier.

Moving and renaming an incremental model: sqb plan migrates the existing table instead of rebuilding it

Move an incremental model to a new folder and name, and sqb plan migrates its table instead of rebuilding it.

Quick start

pip install sqlbuild
sqb playground waffle-shop
cd waffle-shop
sqb plan
sqb build
sqb test

The playground runs on local DuckDB, with no warehouse credentials.

What it does

Catch mistakes before anything runs

  • Compile-time checks. SQLBuild resolves references, validates SQL, infers column types, checks contracts and computes column lineage, all offline. A typo'd column fails in seconds, not halfway through a warehouse run.
  • Your conventions as rules. Built-in and custom Python rules turn review comments into compile errors: for example, marts can't read sources directly, or every final model declares its key.

Prove it works

  • Tests across models. SQL tests mock the sources and check the result through every model in between, with macros as test helpers. Macro, UDF and table-function tests are built in.
  • End-to-end scenarios. Build the real graph against fixture data, capture fixtures from the warehouse, and replay them locally on DuckDB in CI. See scenarios.
  • Audits and diffs. Audits run before data reaches the target table, and data diffs compare dev against prod or any query.

Change it without rebuilding everything

  • Renames keep their history. Rename or move an incremental or snapshot model and SQLBuild migrates the existing table instead of rebuilding it.
  • Replay on change. When a model's SQL changes, choose how far back to reprocess, from only the new data to the last 14 days to a full rebuild, with replay_on_change.
  • Macros don't have to be global. Keep macros, enums and constants next to the models that use them, and preview what a move would break with sqb scope. See declaration scopes.
  • Tidy up safely. The janitor archives stale tables before anything is deleted.

Ingestion with Python loaders, and Python tasks, assets and checks, run in the same graph as your SQL models. See the docs for everything else.

In the terminal

Each demo runs on local DuckDB with the projects in website/examples. The tapes that record them are in website/recordings.

A renamed column breaks the contract

daily_revenue declares contract enforced. Renaming waffles_sold to units_sold in the SELECT fails at compile time, before anything reaches the warehouse.

sqb compile fails because units_sold is not in the enforced contract and the declared waffles_sold column is missing

Both sides are reported: the new column isn't in the contract, and the declared one is gone.

Your own conventions as compile errors

Rules are Python functions in your project. This one, from rules/layers.py, says marts must read sources through staging:

from sqlbuild.rules import Finding, Model, RuleContext, rule


@rule(
    code="XSQBRARCH001",
    message="Marts must read sources through staging",
    remediation="Reference a staging model with __ref() instead.",
)
def marts_use_staging(*, model: Model, ctx: RuleContext) -> list[Finding]:
    layer = ctx.project.tree.relative_parts(path=model.path, under="models")[0]
    sql = ctx.sql.for_model(model).authored.source
    if layer != "marts" or "__source(" not in sql:
        return []
    line = sql[: sql.index("__source(")].count("\n") + 1
    return [ctx.finding(subject=model, line=line)]

A mart that reads __source("raw__payments") directly now fails, and so does the unit test that has no mock for it:

sqb compile reports the custom rule XSQBRARCH001 on the line that reads a raw source, and a unit test with no mock for that source

See rules.

See what a move would break

sqb scope --as-path previews moving a model before you move it.

sqb scope previews moving daily_revenue: the enum and macro it uses would be lost, so both usages are invalidated

Look at Lost and Invalidated usages: the model uses an enum and a macro that are private to models/marts, so moving it would break both.

Example

A model is a SQL file with a MODEL() header and a SELECT:

MODEL (
  materialized table,
  columns (
    order_id (audits [not_null, unique]),
  ),
  tags [marts],
);

SELECT
  o.order_id,
  o.customer_id,
  p.amount_cents AS total_cents
FROM __ref("stg_orders") o
JOIN __ref("stg_payments") p USING (order_id)

A test mocks the sources and asserts on the model, resolving every model in between from its real SQL:

TEST();

WITH
__source__raw__orders AS (
  @mock_orders()
),
__source__raw__payments AS (
  SELECT
    1 AS payment_id,
    1 AS order_id,
    1500 AS amount_cents,
    'credit_card' AS method
),
__expected__fact_orders AS (
  SELECT 1 AS order_id, 100 AS customer_id, 1500 AS total_cents
)
SELECT 1

Warehouses

Warehouse Status
Snowflake Supported
DuckDB Supported
MotherDuck Supported
PostgreSQL Supported
BigQuery Beta
Databricks Beta
SQL Server Beta

Snowflake is the main target. Beta adapters build, test and plan, but have had less production use so far. See adapters.

Free and independent

SQLBuild is Apache 2.0 and will stay free: no paid tier, no commercial edition, and no feature held back for one. Its state lives in your warehouse, next to your data. See the roadmap for what's next.

Contributing

Contributions are welcome. See CONTRIBUTING.md.

License

SQLBuild is licensed under the Apache License 2.0.

Release files for sqlbuild 0.119.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sqlbuild 0.119.4
File Size Uploaded
sqlbuild-0.119.4.tar.gz 1.9 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for sqlbuild 0.119.4
File
sqlbuild-0.119.4-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 abi3 Linux glibc 2.17+ x86-64 Details
sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 abi3 Linux glibc 2.17+ ARM64 Details
sqlbuild-0.119.4-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details
sqlbuild-0.119.4-cp312-abi3-macosx_10_12_x86_64.whl CPython 3.12 abi3 macOS 10.12+ x86-64 Details

Total release size: 74.3 MB

Release files / sqlbuild-0.119.4.tar.gz

Download URL sqlbuild-0.119.4.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
890d60967fa9fcbb27a827ec5d501835ca2bd6f06314cf30e47f5e30b0a9faa8
BLAKE2b-256 checksum
How to use checksums
ecc6b8487d8b27c0e855256206d242109999e17afe9a50935fe71edb60dbe418
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / sqlbuild-0.119.4-cp312-abi3-win_amd64.whl

Download URL sqlbuild-0.119.4-cp312-abi3-win_amd64.whl
Size 15.3 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
1bf51873a25e07b5d8ada9c335a9136b00beefabbc3abb6c6b9ea1d508dabe68
BLAKE2b-256 checksum
How to use checksums
6f9269a58d90e4e029358cfbe32d8e28dda3bef42ef15001c20a7dea9d449a57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 14.8 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
98e596a8aee189544cc4c72bb9b3dccc56926585b74e1484062b4cf94535504c
BLAKE2b-256 checksum
How to use checksums
ed0b925425befbc11f979f0bbcbd08d75ea082ba6436f8f0d53c59813dec28e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL sqlbuild-0.119.4-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 14.1 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
96c049d1848a3311002276b0b135941f02ea8978118b5e536dfc5e631451e035
BLAKE2b-256 checksum
How to use checksums
00178881a7f1c94e5c58b46211a2965134c07d408b4fe76fd17d0e25e36daec1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / sqlbuild-0.119.4-cp312-abi3-macosx_11_0_arm64.whl

Download URL sqlbuild-0.119.4-cp312-abi3-macosx_11_0_arm64.whl
Size 14.0 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b39dd581d8eac7805bbec9edafd11b3a02f6a5f05854de50cb245a5e24c8ed23
BLAKE2b-256 checksum
How to use checksums
f0483ff2670246f5d18d03e2b8ff3d58e05db7e529b1801cdc62f4d28b950444
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / sqlbuild-0.119.4-cp312-abi3-macosx_10_12_x86_64.whl

Download URL sqlbuild-0.119.4-cp312-abi3-macosx_10_12_x86_64.whl
Size 14.3 MB
Tags CPython 3.12 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
be0ded1ebfa70403e5ecacaef66843446c3b7b27fcfc5723f7c06cc305beff79
BLAKE2b-256 checksum
How to use checksums
cc5715792221ba7e12727be1075ce3a7450914e88cc4789fc535a66993f2fa73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.119.4 This release

6 release files

0.99.0

6 release files

0.98.5

6 release files

0.98.4

6 release files

0.98.3

6 release files

0.98.2

6 release files

0.98.1

6 release files

0.98.0

6 release files

0.97.2

6 release files

0.97.1

6 release files

0.97.0

6 release files

0.96.1

6 release files

0.96.0

6 release files

0.95.0

6 release files

0.94.6

6 release files

0.94.5

6 release files

0.94.4

6 release files

0.94.3

6 release files

0.94.2

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page