This release is a pre-release and may not be stable for production use.
deltaplan △
Declarative plan / apply for Databricks SQL tables.
Describe your Unity Catalog tables in YAML, diff that against the live catalog,
review a plan that knows which Delta changes are free and which rewrite 400 GB —
then apply it.
Status: alpha. Every milestone in the design is built — plan, apply (rewrites included), drift, the GitHub Action, and governance (tags, grants, masks, row filters, views, SQL functions). It is tested offline against a fake warehouse, and every assumption it makes about Databricks is checked by a live suite against a real workspace. Try it on a dev catalog before production.
uv tool install --prerelease allow deltaplan # or: pip install --pre deltaplan
Take the tour → — one project from
nothing to a reviewed pull request, every step shown — or browse the
feature gallery. The
docs have the spec format, the commands, and
the safety model. docs/DESIGN.md is the source of truth.
The spec
table: ${catalog}.sales.orders
comment: Order facts
cluster_by: [order_date]
columns:
- name: order_id
type: bigint
nullable: false
- name: customer_ref
type: string
renamed_from: cust_id
- name: address
type:
struct:
- {name: street, type: string}
- {name: zip, type: string}
Or as SQL — the same model, read with sqlglot:
CREATE TABLE ${catalog}.sales.customers (
customer_id BIGINT NOT NULL,
name STRING,
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
)
CLUSTER BY AUTO;
A project can mix both. SQL specs support what sqlglot can parse; YAML supports everything — the list says which.
The plan
Why
- Delta-aware. Metadata-only, needs-a-table-feature, and full-rewrite are different things, and the plan says which one you're about to do — before you do it.
- Safe by default. Only tables deltaplan manages are ever drop candidates;
everything else is reported as unmanaged and left untouched. Destructive steps need
--allow-destructive, and a stale plan is refused. - No state file. Unity Catalog is the state.
- Nested types are first class. Struct, array and map fields diff by path
(
address.element.zip), including renames and per-field comments. - Reviewable. The plan is a data structure; the terminal, Markdown (for PR comments) and JSON renderers all read the same object.
Commands
deltaplan validate -t dev # spec lint, no connection needed
deltaplan import main.sales -o tables # live tables -> YAML specs
deltaplan plan -t dev [-o plan.json] [--format rich|md|json]
deltaplan show plan.json -f md # render a saved plan, no warehouse needed
deltaplan apply plan.json [--allow-destructive]
deltaplan drift -t dev # exit code 2 on drift, for CI
deltaplan force-unlock -t dev
In CI
- uses: misja-pronk/deltaplan@v0
with:
target: prod # comments the plan on the pull request
Plan on pull requests, apply on merge, catch drift nightly — see the CI guide.
Development
deltaplan uses mise + the Astral stack (uv, ruff, ty).
mise install # pinned Python + uv
uv sync # .venv with deps and dev tools
mise run check # lint + format check + types + unit tests
mise run test # uv run pytest tests/unit
mise run docs # preview the docs at localhost:8000
See CONTRIBUTING.md for the architecture and the house rules.
License
Apache-2.0 — see LICENSE.
Metadata
Release files for deltaplan 0.1.0a5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| deltaplan-0.1.0a5.tar.gz | 397.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| deltaplan-0.1.0a5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 536.6 kB
Release files / deltaplan-0.1.0a5.tar.gz
| Download URL | deltaplan-0.1.0a5.tar.gz |
|---|---|
| Size | 397.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
523f4a664ad56f438c783fb36057944d0f01ec1a210d411370169063123f8159
|
|
BLAKE2b-256 checksum How to use checksums |
90682d4e68edc5111e3f29e3559e5105f003b52b5c8e40ef6d9c1d810c44fe89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / deltaplan-0.1.0a5-py3-none-any.whl
| Download URL | deltaplan-0.1.0a5-py3-none-any.whl |
|---|---|
| Size | 139.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
32f45fe00e15cde0b861c195e6162e8372bced2afbd1aed542c7f6af4e0f5881
|
|
BLAKE2b-256 checksum How to use checksums |
4c366537267059e0fae29bd004fc83d4481666d7fb00185352d3d14d879a630a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|