Versioning
What is published
| Version | Date | |
|---|---|---|
| 0.2.3 | 2026-10-20 | The current release. npm install @rayfold/server gives you this, and dev.rayfold:*:0.2.3 on Maven Central. The explorer as a working tool (stop, status, result views, completion, a shape builder, tabs and history), and a reserved path that a server does not serve answering 404. |
| 0.2.2 | 2026-10-09 | Unit testing without a network in every supported language (rayfold-test, @rayfold/client/testing), a clock for the JVM server, REST wire names, and many fixes found by a test-depth audit of both runtimes. |
| 0.2.1 | 2026-09-23 | A live query's re-runs load their fields again. |
| 0.2.0 | 2026-09-19 | Tooling: @rayfold/angular, server identity and /stats, counters, published conformance vectors. |
| 0.1.0 | 2026-09-15 | The first release. |
Before 1.0 only the latest minor version gets fixes, so a new project starts on 0.2.3. The table below says which feature arrived in which version, for anyone still on 0.1.0.
What each version added
Everything the protocol itself does arrived in 0.1.0: batches, shapes, loaders, commands with declared errors, patches, live queries, streams, policies, caching, idempotency, uploads, capability tokens, RB, MCP, @http routes and OpenAPI, relays, health and readiness, the CLI and the editor server. Later versions add tooling and fix defects. Core 0.1 is frozen, so none of them changes what a request means.
| Feature | Since | Where |
|---|---|---|
| The protocol, both runtimes, and every client package | 0.1.0 | Get started |
@rayfold/react | 0.1.0 | React |
@rayfold/postgres, @rayfold/otel, the JDBC and Spring Boot modules | 0.1.0 | Postgres, Tracing |
@rayfold/angular | 0.2.0 | Angular |
Server identity and GET {base}/stats | 0.2.0 | Deployment |
Counters and MemoryCounters | 0.2.0 | Deployment |
maxStreamItems on the TypeScript server (the JVM always had one) | 0.2.0 | Streams |
closeTimeoutMs, so a server still connecting to its relay can shut down | 0.2.0 | CHANGELOG |
| Published conformance vectors | 0.2.0 | Conformance |
rayfold-test on the JVM and @rayfold/client/testing | 0.2.2 | Testing |
A clock for the JVM server (now, .clock(...), a Spring Clock bean) | 0.2.2 | Testing |
@http(name:) wire names, and rayfold import openapi keeping them | 0.2.2 | REST routes |
rayfold lock keeping ordinals by name, with highestOrdinals, and check --against a lock comparing them by name | 0.2.2 | Command line |
rayfold import openapi binding request bodies, reading path and $ref parameters, and reading an optional schema as X? | 0.2.2 | Coming from REST |
The builder's .implements(...) and a field's .args(...) | 0.2.2 | @rayfold/builder |
typedClient and Select typing a call or field with no shape as the default view | 0.2.2 | TypeScript types |
| Angular holding the application unstable until the first answer | 0.2.2 | Angular |
The WebSocket schema check, closing a socket on another schema with 4409 | 0.2.2 | The binary format |
maxBuffered on the TypeScript server, and the Kotlin client reopening a dropped live query (onError) | 0.2.2 | Live updates |
maxBody on the Node MCP handler | 0.2.2 | MCP |
| The offline queue draining at startup (TypeScript) and behind a new command (both clients) | 0.2.2 | Offline |
| The explorer's Stop, status line, Result and Tree views, completion, shape builder, tabs, history and headers | 0.2.3 | Explorer |
CHANGELOG.md has the rest, including the defects each version fixed.
Three things carry a version, and they move independently.
Packages
The npm packages (@rayfold/*) and the Maven artifacts (dev.rayfold:*) share one version number, set everywhere at once by node scripts/set-version.mjs <version>. They follow Semantic Versioning:
- Before 1.0, a minor version (0.1 to 0.2) may change public APIs; the changelog says what changed and how to move. A patch version (0.1.0 to 0.1.1) only fixes bugs and security problems.
- From 1.0, breaking changes wait for a major version, and anything removed is deprecated for at least one minor version first.
- Only the latest minor version gets fixes (SECURITY.md).
A published version is never replaced: a mistake is fixed by the next patch version.
The protocol
The rayfold field of an envelope and of the manifest names the protocol version ("0.1"). Core 0.1 is frozen with the first release; extensions are drafts until they are declared stable. spec/process.md says what may change in each and how changes are proposed. A package release may add or change draft extensions; it never changes what a Core 0.1 request means.
Your schema
APIs built on Rayfold do not carry version numbers. A schema evolves additively: add fields, operations and enum values; mark what is going away with @deprecated(reason: "...", sunset: "2027-06-30", replacement: "..."); and let rayfold check refuse removals before their sunset date and changes that would break existing clients (spec 11).