tool / released

px

Enroll once. Exchange files by device name.

File exchange for small pools of trusted devices, with persistent identities, named peers, and direct encrypted transfers.

A laptop and compact server exchange documents directly, with separate thin paths to an overhead coordination device.

px is a personal project for repeated file exchanges among devices that can be trusted together. It keeps the relationship between those devices without turning a single transfer into a VPN, remote administration session, or synchronized directory tree.

A self-hosted px-server coordinates membership, online presence, and connection setup. The peers exchange file data directly through encrypted WebRTC DataChannels. Each device runs a per-user agent, and the CLI addresses peers by name within a selected context.

The 2026.09.07.1 release includes platform archives, installer scripts, and SHA-256 checksums. Review the setup documentation before enrolling devices. The workflow below assumes an operator-managed HTTPS endpoint and approved, running agents; PX does not provide a public hosted exchange service.

The trust model is a flat pool: active members can approve new members and use the operations enabled by other receiving contexts. Offered files, incoming files, and optional put targets have separate filesystem roots, but there are no per-peer roles or path ACLs. Choose narrow roots and enroll only devices whose membership can be trusted together.

Release 2026.09.07.1 is direct-only. Restrictive NAT or blocked UDP can prevent transfers, and there is no offline queue or TURN fallback in that release. The coordinator must remain available even while bytes travel directly between peers. New contexts use Google’s STUN service unless configured otherwise; STUN assists address discovery and does not carry file payloads.

Ordinary sends favor a direct visible write. For verified content and retained recovery state, use send --recoverable. Recovery preserves the operation’s identity and can reconcile an uncertain result; retransmitting a payload still begins at byte zero. The recovery guide explains when to inspect or retry an operation.

Persistent trust. Explicit file operations.

01

Named, enrolled peers

Approve devices into a trusted pool and address them by stable names within a context, rather than pairing again for every transfer.

02

Direct encrypted transfers

WebRTC DataChannels carry file operations between peers. The self-hosted rendezvous server coordinates membership, presence, and signaling without carrying file payloads.

03

Separate filesystem boundaries

Browse and retrieve offered files, send into an incoming inbox, or enable a separate put root. File exchange does not grant a remote shell or general network access.

04

Fast sends by default

A one-pass send writes directly to a new destination without retained recovery state. Existing files are refused; interruption can leave a partial file.

05

Explicit recovery contract

Opt into recoverable sends for content verification, staged publication, and retained operation state. Payload retries restart at byte zero, not the last received offset.

06

Cross-platform CLI and agent

Release archives include px and px-server for Linux, macOS, and Windows on amd64 and arm64. A per-user agent owns connections and state; the CLI issues operations.

From trusted membership to a bounded exchange.

  1. 01

    Enroll

    Configure an HTTPS rendezvous deployment, install the local agent, and approve each device with deliberately chosen file roots.

  2. 02

    Find

    List online devices in an enrolled context. Presence does not guarantee that the network permits a direct connection.

    px --context home peers
  3. 03

    Send

    Send a regular file to an online peer's inbox. Both agents must already be enrolled; vm is the receiver's device name.

    px --context home "@vm" send ./artifact.tar.zst
  4. 04

    Retrieve

    Fetch a regular file beneath the peer's offered root into an explicit local destination.

    px --context home "@vm" get reports/result.csv --output ./result.csv

Inspect the implementation.

The repository remains the source of truth for installation, current behavior, and development status.

View px on GitHub