Sun Aug 16 2026
Introducing PXP, the application-layer protocol
Portal v0.13.0 decouples the transfer engine into pxp — a headless Rust library any front-end can embed — and publishes formal RFC-style specs.
Portal started as a single CLI that did everything: discovery, handshake, streaming, progress bars, prompts. It worked, but it couldn't be anything else — no GUI could reuse it, no daemon, no mobile.
v0.13.0 fixes that.
Two crates
pxpv0.1.0 — headless, consumer-agnostic Rust implementation of the Portal Transfer Protocol. Noprintln!, no prompts, no filesystem config.hiverra-portalv0.13.0 — theportalCLI you already use, now a thin wrapper aroundpxp.
Same binary, same commands. Different architecture underneath.
What pxp gives you
As a library consumer you get traits, not assumptions:
PxpError(viathiserror) — typed errors you can match and recover from, not opaqueanyhowstrings.TransferProgress/ItemProgress— implement your own progress:indicatifbars, GUI meters, logs, telemetry.ConflictResolver— you decide overwrite / rename / skip. The CLI wires this toinquire::Select; your app wires it however you want.- Zero-config discovery — UDP multicast + broadcast beacons, built in.
The CLI is just one implementation of these traits.
Protocol specs
Rendered in the docs and as raw drafts on GitHub under /spec:
- Overview — roles and architecture
- Discovery — UDP beacon schema
- Handshake — TCP session verification
- Manifest — transfer metadata
- Streaming — TAR payload, virtual metadata, conflicts
Shipping
@hiverra/portal now publishes via OIDC trusted publishing from GitHub Actions (SLSA provenance, no long-lived tokens).
Release: v0.13.0 · Diff: v0.12.0...v0.13.0