Stability & deprecation
What 2.x promises, in one place — the consumer-facing copy of the policy CONTRIBUTING.md holds for contributors.
The public surface
The exports subpaths are the public API. Everything reachable through @alexify/wrpc and its subpaths (/ws, /engine, /uws, /fastify, /express, /scaling, /sse, /query, /auth, /deflate, /webrtc, /wt, /encryption, /broker, /broker/redis, /broker/nats, /broker/amqp, /broker/kafka), as typed by the hand-maintained root .d.ts files, is stable under semver — except where a subpath is listed under the carve-outs below. Deep imports into src/ are not addressable and not supported: the module layout may change in any release (and has — rpc/core.js split twice already).
Semver, spelled out
- Patch — fixes; no observable API change.
- Minor — additive API, additive wire fields, new options with safe defaults. Deprecations are announced here: a deprecated API keeps working for at least one minor, with the note in the CHANGELOG and the docs.
- Major — the only place a stable API may break or a deprecated one may be removed.
@experimental carve-outs
Five areas are marked @experimental in the .d.ts files and may change in a minor (described in the CHANGELOG):
- the telemetry writer shapes and metric set (the
telemetryoption, and theRpcServer#otelgetter the fastify adapter brackets delegated routes with) — the signals will keep improving; - the engine port internals beyond the documented
WrpcSocketcontract (capabilitiesin particular); - WebTransport, whole: the
wtclient transport and itswtconnect option, the@alexify/wrpc/wtsubpath, and the control-stream framing it speaks — Node has no WebTransport of its own yet, and the carrier will follow what lands. - the message-broker family, whole:
@alexify/wrpc/brokerand every@alexify/wrpc/broker/*adapter subpath, their capability contracts, the broker metrics, thebrokerclient transport and its broker binding — until every adapter has shipped (Message brokers). - application-level encryption, whole: the
@alexify/wrpc/encryptionsubpath and everyencryptionoption it feeds — the server's and the client's session encryption,rooms.encryption/cluster.encryption, the broker bindings',sealedStore— withClient.encryption,RpcServer.encryptionKey()/encryptionRequiredandattach({ encrypted }), and the session encryption, sealed requests and broker sealing wire formats — until the formats have been reviewed against real deployments (Encryption). TLS is not in this list: it is the platform's.
The wire protocol's own, stronger promise
The wire protocol is documented at revision 2, in three tiers: the packet core, which never breaks inside a major — 2.0 added one thing to it, the framed messages that carry bytes as bytes, and that is what the revision named on the wire negotiates: wrpc.v2 on a WebSocket and wrpc-version: 2 on HTTP between two 2.x ends, wrpc.v1 with a 1.0 peer, with nothing to configure; the carrier conventions, additive under the same rule, of which the ones a 1.0 peer never saw are badged since 2.0 and listed with what happens when the versions meet under Changes since 1.0; and the experimental sections, which follow the carve-outs above. An independent implementation written against the reference keeps working for the life of the major version.