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

Feature category Node Python Swift Notes
Lifecycle (construct, dispose)✅✅✅Each SDK uses its native idiom (using, with, deinit).
Daemon admin — info, health✅✅✅
Daemon admin — rotateKey✅✅—Planned for Swift.
Trust — initiate handshake, list trusted peers✅✅✅
Trust admin — approve/reject/pending/revoke✅✅—Planned for Swift.
Trust convenience — waitForTrust—✅✅Shipped in Swift and Python (wait_for_trust). Planned for Node.
Datagrams — sendTo, recvFrom✅✅✅Swift uses send(to:port:data:) and returns a typed Datagram.
Datagrams — broadcast✅✅—Planned for Swift.
Streams — dial, listen, Conn, Listener✅✅—Planned for Swift.
Registry admin — hostname / visibility / deregister / tags / webhook✅✅—Planned for Swift.
Networks — list/join/leave/members/invite/respond✅✅—Planned for Swift.
Managed networks — status/forceCycle/reconcile✅✅—Planned for Swift.
Managed networks — score/rankings———Removed in v1.10 — the symbols are no longer present in shipped libpilot builds.
Policy — get/set✅✅—Planned for Swift.
Member tags — get/set✅✅—Planned for Swift.
High-level services — sendMessage, sendFile, publishEvent, subscribeEvent✅✅—Planned for Swift.
FFI loader — findLibrary / loadLibrary✅privaten/aIntentional: Swift embeds the library in an XCFramework — no loader needed.
Typed response structs (Config, StartResult, Datagram, Error)n/an/a✅Swift 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 — is generated by a deterministic script in the main protocol repo (scripts/parity-audit/). Re-running it against newer commits of the three SDKs regenerates the matrix locally (the script writes to ./inventory/).

Roadmap

End-state target: full parity across all three SDKs, except for the two intentional rows above (the FFI loader 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.