2.5.0 graduates procedures to stable availability, improves billing metric accuracy, and includes CLI usability fixes.
Features
Procedures are now stable (Ungated from unstable)
Procedures-scheduled, transaction-capable server-side functions-and the outgoing HTTP client (ctx.http) are now available without opting into unstable features (#5164).
- Rust: The
#[spacetimedb::procedure]macro,ProcedureContext,with_tx/try_with_tx, and scheduled procedures now work withoutfeatures = ["unstable"]. - C#:
[Experimental("STDB_UNSTABLE")]removed fromProcedureContext.WithTx/TryWithTx. - C++: Procedure ABI, transaction execution, and outgoing HTTP client are now available without
SPACETIMEDB_UNSTABLE_FEATURES.
HTTP handlers/webhooks, views, and RLS (client_visibility_filter) remain gated behind unstable.
Primary key support for procedural views (C#)
Following Rust and TypeScript support in v2.4.1, C# modules can now declare primary keys on procedural views, enabling clients to receive OnUpdate events when subscribed to them (#5246).
Layout-altering automigrations for event tables
Event tables now support a broader set of schema- and layout-altering automigrations, including column removal, reordering, and type changes that would be rejected for regular tables (#5269). This enables more flexible schema evolution for event-only tables without requiring manual migration.
Performance & Correctness
- Deterministic row insertion with BTreeSet storage (#5071): Non-full pages are now stored in a
BTreeSetsorted by available var-len granules rather than an unsortedVec. This fixes accidentally-quadratic behavior during bulk inserts and ensures deterministic row insertion locations across datastore restarts
Bug Fixes
wasm_memory_bytesmetric accuracy (#5131): The metric now correctly reports memory for all Wasmtime instances (cooperatively updated via increment/decrement) and no longer includes V8 instances. Billing impact: billing code should now charge for the sum ofwasm_memory_bytes+v8_used_heap_size_bytes. Expect recorded usage per database to increase as we now account for all instances, not just one.- Template version constraints (#5228): All templates now consistently use
major.minorversion constraints. Previously, inconsistent version constraints could cause the CLI to initialize templates expecting versions that did not exist. - CLI
publish --delete-dataconfig fallback (#5256): Removes the forced positional database name requirement, allowingspacetime.jsonto provide the database name. - CLI
callwith hex Identity arguments (#5254): Thecallcommand now accepts hex strings forIdentityparameters without requiring full JSON tuple syntax.
What's Changed
- CI - fix LLM benchmark workflows by @bradleyshep in #5181
- Ungate procedures from the
unstablefeature by @cloutiertyler in #5164 - docs: consolidate outstanding docs fixes by @clockwork-labs-bot in #5166
- Fix durability test flake by @joshua-spacetime in #5233
- Fix confirmed reads test flake by @joshua-spacetime in #5237
- Add CLA Assistant retry workflow by @clockwork-labs-bot in #5234
- Fix publish --delete-data config fallback by @clockwork-labs-bot in #5256
- Improve accuracy and change semantics of metric
wasm_memory_bytesby @gefjon in #5131 - cli: Accept hex-ish strings as Identity parameters for call by @kim in #5254
- Store non-full pages in a
BTreeSet, not aVecby @gefjon in #5071 - Add some tests of procedure concurrency by @gefjon in #4955
- Add primary keys to procedural views in C# by @joshua-spacetime in #5246
- LLM Benchmark: Sequential Upgrades Test by @bradleyshep in #4817
- Remove
cargo bump-versionsby @bfops in #5157 - Consolidate template versions by @bfops in #5228
- Allow layout-altering automigrations of event tables by @gefjon in #5269
New Contributors
Full Changelog: v2.4.1...v2.5.0