Skip to content

Landscape refresh, 2026-09

Verified state of the incumbents Rayfold draws from, with sources. Compiled 2026-09-09.

1. HTTP QUERY method

2. Model Context Protocol

3. Rocicorp Zero

  • Zero 1.0 shipped 2026-06-08. https://www.infoq.com/news/2026/06/zero-version-1/
  • Synced queries: defined once for client+server; client runs locally, zero-cache asks the app server for a ZQL expression (server-only filters), runs it, and streams row changes from Postgres logical replication. The query is the subscription; deactivated queries keep syncing for a TTL. https://zero.rocicorp.dev/docs/synced-queries
  • Mutators run optimistically on the client, then re-execute server-side inside a transaction; client effects are rebased once replication returns; permissions are plain server code. https://zero.rocicorp.dev/docs/mutators
  • Apache-2.0, self-hostable; cloud tiers from $30/mo.

4. Convex

5. Electric / Replicache / PowerSync

6. Connect protocol

  • Connect-Protocol-Version: 1; unary idempotent RPCs may use GET with message, encoding, base64, compression, connect=v1 query params. https://connectrpc.com/docs/protocol/
  • Streams use 5-byte envelopes; server/client streaming works on HTTP/1.1, bidi needs HTTP/2; streams always return HTTP 200 with errors in a trailing EndStreamResponse.
  • Errors: the 16 gRPC codes as JSON {code, message, details[]}; unary HTTP status derived from code.
  • Buf breaking-change categories, strictest to loosest: FILE, PACKAGE, WIRE_JSON, WIRE. https://buf.build/docs/breaking/rules/

7. GraphQL

8. RFC 9457 Problem Details

9. IETF RateLimit headers

10. Cap'n Proto

  • Promise pipelining: a result can be the target of a new request before the server has answered the first, collapsing dependent calls into one round trip. Capabilities: references both designate an object and confer permission. https://capnproto.org/rpc.html

11. Compression Dictionary Transport

12. WebTransport

13. Apollo GraphOS field usage

Implications for Rayfold (applied in the spec)

  1. QUERY is an RFC: Rayfold reads are designed as QUERY with body, with a mandatory POST + Rayfold-Safe: true fallback for browsers (04 §4).
  2. Advertise Accept-Query; ETag is a hash of the payload so body-keyed CDN caching works when it lands (07 §2).
  3. Core is stateless like MCP 2026-07-28; the MCP bridge mirrors op names into headers and adopts the input_required retry pattern for human-in-the-loop instead of server-initiated requests (10).
  4. MCP tool definitions use JSON Schema 2020-12 for input and output; the bridge emits structuredContent and ttlMs/cacheScope from @cache (10).
  5. Sync follows Zero/Convex: the query is the subscription; versioned transitions over one stream; optimistic commands rebase on ack (08).
  6. An Electric-style plain-HTTP shape log (offset/handle, up-to-date, long-poll or SSE) is the lowest-common-denominator sync transport (08).
  7. Error model: RFC 9457 body for batch-level failures, Connect's 16 codes as the protocol code set, HTTP 200 for frame streams (05).
  8. GET for single idempotent queries with base64url-encoded args, like Connect (04 §4). Rayfold defines its own incremental delivery (defer frames) rather than waiting on GraphQL's.
  9. Trusted shapes (SHA-256 allowlist) are in Core now; GraphQL's persisted-documents appendix is still unmerged (02 §3).
  10. RateLimit headers are emitted but marked provisional (04 §4).
  11. WebTransport is Baseline, so it is the bidirectional transport tier; compression dictionaries are an opt-in optimisation in the RB extension (09).

Released under the Apache-2.0 license.