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


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.42.1-cp313-abi3-win_amd64.whl (6.8 MB view details)

Uploaded CPython 3.13+Windows x86-64

panproto-0.42.1-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.42.1-cp313-abi3-manylinux_2_28_aarch64.whl (8.2 MB view details)

Uploaded CPython 3.13+manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13+macOS 11.0+ ARM64

panproto-0.42.1-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.42.1-cp313-abi3-win_amd64.whl.

File metadata

  • Download URL: panproto-0.42.1-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.42.1-cp313-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7a6ca8043672fac0a910477209a2a461b57e75c603963e5d1a4a4e7e26a5cca5
MD5 ba91bf9e48bb7da13c40a9394624498b
BLAKE2b-256 f272d0f0219fa36525c6a47325aabd92eb85dca49aba4c349447d6262b2f757b

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.42.1-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.42.1-cp313-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.42.1-cp313-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba7fae8d65281efbf013638e155a044f501efd649d8da53e2b789cf14107dae2
MD5 59dd761b5f44e3bd27a7068cdbbbf3cc
BLAKE2b-256 50ddbdff153d689d2a35593ea4aa161a61471171070e4d64d4b68e567379d378

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.42.1-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.42.1-cp313-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for panproto-0.42.1-cp313-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cc3c6ff047dd00187e6ad04874905b762afc548d2d86f0d0a78ac4a35ac4144c
MD5 009eb6b1c30096bf2bd7ebb57bbb7471
BLAKE2b-256 c9f2ce025ff5cb4f9a57494f0f8627456351d6b2f5ff9d6143128db39d779827

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.42.1-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.42.1-cp313-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for panproto-0.42.1-cp313-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94af26600a66d72e9ff6eb8530f27f0dd58438137c29d14dfbad43a7bd4ea489
MD5 d4e9fba7ee4df7dedf340b401a5a4ded
BLAKE2b-256 64ce15607f7d361975f7d90eb373a485bd3f432a127bcf5b1f8d61ab7f7bc431

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.42.1-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.42.1-cp313-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for panproto-0.42.1-cp313-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fb918b70e41506ba6ca9cc1f6bd06db75f3aba1fb670e0843b265f063b69f3b6
MD5 f11f8261e4da983a23c04749da831040
BLAKE2b-256 146672c7daa88b2e01710331a4630cc290225a47bbadaa9c8bc8a6d082e4dd14

See more details on using hashes here.

Provenance

The following attestation bundles were made for panproto-0.42.1-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