The stability contract
Within a major version, the wire never breaks under you.
Every change inside
RCP/1 is additive and capability-discovered. A
client written against the first release of RCP/1 keeps working against every
later RCP/1 server — it simply won’t see capabilities it doesn’t ask about.- add a new optional field to a request or result;
- add a new capability, method, or error code;
- add a new value to an open-ended enum (behind a capability).
- remove or rename an existing field, method, capability, or error code;
- change the type or meaning of an existing field;
- make a previously optional field required.
RCP/2),
negotiated through the same initialize handshake. See
Versioning for how protocolVersion is negotiated.
Capabilities do the heavy lifting
Because a server advertises exactly what it supports and a client gates every call on those capabilities, new features are invisible until both sides opt in. A five-year-old client and a brand-new engine negotiate down to their shared subset automatically — no version sniffing, no feature flags, no probing.Extensions vs. spec changes
Before proposing a change to the spec, ask whether you need one at all. RCP has two escape hatches for vendor- or deployment-specific behaviour that require no spec change:_meta passthrough
Every message carries an optional
_meta object. Namespace your keys and
attach anything — a conforming peer ignores what it doesn’t understand.Reserved x- fields
Prefix experimental fields with
x-. They travel the wire and round-trip
cleanly without ever colliding with a future standard field.The change process
1
Open a discussion
File an issue describing the problem and the proposed wire change. Start with
the use case, not the JSON — the shape usually falls out of it.
2
Classify it
Editorial changes (clarifications, examples, tightened wording) touch no
message shape and merge quickly. Normative changes touch the wire and go
through the full process below.
3
Prove it additive
Show that the change is capability-discovered and that an existing client
keeps working. If it can’t be, it is an
RCP/2 proposal.4
Land spec, schema, and tests together
A normative change updates
spec/rcp-1.0.md, schema/rcp-1.0.json, and the
conformance suite in one reviewable change.5
Update the reference SDKs
All four SDKs move together so the byte-for-byte interop guarantee holds. A
feature that ships in one SDK but not the others is not done.
Decision-making
RCP is developed in the open on GitHub. Proposals are discussed on public issues and pull requests; decisions and their rationale are recorded there. Maintainers steward the spec toward consistency, minimalism, and the stability contract above — the guiding question for any change is “does a thin client still stay thin, and does a deployed client keep working?”RCP is a young standard and its governance is intentionally lightweight. As the
ecosystem grows, this page will grow with it. If you want to help shape that
process, get involved.