Skip to main content

Automatic schema migration and version control for 51 schema languages and 248 programming languages

Project description

panproto

PyPI Python License: MIT

Python bindings for panproto, a schematic version-control system that treats every supported schema language (around 50, including ATProto, OpenAPI, AsyncAPI, Avro, Protobuf, JSON Schema, and Kubernetes CRDs) as views over a single graph format.

The bindings are built with PyO3 against the Rust core directly: no WASM runtime, no subprocess, no shelling out. The full panproto surface is available from Python, including the schema/migration/lens/VCS pipelines and the tree-sitter-driven parser for ~250 programming languages.

Status

panproto is pre-1.0. The 0.x series carries arbitrary breaking changes between minor versions; the panproto package version tracks the workspace version on every release. Python 3.13+ is required (the wheels are abi3 and forward-compatible across newer Python releases).

Installation

pip install panproto

Wheels are published on PyPI for Linux x86_64/aarch64, macOS arm64+x86_64, and Windows x86_64. No Rust toolchain is required to install.

Synopsis

import panproto

# Pick a built-in protocol, or define your own with `Protocol.from_theories`.
atproto = panproto.get_builtin_protocol("atproto")

# Build a schema using the fluent builder.
v1 = atproto.schema()
v1.vertex("post", "record", "app.bsky.feed.post")
v1.vertex("post:body", "object")
v1.vertex("post:body.text", "string")
v1.edge("post", "post:body", "record-schema")
v1.edge("post:body", "post:body.text", "prop", "text")
v1.constraint("post:body.text", "maxLength", "3000")
schema_v1 = v1.build()

# (build schema_v2 the same way, with the field renamed to `content` ...)

# Detect breaking changes.
report = panproto.diff_and_classify(schema_v1, schema_v2, atproto)
print(report.compatible)        # True or False
print(report.report_text())     # human-readable summary

# Auto-generate a bidirectional converter.
lens, quality, _ = panproto.auto_generate_lens(schema_v1, schema_v2, atproto)
view, complement = lens.get(instance)
restored = lens.put(view, complement)

# Version-control schemas.
repo = panproto.Repository.init("/path/to/repo")
repo.add(schema_v1)
repo.commit("initial schema")
repo.branch("feature")
repo.merge("feature")

API overview

Module / class Purpose
Schema, SchemaBuilder Fluent schema construction; Schema.validate(protocol) checks rules.
Protocol Schema-language definition. Protocol.from_theories(...) builds one from a Theory.
get_builtin_protocol(name) Load any of the ~50 builtin protocols by name.
define_protocol(spec) Define a custom protocol from a dict.
Theory, create_theory GAT-level theory construction (sorts, ops, equations, directed_eqs).
diff_schemas, diff_and_classify Structural diff and breaking-change classification.
auto_generate_lens Generate a bidirectional Lens from two schemas.
Lens get(instance) -> (view, complement), put(view, complement) -> instance.
MigrationBuilder, compile_migration, compose_migrations Hand-rolled migration construction.
Instance, IoRegistry Parse/emit data across the 50+ supported formats.
Repository Filesystem-backed VCS: init, commit, branch, merge, log, blame, bisect, stash, tag, plus data versioning.
AstParserRegistry, parse_source_file, ParseEmitLens Full-AST parsing across ~250 languages via tree-sitter.
Expr, parse_expr, pretty_print_expr Embedded expression language.

Performance notes

  • The _native extension talks to the Rust core through PyO3's zero-copy pyclass slabs. Schemas, theories, and lenses are reference-counted Rust objects on the Python side; mutations go through dedicated builder types (SchemaBuilder, MigrationBuilder) that consume on build(), so you can't accidentally observe partial state.
  • Cross-thread sharing of these objects requires the GIL; for parallel work, fan out at the data layer (e.g. parallelise lens.get calls with concurrent.futures) and keep the schema/lens objects per worker.
  • Wheel-load cost is one-time; the import sets up the protocol registry lazily so cold-start is fast.

Contributing

Source: bindings/python. Issues and pull requests at github.com/panproto/panproto/issues.

The native extension lives at crates/panproto-py on the Rust side; bindings/python/src/panproto/__init__.py is the pure-Python re-export layer that maturin ships alongside the compiled extension.

License

MIT © 2026 Aaron Steven White.

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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

panproto-0.43.3-cp313-abi3-win_amd64.whl (6.8 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.43.3-cp313-abi3-manylinux_2_28_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ x86-64

panproto-0.43.3-cp313-abi3-manylinux_2_28_aarch64.whl (8.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

panproto-0.43.3-cp313-abi3-macosx_11_0_arm64.whl (7.7 MB view details)

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.43.3-cp313-abi3-macosx_10_12_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.13+macOS 10.12+ x86-64

File details

Details for the file panproto-0.43.3-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.43.3-cp313-abi3-win_amd64.whl
  • Upload date:
  • Size: 6.8 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

Hashes for panproto-0.43.3-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8f1e0b1716572815d49b9383fba9243079b0717724052da0a257262e3b609cfc
MD5 16b43e0b9cd7c259cc427622a1ed726b
BLAKE2b-256 df813a481707ed23382be548ea07d27a872301fb481dff3102a5b54628119fe9

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.43.3-cp313-abi3-win_amd64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.43.3-cp313-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.43.3-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 31d159a87232555ea83a5255095f8196f126ace2c133df40589426d938d49f4f
MD5 09678db5a2f724666ff84e995dcaab52
BLAKE2b-256 0ac603a3aa0040e4187cfc8d80a4809f6c30ae056eac3731a66aae59ba748506

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.43.3-cp313-abi3-manylinux_2_28_x86_64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.43.3-cp313-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.43.3-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f4ca73ee4a330a181c58160dbb81779508324c22cafba9a4c33a06f6dd2c2965
MD5 489aa9b540c32042c1d830f783f5a889
BLAKE2b-256 42fa114fcd71d67aa7208b69924680f35c6d3d51709ce6d0ac29ef050c7b68e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.43.3-cp313-abi3-manylinux_2_28_aarch64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.43.3-cp313-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for panproto-0.43.3-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18523a39ae201913977b2f92f4cc13e8066dfec8cd70ca0c7566b25e164cccb9
MD5 cafe6f52693824109a56ae71bd6c0907
BLAKE2b-256 1b49302cbf0cbf8d8d25aaa06fdf4132d026caa3edda83bfeda6de3ac12c1537

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.43.3-cp313-abi3-macosx_11_0_arm64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file panproto-0.43.3-cp313-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.43.3-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c5d78d49ac99d12c3b75fb3671d8a3f8adfeb0439834c4b9d7f07aa7665a7f55
MD5 1637515fec76d1da851b5c67238b5ac3
BLAKE2b-256 2f8725e0962b8cda70500ffec5a09000dd7ac4763413334d21d50eb3d8b41d39

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.43.3-cp313-abi3-macosx_10_12_x86_64.whl:

Publisher: python-wheels.yml on panproto/panproto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page