Sign in

panproto

@panproto.dev
34 followers 8 following 36 posts

Schematic version control. panproto.dev

PostsRepliesMedia
Reposted by panproto
idiolect @idiolect.dev · 18/09/2026
We have a new release (v0.13.0) that introduces a bunch of new community management tooling. There is now one portable path from a governed definition change through consequence analysis, review, verification, signed release, resumable migration, federation, and exit.
github.com
Release v0.13.0 · idiolect-dev/idiolect
Added Community control plane for 0.13.0. The new idiolect-community crate and CLI lifecycle provide versioned idiolect.toml workspaces, role-aware maintainer/consent/vote/steward/hybrid governanc...
112
panproto @panproto.dev · 12/09/2026
Didactic can attach an indexed family to Model fields. For example, a record with kind="number" can require a numeric body, and kind="text" can require text. Construction, JSON decoding, and immutable updates enforce the same cross-field dependency.
Syntax-highlighted Python defining a Payload universe whose text and number codes select different Python types. A Record model links kind to body through Payload.at("kind"). Pytest assertions confirm that a mismatched body and an inconsistent immutable update both raise Didactic ValidationError.
000
panproto @panproto.dev · 12/09/2026
Implicit indices now work in eliminator equations. head : Vec(succ n) → A can omit n at the call site. panproto can infer it from the vector. The nil case is impossible. Including it is rejected as unreachable.
Syntax-highlighted Python defining cons and head with implicit length index n. The displayed case equation makes head return the cons value. Calling head on cons(first(), nil()) supplies no length index, and normalization returns first().
100
panproto @panproto.dev · 12/09/2026
User-defined eliminators may have dependent motives. eval : Expr(t) → El(t) is checked branch by branch after refining t. Returning an integer carrier from a Boolean expression branch is a type error.
Syntax-highlighted Python defining a dependent evaluate eliminator. It accepts an expression of Expr(t), has motive El(t), handles IntLit and BoolLit by returning their values, and passes Panproto theory checking.
100
panproto @panproto.dev · 12/09/2026
Constructors may refine result indices. For instance: nil : Vec(0) and cons : A × Vec(n) → Vec(succ n). Panproto uses those refinements during type checking. A constructor or branch at the wrong index is rejected.
Syntax-highlighted Python defining zero and successor, followed by highlighted vector constructors. nil returns Vec(zero), while cons accepts a value and Vec(n) and returns Vec(succ(n)).
100
panproto @panproto.dev · 12/09/2026
You can now declare arbitrary indexed families, such Vec(n), Expr(t), Matrix(rows, columns), or Term(context, type). Family parameters form dependent telescopes, so a later parameter may depend on an earlier one.
Syntax-highlighted Python declaring a Didactic GADT named TypedLanguage. Highlighted definitions show Vec indexed by a Nat length and Term indexed by a context and a type belonging to that context.
100
panproto @panproto.dev · 12/09/2026
We have new versions of panproto (0.74) and didactic (0.15). didactic adds a public general first-order generalized algebraic data type (GADT) and indexed-family language, and panproto checks the resulting theory.
github.com
GitHub - panproto/didactic: A typed data library for Python on top of panproto.
A typed data library for Python on top of panproto. - panproto/didactic
111
panproto @panproto.dev · 21/08/2026
protolab v0.8 is now out. Alongside panproto's v0.71 automated migration discovery improvements, it adds atproto sign-in and allows you to publish lenses to your PDS as dev.panproto.schema.lens records.
panproto.dev
protolab
A patchbay for your schemas. Bidirectional data transformations, drawn as circuits.
051
panproto @panproto.dev · 19/08/2026
The panproto book has been expanded across all four sections: tutorials, how-to guides, reference, and explanation. New material covers morphism search, alignment evidence, and schema spans. Existing pages have been revised against the current APIs and command-line behavior.
panproto.dev
panproto | schematic version control
One engine for schematic version control within and across any schema language. Built on generalized algebraic theories for provably correct migrations.
020
panproto @panproto.dev · 19/08/2026
Four solvers are available: bucket elimination in the (min, plus) semiring; hybrid best-first search with EDAC*; the same search with a counting Hall propagator for injective maps; and weighted partitioning for maximum common induced sub-schemas.
010
panproto @panproto.dev · 19/08/2026
The network has one variable per source vertex. Its domain contains kind-compatible target vertices plus ⊥, which means the vertex is omitted from the span. Each choice has an integer cost. The solver returns the minimum-cost complete assignment without enumerating every candidate.
100
panproto @panproto.dev · 19/08/2026
Given two schemas, automated migration discovery now builds a cost function network and minimizes its integer cost. The result includes a certificate stating whether optimality was proved and which solver ran.
100
panproto @panproto.dev · 19/08/2026
We have a new release (v0.71.0) that substantially improves automated migration discovery by updating schema morphism search from enumeration and ranking to exact optimization.
github.com
Release v0.71.0 · panproto/panproto
Added panproto_schema::induce and induce_on_vertices (panproto-schema): the supported way to cut a sub-schema, accounting for all twenty-one Schema fields in their own key spaces and rebuilding th...
111
panproto @panproto.dev · 11/08/2026
We have a new release (v0.70.0) that adds a Swift SDK. Every entry point of the C ABI is now reachable from Swift, so iOS or macOS apps can migrate records between schema versions, check compatibility, and keep a local schema history with no server in the path.
github.com
Release v0.70.0 · panproto/panproto
Added panproto is reachable from Swift (bindings/swift): a SwiftPM package linking libpanproto_c, binding all 120 C ABI entry points, which is the same surface the Haskell binding consumes, so th...
021
panproto @panproto.dev · 10/08/2026
We're applying for grant funding to support further panproto development (including hiring a developer and a postdoc) and are looking for users who would be willing to write a letter of support. If that sounds like you, please get in touch with @aaronstevenwhite.io!
1103
panproto @panproto.dev · 17/06/2026
We have a new release (v0.55.0) that expands panproto's C ABI to 123 entry points and brings the Haskell bindings to full parity with the Python and TypeScript bindings. Schemas, migrations, lenses, the expression language, version control, and source parsing are all now reachable from Haskell.
github.com
Release v0.55.0 · panproto/panproto
Added Haskell bindings at full parity with the Python SDK (bindings/haskell, crates/panproto-c): the Haskell panproto package now reaches the whole engine, matching the Python SDK across schema c...
160
panproto @panproto.dev · 07/06/2026
We have a new release (v0.52.0) that substantially restructures and hardens the emission architecture that supports transpilation.
github.com
Release v0.52.0 · panproto/panproto
Added **Emit coverage: source-code emit (emit_pretty) now round-trips the entire upstream test/corpus/ of 255 vendored grammars under a strict oracle. The emit_corpus_audit gate requires, on every...
020
Reposted by panproto
Aaron Steven White @aaronstevenwhite.io · 15/05/2026
quivers is a functional probabilistic programming language that compiles to pytorch.
github.com
GitHub - FACTSlab/quivers: A functional probabilistic programming language that compiles to PyTorch.
A functional probabilistic programming language that compiles to PyTorch. - FACTSlab/quivers
2184
panproto @panproto.dev · 18/05/2026
We have a new release (v0.48.0) that adds the put-direction of the parse-emit lens: decorate takes an abstract schema and attaches the desired layout so the emitter renders byte-for-byte. The release also adds a sealed AbstractSchema/DecoratedSchema typed surface.
github.com
Release v0.48.0 · panproto/panproto
Added decorate as the put-direction of the parse / decorate / emit lens (panproto-parse, panproto-schema, panproto-lens, panproto-gat): a generator that takes an abstract schema (vertex kinds, ch...
040
Reposted by panproto
idiolect @idiolect.dev · 11/05/2026
We finally have docs! idiolect.dev/book/
011
panproto @panproto.dev · 11/05/2026
We have a new release (v0.47.0) that adds runtime grammar override for tree-sitter dev loops, queryable anonymous-token field values on parsed schemas, YAML round-trip on Theory, and DSL loaders on ProtolensChain.
github.com
Release v0.47.0 · panproto/panproto
Added Runtime grammar override (panproto-parse::ParserRegistry, panproto-py::PyAstParserRegistry): ParserRegistry::override_grammar / register_external_grammar_owned / unregister accept owned byte...
020
panproto @panproto.dev · 05/05/2026
We have a new release (v0.45.0) that adds grammar companion packs to the Python wheel: ten new pip-installable wheels covering ~250 tree-sitter grammars. We've also added support for a variety of audio programming languages.
github.com
Release v0.45.0 · panproto/panproto
Added panproto.TheoryBuilder on the Python SDK — a fluent builder mirroring SchemaBuilder and MigrationBuilder. Accumulates sorts, operations, and equational axioms via chained calls and produces...
010
panproto @panproto.dev · 05/05/2026
We have a new release (v0.44.0) that adds dependent sorts to the panproto GAT macros (class!, inductive!, derive_theory!) and exposes JSON/YAML/Nickel theory DSL loaders on the Python bindings as Theory.{from_json, from_yaml, from_nickel, from_path}.
github.com
Release v0.44.0 · panproto/panproto
Added panproto-gat-macros::class!, inductive!, and derive_theory! accept dependent sorts in argument and output positions (closes #59). The macros previously parsed each argument and output as a s...
000
panproto @panproto.dev · 01/05/2026
We have a new project! Didactic is a typed data library for python built on top of panproto. It provides class-based authoring like pydantic. But under the hood each Model is a panproto Theory, which gives you access to panproto's migration and codegen capabilities. Docs at panproto.dev/didactic/.
github.com
GitHub - panproto/didactic: A typed data library for Python on top of panproto.
A typed data library for Python on top of panproto. - panproto/didactic
0113
panproto @panproto.dev · 01/05/2026
We have a new release (v0.42.0) that adds a Theory→Schema bridge in the python bindings and integrates the panproto-repl binary with syntax highlighting into the schema CLI as `schema theory repl`.
github.com
Release v0.42.0 · panproto/panproto
Added Protocol.from_theories(...) (Python): classmethod that constructs a Protocol from a user-built Theory (or a pair, schema + instance) plus the protocol-level fields. Closes the gap between ha...
010
panproto @panproto.dev · 30/04/2026
Okay. So what if pydantic but backed by panproto schemas?
000
panproto @panproto.dev · 29/04/2026
We have a new release (v0.41.0) that includes our first Haskell bindings via two new packages: (i) a panic-safe C ABI (panproto-c) generated by safer-ffi; and (ii) a cabal package that links against it. Bindings currently handle protocols and schemas. Migrations, instances, and lenses to follow.
github.com
Release v0.41.0 · panproto/panproto
Added panproto-c (new crate): panic-safe C ABI for non-Rust language bindings. Generated by safer-ffi; every #[ffi_export] entry point runs through std::panic::catch_unwind and converts panics, in...
011
panproto @panproto.dev · 29/04/2026
We have a new release (v0.40.0) that adds a generic AST walker and uses it to implement parse-emit pairs as asymmetric lenses. The walker is parameterized by a tree-sitter grammar.json, so it will work for any language that has one.
github.com
Release v0.40.0 · panproto/panproto
Added panproto-parse (AstParser::emit_pretty): new trait method that renders a by-construction Schema (no parse-recovered byte positions, no interstitials) to source bytes by walking the language'...
000
panproto @panproto.dev · 29/04/2026
This setup allows schemas to have a git-style history of their own as part of panproto's VCS. Merges work on schema structure rather than file text, so conflicts hit when two branches edit the same schema file can be surfaced in a legible way.
000
panproto @panproto.dev · 29/04/2026
Source code in any programming language supported by treesitter also parses into the same graph format. So refactoring a Rust codebase and migrating an OpenAPI spec can be viewed as the same operation underneath.
100
panproto @panproto.dev · 29/04/2026
The system flags what survives cleanly and what loses information when one language has no analogue for a construct in the other.
100
panproto @panproto.dev · 29/04/2026
Everything above runs on the schema language-general graph. So the same machinery composes lenses across schema language boundaries, like OpenAPI to AsyncAPI or MongoDB to Cassandra.
100
panproto @panproto.dev · 29/04/2026
Very importantly, migrations are composable. You can chain v1 to v2 to v3 to v4 into a single converter that walks records all the way through. When auto-generation needs help on a particular field, you can drop in a value-level transform written in a small built-in expression language.
100
panproto @panproto.dev · 29/04/2026
You can also ask what changed without generating a migration. Panproto classifies each diff entry as breaking or non-breaking, using the rules of the specific schema language. This classification can be run from the panproto CLI in CI to gate PRs that touch a schema before they reach review.
100
panproto @panproto.dev · 29/04/2026
The generated converter goes both directions. The forward direction turns an old record into a new one; the backward direction converts it back, recovering whatever the forward path dropped (if anything) via a side channel called a complement.
100
panproto @panproto.dev · 29/04/2026
What's even better is that adding support for a new schema language just involves writing a description of it. Nothing about the underlying engine needs to change.
100
panproto @panproto.dev · 29/04/2026
That means you can hand it two versions of a schema in any of the languages it supports, and it'll computes the diff, classify whether the change is breaking, and generate a converter that turns old records into new ones.
100
panproto @panproto.dev · 29/04/2026
The main idea is that every schema language it supports translates into one common graph format.
100
panproto @panproto.dev · 29/04/2026
Hello world! Panproto is a data migration framework that can be used with a wide variety of schema languages: ATProto, JSON Schema, OpenAPI, Protobuf, GraphQL, SQL DDL, and a ton more.
panproto.dev
panproto | schematic version control
One engine for schematic version control within and across any schema language. Built on generalized algebraic theories for provably correct migrations.
120