Automatic schema migration and version control for 51 schema languages and 248 programming languages
Project description
panproto
Native Python bindings for panproto. Define schemas, detect breaking changes, and automatically convert data between schema versions. Supports 51 schema languages (OpenAPI, ATProto, Protobuf, JSON Schema, and more) and can parse source code in 248 programming languages via tree-sitter.
Built with PyO3 for direct access to the Rust engine (no WASM, no subprocess). Requires Python 3.13+.
Installation
pip install panproto
Quick start
import panproto as pp
# Build two versions of a schema
builder = pp.SchemaBuilder("atproto")
builder.vertex("post", "record", nsid="app.bsky.feed.post")
builder.vertex("post:body", "object")
builder.vertex("post:body.text", "string")
builder.edge("post", "post:body", "record-schema")
builder.edge("post:body", "post:body.text", "prop", name="text")
builder.constraint("post:body.text", "maxLength", "3000")
old_schema = builder.build()
# ... build new_schema similarly, with renamed fields ...
# Check whether the change is breaking
report = pp.diff_and_classify(old_schema, new_schema, protocol)
print(report.compatible) # True or False
print(report.report_text()) # human-readable summary
# Auto-generate a bidirectional converter
lens = pp.auto_generate_lens(old_schema, new_schema, protocol)
view, complement = lens.get(instance)
restored = lens.put(view, complement)
# Parse and emit data in any supported format
io = pp.IoRegistry()
schema = io.parse_schema("json-schema", json_schema_str)
output = io.emit_schema("json-schema", schema)
# Version control
repo = pp.VcsRepository.init("/path/to/repo")
repo.add(schema)
repo.commit("add post schema", "your-name")
repo.branch("feature")
repo.merge("feature", "your-name")
API overview
Schema and protocols
| Function / Class | What it does |
|---|---|
list_builtin_protocols() |
List all 76+ built-in protocol names. |
get_builtin_protocol(name) |
Load a protocol definition by name. |
define_protocol(...) |
Define a custom protocol. |
SchemaBuilder(protocol) |
Build schemas with vertex(), edge(), constraint(), then build(). |
Schema |
An immutable schema with vertex, edge, and constraint accessors. |
Protocol |
A schema language definition with edge rules and feature flags. |
Breaking change detection
| Function / Class | What it does |
|---|---|
diff_schemas(old, new) |
Compute a structural diff between two schemas. |
diff_and_classify(old, new, protocol) |
Diff and classify changes as breaking or non-breaking. |
SchemaDiff |
The diff result: added, removed, and changed elements. |
CompatReport |
Compatibility report with details on each breaking change. |
Migration and lenses
| Function / Class | What it does |
|---|---|
auto_generate_lens(src, tgt, protocol) |
Generate a bidirectional converter between two schemas. |
Lens |
A converter with get(instance) (forward) and put(view, complement) (backward). |
Complement |
The data dropped during forward conversion, needed for lossless backward conversion. |
MigrationBuilder |
Build a migration by specifying vertex and edge mappings. |
compile_migration(src, tgt, migration) |
Compile a migration for application. |
compose_migrations(m1, m2) |
Chain two migrations into one. |
check_existence(src, tgt, migration, protocol) |
Validate that a migration is well-formed. |
Data I/O
| Function / Class | What it does |
|---|---|
Instance |
A data record with from_json(), to_json(), and validate(). |
IoRegistry |
Parse and emit schemas and data in any of the 76+ supported formats. |
Theory engine
| Function / Class | What it does |
|---|---|
create_theory(name, sorts, ops, eqs) |
Define a custom schema language theory. |
Theory |
A theory with sort, operation, and equation accessors. |
colimit_theories(t1, t2, shared) |
Combine two theories into one. |
check_morphism(morphism, domain, codomain) |
Validate a structure-preserving map between theories. |
Model |
A concrete model of a theory. |
Version control
| Function / Class | What it does |
|---|---|
VcsRepository.init(path) |
Initialize a new panproto repository. |
VcsRepository.open(path) |
Open an existing repository. |
repo.add(schema) |
Stage a schema for commit. |
repo.commit(message, author) |
Create a new commit. |
repo.branch(name) |
Create a branch. |
repo.merge(branch, author) |
Merge a branch into the current one. |
Documentation
Full documentation at panproto.dev.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file panproto-0.30.0-cp313-abi3-win_amd64.whl.
File metadata
- Download URL: panproto-0.30.0-cp313-abi3-win_amd64.whl
- Upload date:
- Size: 4.7 MB
- Tags: CPython 3.13+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af958b88fb8fe10d08c854b70c8b7f1c4ab0a1c42c592c9464fee4c20ec7ff91
|
|
| MD5 |
90f2266c474f6ebc9d8e751907dd81dd
|
|
| BLAKE2b-256 |
494963f794e49cbb7c2bc2c7db06a043d457ddb824cfe3679b6983b5f1a3e83e
|
Provenance
The following attestation bundles were made for panproto-0.30.0-cp313-abi3-win_amd64.whl:
Publisher:
python-wheels.yml on panproto/panproto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panproto-0.30.0-cp313-abi3-win_amd64.whl -
Subject digest:
af958b88fb8fe10d08c854b70c8b7f1c4ab0a1c42c592c9464fee4c20ec7ff91 - Sigstore transparency entry: 1289373399
- Sigstore integration time:
-
Permalink:
panproto/panproto@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Branch / Tag:
refs/tags/v0.30.0 - Owner: https://github.com/panproto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-wheels.yml@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.13+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc034cd1efa77ec0d9b0a866661e311cec44b1edeb3f41ed62cbaaff305d2005
|
|
| MD5 |
57bca14f1d2b8a310d6f99added8f4cb
|
|
| BLAKE2b-256 |
e0787dcfeacf892ec9a2557aa7abb361f98cb6f3084d3dfeb199243b7cc84ebd
|
Provenance
The following attestation bundles were made for panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl:
Publisher:
python-wheels.yml on panproto/panproto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panproto-0.30.0-cp313-abi3-manylinux_2_28_x86_64.whl -
Subject digest:
dc034cd1efa77ec0d9b0a866661e311cec44b1edeb3f41ed62cbaaff305d2005 - Sigstore transparency entry: 1289373551
- Sigstore integration time:
-
Permalink:
panproto/panproto@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Branch / Tag:
refs/tags/v0.30.0 - Owner: https://github.com/panproto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-wheels.yml@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 6.3 MB
- Tags: CPython 3.13+, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d08d7a1a151057cc31453e8f2f5e780a8c3b465dd1cfeb644299dfb81da46941
|
|
| MD5 |
1e081767817b8f0b3edce316796ec055
|
|
| BLAKE2b-256 |
2f87a18341350f94498a9138495c2632f111e334a46ab60c8a56b5de23c2acf2
|
Provenance
The following attestation bundles were made for panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl:
Publisher:
python-wheels.yml on panproto/panproto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panproto-0.30.0-cp313-abi3-manylinux_2_28_aarch64.whl -
Subject digest:
d08d7a1a151057cc31453e8f2f5e780a8c3b465dd1cfeb644299dfb81da46941 - Sigstore transparency entry: 1289373714
- Sigstore integration time:
-
Permalink:
panproto/panproto@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Branch / Tag:
refs/tags/v0.30.0 - Owner: https://github.com/panproto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-wheels.yml@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.8 MB
- Tags: CPython 3.13+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d35b89d666eb05ed4fc63f760917d43c7e7d0dbd85e082aa47268fbdd3e34da
|
|
| MD5 |
f3fc8a4d3b341206d30f5173e1f9e313
|
|
| BLAKE2b-256 |
b589f87d464a3fac5967789c244c1e9a6f2ba14dd274ab0812b5656248806a5b
|
Provenance
The following attestation bundles were made for panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl:
Publisher:
python-wheels.yml on panproto/panproto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panproto-0.30.0-cp313-abi3-macosx_11_0_arm64.whl -
Subject digest:
2d35b89d666eb05ed4fc63f760917d43c7e7d0dbd85e082aa47268fbdd3e34da - Sigstore transparency entry: 1289373484
- Sigstore integration time:
-
Permalink:
panproto/panproto@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Branch / Tag:
refs/tags/v0.30.0 - Owner: https://github.com/panproto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-wheels.yml@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.6 MB
- Tags: CPython 3.13+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19fab7b20f8de2fcd5510d9de363f7cad8ff127a23447bce38c0b916a429b04d
|
|
| MD5 |
257a7f1523c2ba712a9c672abe6c5e77
|
|
| BLAKE2b-256 |
df9e048a2b8bee54964655f01ceb63e443cfa04dc4de39ae4e769768f29cdfba
|
Provenance
The following attestation bundles were made for panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl:
Publisher:
python-wheels.yml on panproto/panproto
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
panproto-0.30.0-cp313-abi3-macosx_10_12_x86_64.whl -
Subject digest:
19fab7b20f8de2fcd5510d9de363f7cad8ff127a23447bce38c0b916a429b04d - Sigstore transparency entry: 1289373628
- Sigstore integration time:
-
Permalink:
panproto/panproto@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Branch / Tag:
refs/tags/v0.30.0 - Owner: https://github.com/panproto
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-wheels.yml@bab395e7ccd7af2375d5d505f0ac70e81060b8a9 -
Trigger Event:
push
-
Statement type: