This page tracks API surface parity between the official Pilot Protocol SDKs for Python, Node.js, and Swift. It details feature availability in each SDK and the roadmap to close gaps.
Status
Node.js: Package `pilotprotocol` on npm. Feature complete. Includes TypeScript types, `using` support, and `Buffer` I/O. It is a reference surface alongside Python.
Python: Package `pilotprotocol` on PyPI. Feature complete. Includes full type hints (`py.typed`), context managers, and snake_case naming.
Swift: Package `sdk-swift` (SwiftPM). Supports core trust and datagrams. It uses an embedded daemon (XCFramework) with 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
Lifecycle (construct, dispose): Supported in Node.js, Python, and Swift. Each SDK uses its native idiom (`using`, `with`, `deinit`).
Daemon admin — `info`, `health`: Supported in Node.js, Python, and Swift.
Daemon admin — `rotateKey`: Supported in Node.js and Python. Planned for Swift.
Trust — initiate handshake, list trusted peers: Supported in Node.js, Python, and Swift.
Trust admin — approve/reject/pending/revoke: Supported in Node.js and Python. Planned for Swift.
Trust convenience — `waitForTrust`: Supported in Swift and Python (`wait_for_trust`). Planned for Node.js.
Datagrams — `sendTo`, `recvFrom`: Supported in Node.js, Python, and Swift. Swift uses `send(to:port:data:)` and returns a typed `Datagram`.
Datagrams — `broadcast`: Supported in Node.js and Python. Planned for Swift.
Streams — `dial`, `listen`, `Conn`, `Listener`: Supported in Node.js and Python. Planned for Swift.
Registry admin — hostname / visibility / deregister / tags / webhook: Supported in Node.js and Python. Planned for Swift.
Networks — list/join/leave/members/invite/respond: Supported in Node.js and Python. Planned for Swift.
Managed networks — status/forceCycle/reconcile: Supported in Node.js and Python. Planned for Swift.
Managed networks — score/rankings: Removed in v1.10; the symbols are no longer present in shipped libpilot builds.
Policy — get/set: Supported in Node.js and Python. Planned for Swift.
Member tags — get/set: Supported in Node.js and Python. Planned for Swift.
High-level services — `sendMessage`, `sendFile`, `publishEvent`, `subscribeEvent`: Supported in Node.js and Python. Planned for Swift.
FFI loader — `findLibrary` / `loadLibrary`: Supported in Node.js, private in Python, and not applicable to Swift. Swift embeds the library in an XCFramework.
Typed response structs (`Config`, `StartResult`, `Datagram`, `Error`): A Swift-only idiom. Node.js and Python return untyped `Record<string, unknown>` or `dict[str, Any]` from the same RPCs.
What counts as a gap
Naming differences across languages are not considered gaps. Idiomatic equivalents are collapsed into a single canonical feature.
Constructors: `new Driver()` (Node), `Driver()` (Python), and `Pilot.start(config)` (Swift) are equivalent operations.
Cleanup: `driver.close()`, `pilot.stop()`, Python's `with`, and Node's `using` are equivalent teardown calls.
Naming convention: Python's `send_message` maps to Node's `sendMessage`.
Datagram receive: Node and Python return a `dict`, while Swift returns a typed `Datagram` struct. Both surface the same underlying RPC.
A real gap is an operation that one SDK does not expose.
Full method matrix
The complete row-per-method matrix is generated by a deterministic script in the main protocol repo at `scripts/parity-audit/`. Re-running the script against newer SDK commits regenerates the matrix locally to the `./inventory/` directory.
Roadmap
The target is full parity across all three SDKs, except for the FFI loader and Swift's typed response structs.
Swift: Gap-fill work is tracked to add streams, networks, managed networks, policy, member tags, registry admin, trust admin, and high-level services. The wire protocol support exists, but the Swift surface to expose it is missing.
Node.js: Add `waitForTrust(peerId, timeoutMs)` — shipped in Swift and Python. Currently, Node.js users must poll `pendingHandshakes`.
Cross-SDK versioning is documented in the GOVERNANCE file in the main protocol repo. All three SDKs share the same `MAJOR.MINOR` version line, with coordinated releases when the wire protocol changes.