Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 0 additions & 25 deletions .changeset/large-room-scale.md

This file was deleted.

26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# kit

## 2.5.0

### Minor Changes

- ae1e169: Large-room scale: the guest SDK now supports rooms of up to 1024 players.

- **Per-index frame baselines raised 16 → 1024, allocated lazily.** The SDK
used to silently drop `Send` for a roster index ≥ 16; the per-slot baseline
table is now sized for 1024 consumers but each ~45 KiB slot is allocated on
first commit, so guest linear memory tracks the ACTIVE roster, not the cap.
A broadcast (`Identical`) reconciles only allocated slots; a never-sent-to
slot recovers via its first send opening with a keyframe (unconditionally
accepted) — the same path as a roster change. No wire/ABI change.
- **Cross-callback roster cache.** The host re-sends the full member list in
every callback payload, but rosters change only on join/leave/index-shift.
The SDK now skims the member section's raw bytes (new additive
`wire.(*Rd).SkipStr`) and compares them to the previous callback's: on a
match the previously decoded `[]Player` is reused with zero allocation;
only a real roster change re-decodes. This replaces the roster fingerprint
hash (the byte compare is strictly stronger) and removes an O(members)
allocation from EVERY callback — which, under `-gc=leaking`, leaked the
roster at callback rate and OOM'd long-lived large rooms (~100 KB/callback
at 1000 players). Lifetime contract: the slice from `Room.Members()` is
valid for the duration of the callback; copy `Player` values you retain
(long-lived state should be keyed by `AccountID`, as before).

## 2.4.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kit",
"version": "2.4.0",
"version": "2.5.0",
"private": true,
"description": "Version management for the shellcade gamekit (Go module + CLI). Versions and changelogs are driven by changesets; binaries by GoReleaser.",
"scripts": {
Expand Down
2 changes: 1 addition & 1 deletion rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

[package]
name = "shellcade-kit"
version = "2.4.0"
version = "2.5.0"
edition = "2021"
# #[unsafe(no_mangle)] (emitted by shellcade_game! so expansions survive
# edition-2024 game crates) stabilized in 1.82.
Expand Down
Loading