diff --git a/CLAUDE.md b/CLAUDE.md index e4d8686..7a1798f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,6 +44,20 @@ - Changesets manage versions and changelogs + +Supported client builds live in `SUPPORTED_GAME_VERSIONS` +(`packages/domain/src/presence-db.ts`); `GAME_VERSION` is the default the stack targets. + +- `20230414` — default, official. Manifest `7859140924515540835` (2023). +- `20250718.01` — beta, official. Manifest `1151455856673601091`; reaches this server via + the [patch-2025](https://github.com/recflare/patch-2025) patch. +- `20250424.01`, `20231207`, `20230616` — alpha. + +Builds are date-stamped (`YYYYMMDD[.NN]`) so they order as plain strings; several +surfaces gate on "newer than `20230414`" (econ storefront catalog, `api` event tags, +`rooms` featured rooms) rather than on an explicit list. + + - Use tabs for indentation, spaces for alignment - Type imports use `import type` diff --git a/README.md b/README.md index 788e6e6..27b78a5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ image -![example branch parameter](https://github.com/djdevin/recflare/actions/workflows/test.yml/badge.svg?branch=main) +![badge](https://github.com/djdevin/recflare/actions/workflows/test.yml/badge.svg?branch=main) RecFlare is a scalable implementation of RecNet — the Rec Room backend — built on Cloudflare Workers. It implements the network services the Rec Room client talks @@ -36,15 +36,24 @@ resulting in bugs getting fixed faster. I hope. ## Game client -See [RecFlare Client](https://github.com/djdevin/recflare-client) +See [RecFlare Client](https://github.com/djdevin/recflare-client) for the official RecFlare build. -RecFlare is compatible with the -[RecNet Plugin](https://github.com/djdevin/recnet-plugin) and the build of Rec -Room with manifest `7859140924515540835` (around 2023). Other client or game versions may expect -different endpoints and response shapes and are not supported. +These game builds are supported: + +| Build | Manifest | Support | +| ------------- | --------------------- | --------------------------------------------------------------------------------------- | +| `20230414` | `7859140924515540835` | **Default**, official — the 2023 build the rest of the stack targets | +| `20250718.01` | `1151455856673601091` | **Beta**, official — use the [patch-2025](https://github.com/recflare/patch-2025) patch | +| `20250424.01` | | Alpha | +| `20231207` | | Alpha | +| `20230616` | | Alpha | + +Alpha builds get past the version check and largely work, but nothing else in the +stack targets them, so expect protocol differences. Other client or game versions +may expect different endpoints and response shapes and are not supported. Generally speaking any client that effectively rewrites the nameserver with the -right mods can be used with this server. +right mods (see [RecNet Plugin](https://github.com/djdevin/recnet-plugin), [2025 patch](https://github.com/recflare/patch-2025)) can be used with this server. ## Services @@ -58,9 +67,11 @@ Want to run it yourself? See [DEPLOYING.md](DEPLOYING.md) ### What year is this for? -This works with 2023 clients. It has been tested with manifest `7859140924515540835`. Other clients may not work. +Most 2023 and 2025 clients. A few older builds work at +alpha quality — see the table in the "Game client" section above. Other clients may not +work. -See the "Client" section above for instructions on how to modify a client to connect to this server. +See the "Game client" section above for instructions on how to modify a client to connect to this server. ### Can I run this locally on my PC? @@ -70,11 +81,13 @@ See "Run the development microservices" above. It may be possible later as Wrang ### Can I use this to make my own server? -Yes, that's the point. Just set your custom domain and deploy it. +Yes, that's the point. See [DEPLOYING.md](DEPLOYING.md) ### Is there an admin panel? -Not yet. But there could be. +Yes, the server comes bundled with a simple web panel with more functionality being added. + +There are also [CLI tools](CLI.md) you can use for admin tasks like granting roles. ### Can I copy this project and modify it? @@ -89,15 +102,20 @@ keeps those in sync: `pnpm` workspaces share dependencies, `@repo/` packages share code, Turborepo runs build/test/lint with a single cached task graph, and cross-service changes land in one atomic commit. +This makes it easier to deploy the whole stack at once or a smaller selection +of microservices to avoid downtime events. + ## Credits -I started this after the official servers shut down, so I could only see the +I started this soon after the official servers shut down when I saw there were +only monolithic servers usually running on one server. I could only see the request shapes coming from the game client. I used many different projects as resources to get response shapes, logic examples, enums, etc. They all had missing pieces. Again, another reason to come together on one project and stop gatekeeping. -Unfortunately, they were all leaked code except for -[CannedNet](https://github.com/CannedNet/CannedNet), [DorkNet](https://github.com/DorkSquadRR/DorkNet), and jordanparki7's postman -collection of RecNet APIs which is gone for some reason. So I will not list the -leaks publicly. +- [CannedNet](https://github.com/CannedNet/CannedNet) +- [DorkNet](https://github.com/DorkSquadRR/DorkNet) +- jordanparki7's postman collection of RecNet APIs which is gone for some reason. +- Leaked C# projects I won't list (for response shapes) +- Claude and my [wire shapes skill](https://github.com/recflare/skills/blob/main/.claude/skills/wire-shapes/SKILL.md) diff --git a/packages/domain/src/presence-db.ts b/packages/domain/src/presence-db.ts index cc2d5ba..d61929e 100644 --- a/packages/domain/src/presence-db.ts +++ b/packages/domain/src/presence-db.ts @@ -33,21 +33,25 @@ export const PRESENCE_TTL_SECONDS = 900 export const GAME_VERSION = '20230414' /** - * Client builds `/api/versioncheck/v4` answers "current" for. `GAME_VERSION` is the one - * the rest of the stack targets and reports for itself; the others are later clients - * that talk close enough to the same protocol to get past the update prompt. + * Client builds `/api/versioncheck/v4` answers "current" for, in the support tiers the + * README publishes. They talk close enough to the same protocol to get past the update + * prompt; how much beyond that is tested differs by tier: * - * DEBUGGING ONLY beyond `GAME_VERSION`: this is not a supported-version list. Nothing - * else in the stack targets those builds, so a client waved through here can still hit - * protocol differences the version check would otherwise have caught. Trim it back to - * `GAME_VERSION` alone before anyone but us is playing. + * - `GAME_VERSION` (`20230414`, manifest `7859140924515540835`) is the DEFAULT — the + * build the rest of the stack targets and the one it reports for itself. + * - `20250718.01` (manifest `1151455856673601091`, reached through the `patch-2025` + * patch) is BETA — supported, and the build the "newer than `20230414`" gates in + * `econ`/`api`/`rooms` are written and tested against. + * - The rest are ALPHA: waved past the version check, but nothing else in the stack + * targets them, so they can still hit protocol differences this check would otherwise + * have caught. Expect breakage rather than treating a bug there as a regression. */ export const SUPPORTED_GAME_VERSIONS: string[] = [ - GAME_VERSION, - '20230616', - '20231207', - '20250424.01', - '20250718.01', + GAME_VERSION, // default + '20250718.01', // beta + '20230616', // alpha + '20231207', // alpha + '20250424.01', // alpha ] /** Whether a client-supplied build (the version check's `?v=`) is one we serve. */