Flow

SDK Parity

Where each Pilot Protocol SDK stands today and what's planned to close the gap.

Three official SDKs ship under one brand: Python, Node.js, and Swift (iOS/macOS). They all speak the same wire protocol — but they don't yet expose the same public API surface. This page tracks where they line up and where they don't.

Status at a glance

SDKPackageCoverageNotes
Node.js pilotprotocol on npm Feature complete TypeScript types, using support, Buffer I/O. The reference surface alongside Python.
Python pilotprotocol on PyPI Feature complete Full type hints (py.typed), context managers, snake_case naming.
Swift sdk-swift (SwiftPM) Core trust + datagrams Embedded daemon (XCFramework, no separate process). Streams, networks, managed networks, policy, member tags, high-level services, and most registry admin are not yet exposed.

Summary by feature category

Updated against sdk-node@d02bd00, sdk-python@93584ea, sdk-swift@0d49f87 (audited 2026-05-28).

Feature category Node Python Swift Notes
Lifecycle (construct, dispose)Each SDK uses its native idiom (using, with, deinit).
Daemon admin — info, health
Daemon admin — rotateKeyPlanned for Swift.
Trust — initiate handshake, list trusted peers
Trust admin — approve/reject/pending/revokePlanned for Swift.
Trust convenience — waitForTrustPlanned for Node and Python. Currently Swift-only.
Datagrams — sendTo, recvFromSwift uses send(to:port:data:) and returns a typed Datagram.
Datagrams — broadcastPlanned for Swift.
Streams — dial, listen, Conn, ListenerPlanned for Swift.
Registry admin — hostname / visibility / deregister / tags / webhookPlanned for Swift.
Networks — list/join/leave/members/invite/respondPlanned for Swift.
Managed networks — score/status/rankings/cycle/reconcilePlanned for Swift.
Policy — get/setPlanned for Swift.
Member tags — get/setPlanned for Swift.
High-level services — sendMessage, sendFile, publishEvent, subscribeEventPlanned for Swift.
FFI loader — findLibrary / loadLibraryprivaten/aIntentional: Swift embeds the library in an XCFramework — no loader needed.
Typed response structs (Config, StartResult, Datagram, Error)n/an/aSwift idiom. Node/Python return untyped Record<string, unknown> / dict[str, Any] from the same RPCs.

What counts as a gap

Naming differences across languages are not gaps. The matrix collapses idiomatic equivalents into a single canonical row:

A real gap is an operation that one SDK does not expose at all. Those are the rows in the matrix marked unintentional — every one of them has a follow-up ticket to close it.

Full method matrix

The complete row-per-method matrix — including exact signatures and rationale for each gap — lives in the canonical spreadsheet:

SDK Parity Matrix — Google Sheet

The matrix is generated by a deterministic script in the main protocol repo (scripts/parity-audit/). Re-running it against newer commits of the three SDKs produces an updated matrix.csv — drop it into the Sheet to refresh.

Roadmap

End-state target: full parity across all three SDKs, except for the three intentional rows above (FFI loader, socket-path default, and Swift's typed response structs).

Cross-SDK versioning is documented in the GOVERNANCE file in the main protocol repo: all three SDKs share the same MAJOR.MINOR line, with coordinated releases when the wire protocol changes.