This release brings first-party Godot support and major WebSocket performance improvements. We've also landed significant pipeline optimizations, commitlog enhancements, and expanded our framework coverage.
Features
First-party Godot SDK and Blackholio Tutorial
SpacetimeDB now officially supports Godot with a complete C# SDK integration. The new Blackholio tutorial walks through building a multiplayer asteroids-style game, demonstrating best practices for entity replication, player input handling, and game state management in Godot (#4920).
spacetime new --template godot-csFaster WebSocket Transport with Batched Responses
The WebSocket layer now pipelines and batches responses using the v3 protocol, significantly reducing per-message overhead under high load. Combined with pipelined JavaScript module operations (#4962), WASM module operations (#4973), and a fully pipelined WebSocket send path (#5051), this delivers substantially improved throughput for real-time applications.
HTTP/2 Backend Support
The SpacetimeDB server now supports HTTP/2, enabling more efficient client connections with multiplexed streams and header compression (#5027).
Vue useProcedure Hook
Following the React pattern, Vue developers now have a first-class useProcedure composable for calling SpacetimeDB procedures with full TypeScript support (#4999).
Unity 6 WebGL Compatibility
C# modules and clients now support Unity 6's WebGL runtime, automatically selecting between getWasmTableEntry and dynCall as appropriate for the Unity version (#4961).
Commitlog Performance and Operations
The durability layer gained several improvements:
- Configurable commitlog compression knobs for operational tuning (#5074)
- Compression deferred when under write load to prioritize throughput (#4974)
- Non-blocking compression that doesn't hold locks (#4981)
- Proper handling of empty tail segments on resumption (#4863)
Rust DbContext Generics
Rust modules can now be generic over DbContext, enabling code reuse between client and server contexts while maintaining type safety (#4707).
API Changes
- Deprecated:
ReducerContext::identityis deprecated in favor ofdatabase_identityto clarify that this represents the module's identity, not the caller's (#4843)
Bug Fixes
- Fixed a segfault in the V8 JavaScript runtime that could crash the server (#4986)
- Fixed connection lifecycle callbacks not firing correctly in all disconnection scenarios (#4935)
- Fixed panics during unsubscribe operations (#4938)
- Fixed view auto-migration when using canonical names (#4985)
- Eliminated unnecessary
msynccalls on the entire offset index file, improving write performance (#5018) - Fixed directory fsync issues on Windows snapshots (#4939)
- Fixed auth error details leaking in debug output (#5000)
- Prepared statements are now properly rolled back on transaction failure (#4979)
Infrastructure
- Client binaries are now distributed from AWS instead of DigitalOcean for improved reliability (#5077)
- Internal:
cargo ci dllsrenamed tocargo regen csharp dlls(#4972)
What's Changed
- Remove old script by @bfops in #4928
- CI - C# test scripts accept
SPACETIMEDB_SERVER_URLoverride by @bfops in #4929 - Add railway section to the docs by @aasoni in #4904
- fix: connection lifecycle callbacks by @onx2 in #4935
- [Rust] Add possibility to be generic over
DbContextby @kistz in #4707 - fix(update): check version exists before confirming uninstall by @euxaristia in #4774
- Deprecate ReducerContext::identity in favor of database_identity by @Mr-Dust0 in #4843
- CI - Try to fix Internal Tests on
masterby @bfops in #4942 - CI - version upgrade check happens in
ci.ymlby @bfops in #4950 - fix: unsubscribe panics by @onx2 in #4938
- Fix some warnings in C# by @bfops in #4956
- commitlog: Basic write throughput benchmarks by @kim in #3838
- Minor docs additions based on a discussion in the public Discord by @gefjon in #4963
- Remove distributed benchmark harness by @joshua-spacetime in #4967
- Pipeline js module operations by @joshua-spacetime in #4962
- commitlog: Handle empty tail segments upon resumption by @kim in #4863
- Update keynote readme with updated benchmark figures by @joshua-spacetime in #4975
- Defer commitlog compression when under load by @joshua-spacetime in #4974
- [C#] [Unity 6] Added logic to use either
getWasmTableEntryordynCallfor C# WebGL by @rekhoff in #4961 - Pipeline wasm module operations by @joshua-spacetime in #4973
- Compression stats and commitlog compression function by @kim in #4708
cargo ci dlls->cargo regen csharp dllsby @bfops in #4972- CI - Fix
gen-quickstartcheck by @bfops in #4977 - Rollback prepared statements by @joshua-spacetime in #4979
- commitlog: Don't lock while compressing by @kim in #4981
- Fix segfault in v8 by @coolreader18 in #4986
- Use cli.toml for default start listen address by @0monish in #4900
- Do not defer commitlog compression by @joshua-spacetime in #4987
- snapshot: Don't fsync directories on Windows by @kim in #4939
- Docs: Update docs to new designs by @clockwork-tien in #4917
- LLM Benchmark Improvements + More Evals by @bradleyshep in #4740
- Avoid leaking auth error debug output by @clockwork-labs-bot in #5000
- Abstract
SnapshotWorkeranddurability::Localby @Shubham8287 in #4982 - added useProcedure export to tanstack index file (#4957) by @ClemensWon in #4984
- Keynote 2 benchmark updates & refinements by @bradleyshep in #4997
- CI - enforce minimum pnpm package age by @bfops in #5032
- Do not
msyncthe entire offset index file on every transaction by @joshua-spacetime in #5018 - Pipeline the websocket send path by @joshua-spacetime in #5051
- Fix view auto-migrate with canonical names by @JasonAtClockwork in #4985
- Add vue
useProcedurehook by @kistz in #4999 - Client binaries from DigitalOcean -> AWS by @bfops in #5077
- Add commitlog knobs to server config by @joshua-spacetime in #5074
- Batch websocket responses using the v3 protocol by @joshua-spacetime in #5061
- Undo
.npmrcin templates by @bfops in #5084 - chore: enable HTTP/2 support for backend server by @onx2 in #5027
- Drop serde_json arbitrary_precision from workspace by @clockwork-labs-bot in #5001
- CI -
DOCKERHUB_PASSWORD->DOCKERHUB_TOKENby @bfops in #5096 - Document Steam Session Tickets authentication with SpacetimeAuth by @JulienLavocat in #4908
- Revert recursive mounts from module def by @aasoni in #5098
- Docs: Fix double logos when docs loading by @clockwork-tien in #5101
- Godot SDK and Blackholio tutorial by @lisandroct in #4920
- Update broken links in csharp SDK README by @jdetter in #4952
New Contributors
- @onx2 made their first contribution in #4935
- @euxaristia made their first contribution in #4774
- @Mr-Dust0 made their first contribution in #4843
- @0monish made their first contribution in #4900
- @ClemensWon made their first contribution in #4984
- @lisandroct made their first contribution in #4920
Full Changelog: v2.2.0...v2.3.0