Releases: clockworklabs/SpacetimeDB
Release v2.6.0
2.6.0 adds Primary Key support for Views in Rust, TypeScript, and C#, improves event table automigrations, includes CLI binary distribution improvements, and brings various performance enhancements and bug fixes.
Features
Primary Key support for Views (Rust, TypeScript, and C#)
Procedural views now support primary keys in Rust, TypeScript, and C#
Note: C++ support for primary keys in views will be added in a future release.
-
Rust: Declare primary keys in the
#[view]macro:#[spacetimedb::view(accessor = my_players, public, primary_key = id)] pub fn my_players(ctx: &spacetimedb::ViewContext) -> Vec<Player> { ctx.db.players().owner().filter(ctx.sender()).collect() }
(#5111)
-
TypeScript: Declare primary keys at the column/row level:
const Player = t.row('Player', { id: t.u64().primaryKey(), owner: t.identity().index('btree'), name: t.string(), }); export const my_players = spacetimedb.view( { public: true }, t.array(players.rowType), ctx => Array.from(ctx.db.players.owner.filter(ctx.sender)) );
(#5111)
-
C#: Following Rust and TypeScript support in previous releases, C# modules can now declare primary keys on procedural views:
[SpacetimeDB.View(primaryKey: nameof(Player.Id))] public static List<Player> MyPlayers(ViewContext ctx) => ...
(#5246)
Performance & Correctness
- Commitlog configuration knobs: Added
max_segment_size,write_buffer_size, andpreallocate_segmentsconfiguration options toconfig.tomlfor the commitlog. The defaultwrite_buffer_sizehas been increased from8KiBto128KiBto optimize high-throughput workloads.
(#5074)
Bug Fixes
- Timestamp primary keys in C#: Timestamps can now be used as primary keys in C# modules, making C# consistent with the other module languages.
(#5262)
What's Changed
- Cross compile CLI binaries for ARM by @bfops in #5176
- Client binaries from DigitalOcean -> AWS by @bfops in #5077
- Add commitlog knobs to server config by @joshua-spacetime in #5074
- Add primary key support for procedural views to rust and ts modules by @joshua-spacetime in #5111
- Timestamps can be primary keys in C# by @joshua-spacetime in #5262
- Add primary keys to procedural views in C# by @joshua-spacetime in #5246
- Allow layout-altering automigrations of event tables by @gefjon in #5269
- Simplify CLA gate workflow by @clockwork-labs-bot in #5316
- docs: clarify deterministic reducer randomness by @clockwork-labs-bot in #5322
Full Changelog: v2.5.0...v2.6.0
Release v2.5.0
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
Release v2.4.1
We are releasing two small patches on top of 2.4.0:
(#5111) Add primary key support for procedural views to rust and ts modules
Adds support for primary keys to procedural views in rust and typescript modules. Now clients can receive update events when subscribed to such views.
(#5145) Fix index schema from st tables.
This fixes #4701.
More to come soon!
Full Changelog: v2.4.0...v2.4.1
Release v2.4.0
2.4.0 brings a headline new capability for Rust modules HTTP handlers alongside meaningful improvements to runtime performance, durability correctness, and server-side observability. The changelog is focused but every entry is production-relevant.
Features
HTTP handlers in modules
This is currently an unstable feature and will need to be enabled to have be available.
- Rust users can enable
unstablefeatures in theirCargo.toml:
[dependencies]
spacetimedb = { version = "1.*", features = ["unstable"] }- C# users can enable
unstablefeatures by adding#pragma warning disable STDB_UNSTABLEat the top of your file. - C++ users can enable
unstablefeatures by adding#define SPACETIMEDB_UNSTABLE_FEATURESbefore including the SpacetimeDB header.
Modules can now define custom HTTP routes and serve arbitrary HTTP requests directly from module code (Rust: #4636, Typescript: #4980, C#: #5024,C++: #5023).
Using a Rust as an example, annotate a function with #[spacetimedb::http::handler] to create a handler, then wire it into your module's routing table with #[spacetimedb::http::router].
#[spacetimedb::http::handler]
fn insert(ctx: &mut HandlerContext, request: Request) -> Response {
let body: Vec<u8> = request.into_body().into_bytes().into();
let id = ctx.with_tx(|tx| tx.db.data().insert(Data { id: 0, body }).id);
Response::new(Body::from_bytes(format!("{id}")))
}
#[spacetimedb::http::router]
fn router() -> Router {
Router::new().post("/insert", insert).get("/retrieve", retrieve)
}#5024 adds the C# handler/router API [SpacetimeDB.HttpHandler], [SpacetimeDB.HttpRouter]
#5023 adds the C++ handler/router API SPACETIMEDB_HTTP_HANDLER(), SPACETIMEDB_HTTP_ROUTER()
All user-defined routes are exposed under /v1/database/:name_or_identity/route/{*path}. Handlers have access to a HandlerContext that can open a database transaction, giving you full read/write access to your tables.
This opens the door to webhook integrations, REST-style APIs for non-realtime clients, and any other HTTP-driven interaction you want to build on top of your SpacetimeDB module.
Faster WASM reducer execution
Reducers now run on a dedicated synchronous WASM runtime backed by a single OS thread, instead of sharing the async runtime that procedures use (#5095). Because reducers never yield, the old async scaffolding was pure overhead. The synchronous path removes that cost from the hot path for every reducer invocation.
Bug Fixes
- Durability: silent data loss on resume fixed. The commitlog could silently corrupt a segment on restart if trailing bytes shorter than a commit header were left behind. A subsequent append would render the segment corrupt, and anything written after those trailing bytes would become unreachable after the next restart. The segment is now truncated to its validated size before writes resume (#5116).
- V8 heap metrics now cover procedure workers. Previously
V8HeapMetricswere tracked only for reducer workers, leaving memory usage by JavaScript procedure workers invisible. Procedure worker heap usage is now aggregated and reported alongside the reducer worker metrics (#5122). - Commitlog decode errors include context. Errors encountered while decoding commits now carry additional context, making it substantially easier to diagnose corrupted or truncated log segments in production (#5129).
- Reverted energy/execution-time conversion in V8 host. A regression introduced in v2.3.0 in how execution time was converted to energy units for JavaScript modules was reverted (#4927).
What's Changed
- V8 heap metrics: Track instance memory usage for procedure workers too by @gefjon in #5122
- fix
unity-testsuite: clear intermediate Godot build state by @joshua-spacetime in #5133 - Revert "Properly handle execution time<->energy conversion in v8 host (#4884)" by @jdetter in #4927
- commitlog: Error context for commit decode errors by @kim in #5129
- Use synchronous runtime for the main wasm execution lane by @joshua-spacetime in #5095
- core: Remove view cleanup trace logs by @kim in #5137
- commitlog: Truncate segment before resuming by @kim in #5116
- Isolate Godot NuGet restore from Unity package cache by @joshua-spacetime in #5136
- Add required ci check for
keynote-2benchmark by @joshua-spacetime in #5078 - Add Deep Database Style by @cloutiertyler in #4925
- CI: skip Internal Tests dispatch for docs-only changes by @cloutiertyler in #4995
- Implement HTTP handlers / webhooks in Rust modules by @gefjon in #4636
- Move
Internal Teststo its own workflow by @bfops in #5147 - Remove physical module layout info from read sets by @joshua-spacetime in #5149
- Add basic troubleshooting guide by @gefjon in #5142
- Drop tps threshold for rust keynote-2 ci check by @joshua-spacetime in #5159
- Add new LLM chat template by @JasonAtClockwork in #5150
- Add new hangman TS template by @JasonAtClockwork in #5119
- Don't use ReadableStream as an asyncIterator by @coolreader18 in #5144
- Add new money exchange TS template by @JasonAtClockwork in #5134
- Add TypeScript Blackholio server + client by @JasonAtClockwork in #5140
- Godot Blackholio completion by @lisandroct in #5030
- Remove
.github/docker-compose.ymlby @bfops in #5160 - CI -
ci self-docsincludes value names by @bfops in #5152 - Update selected crate licenses to Apache 2.0 by @clockwork-labs-bot in #5151
Full Changelog: v2.3.0...v2.4.0
Release v2.3.0
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).
Faster 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: https://github.com/cloc...
Release v2.2.0
2.2.0 is here, and this one is a meaningful step forward for SpacetimeDB's realtime performance, operational safety, and day-to-day developer workflow. There are plenty of smaller fixes in this release too, but these are the major changes worth calling out.
Features
Faster realtime transport and client throughput
Weโve introduced a new v3 WebSocket transport that batches multiple logical client messages into a single frame, cutting per-message overhead while keeping the existing message model intact (#4761). The TypeScript SDK now uses the new transport by default (#4784). Under the hood, this release also includes a substantial round of hot-path performance work across the TS client, JS module runtime, and durability pipeline to improve throughput and reduce scheduler overhead under load.
Safer production database operations
We added spacetime lock and spacetime unlock to protect databases from accidental deletion (#4502). On top of that, spacetime delete now asks for confirmation by default (#4770), spacetime list shows database names alongside identities (#4769), and spacetime publish --yes can now skip only the prompts you intend to skip instead of skipping all of them (#4885).
Better TypeScript app ergonomics
Web developers get two nice upgrades in 2.2.0. Thereโs now a first-party Astro + TypeScript template with SSR and a live React island for realtime updates (#4688), and the TypeScript React bindings now include a typed useProcedure hook so procedures fit the same ergonomic pattern as reducers (#4752).
Smoother schema evolution
Publishing schema changes is less brittle now. Empty tables can be dropped during auto-migration (#4593), and changing or removing a primary key no longer leaves stale schema state behind that breaks future publishes (#4666).
More powerful table and index APIs
Modules can now clear tables directly from Rust, C#, C++, and TypeScript (#4729), and the index layer gained bytes-key B-tree support for more capable multi-column range scans (#4733).
Bug Fixes
- Improved crash resistance for JavaScript modules by preventing V8 near-heap-limit failures from taking down the server, and by rotating isolates when heap growth or fragmentation gets out of hand (#4777, #4684).
- Fixed a schema migration bug where changing or removing a primary key could leave stale schema state behind and break a later publish (#4666).
- Fixed table migration sequence persistence so
autoincvalues no longer reset after restart when a table has been migrated (#4902). - Windows CLI binaries are now code-signed, which should make installation and update flows smoother on Windows (#4906).
- Improved module panic backtraces so runtime failures are easier to diagnose (#577).
- Hardened local durability so snapshot files,
metadata.toml, and pid files are properly synced to disk instead of being vulnerable to loss on an untimely crash (#4891, #4892, #4890). - Fixed an Unreal SDK bug where overlapping subscriptions could fire duplicate
OnInsertevents for already-cached rows (#4903).
If you run into anything new with this release, file an issue on GitHub or drop into Discord and let us know.
What's Changed
- [C#] Add support for IEnumerable for Views' return types by @rekhoff in #4486
- Replace
JsInstancepool with single worker and FIFO queue by @joshua-spacetime in #4663 - Improve benchmark cli, make compatible with deno by @coolreader18 in #4647
- Improve
merge_apply_insertsby @Centril in #4310 - Add distributed typescript benchmark harness by @joshua-spacetime in #4698
- Rotate V8 isolate on heap growth or fragmentation by @joshua-spacetime in #4684
- fix(keynote-2): split demo and bench CLI parsing by @joshua-spacetime in #4703
- core: Bounded channel for durability worker by @kim in #4652
- Bypass
AlgebraicValuefor datastore updates and bsatn based index scans + BytesKey optimization by @Centril in #4311 - Add more context around some errors by @jsdt in #4702
- Add .gitignore files to quickstart templates by @clockwork-labs-bot in #4609
- docs: Add supported index key types to Index docs page by @clockwork-labs-bot in #4606
- fix: single-column BTree index Range filter/delete by @DexterKoelson in #4737
- Stop setting core affinity on macos by @joshua-spacetime in #4676
- Small typescript sdk optimizations by @joshua-spacetime in #4640
- Configure compression for keynote benchmark by @joshua-spacetime in #4743
- Update client defaults in keynote bench by @joshua-spacetime in #4745
- Reduce overhead in the typescript sdk by @joshua-spacetime in #4744
- Replace JS worker's rendezvous channel with unbounded queue by @joshua-spacetime in #4704
- fix(unreal): macOS build failure โ Nil macro collision with Objective-C++ by @brougkr in #4712
- Run reducers in their own V8
HandleScopefor js modules by @joshua-spacetime in #4746 - Remove rust client from keynote bench by @joshua-spacetime in #4753
- Remove warmup from distributed keynote bench by @joshua-spacetime in #4757
- core: Enable instrumentation of multiple tokio runtimes by @kim in #4694
- Improve a test with new
TableIndex::iter& simplify index iterator defs by @Centril in #4759 - Bump the esm (gzip) package size again by @jdetter in #4760
- Add module ABI & API for
clearing tables by @Centril in #4729 - fix: Replace unwrap with proper error handling in WebSocket subscribe handler by @Shiven0504 in #4696
- [TS] Fix access before initialization in codegen by @coolreader18 in #4709
- feat: Allow dropping empty tables during auto-migration by @Ludv1gL in #4593
- Increase timeout for typescript query builder tests by @joshua-spacetime in #4783
- Merge durability actors to reduce per-tx scheduler handoffs by @joshua-spacetime in #4767
- Cache V8 heap stats instead of querying them on every call by @joshua-spacetime in #4778
- Record metrics periodically in batches by @joshua-spacetime in #4801
- Show database names in
spacetime listby @clockwork-labs-bot in #4769 - Require confirmation for
spacetime deleteby @clockwork-labs-bot in #4770 - v3 websocket transport protocol by @joshua-spacetime in #4761
- durability: Use
async-channelto allow blocking send by @kim in #4802 - Fix primary key migration causing stale schema (#3934) by @clockwork-labs-bot in #4666
- Refactored
SELECTdetection in PG SQL by @egormanga in #3771 - Add TESTING.md, which documents some of our testing by @gefjon in #2898
- CI - rust smoketests lib expansion by @bfops in #4269
- Extract replay stuff out of
CommittedState, part 1 by @Centril in #4804 - Unity tutorial part 2 CLI call fix by @T-Podgorski in #3665
- Add internal docs for C# bindings packages by @kazimuth in #2938
- Run client_connected hook for HTTP SQL requests by @clockwork-labs-bot in #4563
- Update typescript sdk to use v3 websocket api by @joshua-spacetime in #4784
- docs: Add commitlog reference document by @clockwork-labs-bot in #4668
- durability: Simplify shutdown by @kim in #4808
- fix(ts-bindings): populate response headers in fetch() by @philtrem in #4691
- Export AuthCtx and JwtClaims in stdb/server typescript sdk by @dusk125 in #4649
- Fix
spacetime devbug when running with a project path by @aasoni in #4809 - fix: reorder Vue component by @MichaHuhn in #4748
- Update axum by @coolreader18 in #2713
- Move field `replay_table_updat...
Release v2.1.0
Another week, another reason to celebrate ๐ 2.1.0 is here, and it's bringing some long-awaited features alongside a handful of satisfying bug squashes!
Features
๐ฆ Rust client Wasm support
This one's been a long time coming. The Rust client SDK can now compile and run in the browser thanks to resolved Wasm compilation issues. If you've been waiting to build browser-based apps with the Rust SDK, your wait is over #4183
๐ฎ C++ Modules + Unreal SDK
Unreal developers, rejoice โ both the C++ module bindings and the Unreal SDK have been brought up to speed with SpacetimeDB 2.0's APIs and codegen. Full compatibility, no more workarounds.
- Update C++ bindings for 2.0 compatibility #4461
- Update Unreal SDK to match latest APIs and codegen #4497
Bug Fixes
There are several bug fixes in this release:
- Fix useTable isReady reverting to false after first row event by #4580
- Fix v2 client disconnects dropping subscriptions for other v2 clients #4648
If you experience any new issues with this release either file an issue on GitHub or drop into our Discord โ we're always around.
We'll see you again soon for the next release ๐
What's Changed
- Tidy up old code from the benchmark by @coolreader18 in #4616
- Update docs for primary key views by @joshua-spacetime in #4620
- Fix useTable isReady reverting to false after first row event by @clockwork-labs-bot in #4580
spacetime.jsonupdates by @cloutiertyler in #4504- [Rust] Extend view table accessors with
countby @joshua-spacetime in #4638 - Refresh views during one-shot schedule cleanup by @joshua-spacetime in #4639
- commitlog: Resumption of sealed commitlog by @kim in #4650
impl Deserialize for Packed + SumTagby @Centril in #4653- Fix v2 client disconnects dropping subscriptions for other v2 clients by @joshua-spacetime in #4648
- Fix anonymous view subscription cleanup by @joshua-spacetime in #4646
- Correct stale C++ quickstart links in README by @leosat in #4633
- Update Unreal SDK to websocket 2.0 by @JasonAtClockwork in #4497
- Include full error chain in procedure HTTP request errors by @Shiven0504 in #4610
- fix: Replace unwrap with proper error handling in set_domains handler by @Shiven0504 in #4643
- fix(docs): Fix back to top button display by @clockwork-tien in #4670
- Use column names instead of accessors for ts queries by @jsdt in #4627
- feat: update pgwire to 0.37 by @sunng87 in #3910
- Remove legacy SQL code by @joshua-spacetime in #4628
- Allow obtaining a
AnonymousViewContextfrom aViewContextby @kistz in #4671 - add
Deserialize::validatefor non-allocating validation by @Centril in #4493 - cleanup
TypedIndexPointIter& ditchDirectvariant by @Centril in #4654 - fix(csharp-codegen): escape C# reserved keywords in generated identifiers by @stablegenius49 in #4535
- Template README + template.json generation tool by @bradleyshep in #4570
- Add a metric for the number of module instances by @jsdt in #4674
- Add
ConsumeEntityEventto Blackholio C++ and C# modules by @rekhoff in #4675 - Add more info to segment file errors by @jsdt in #4680
- CI - Disable PR approval check by @bfops in #4683
- Updated Query with Indexes to be code-accurate by @rekhoff in #4165
- Bump versions to 2.1.0 by @bfops in #4681
- core: Keep a reordering window in durability worker by @kim in #4677
- Make confirmed reads the default for the ts connector by @joshua-spacetime in #4682
- docs: Fix incorrect Math.random() note in reducer context by @clockwork-labs-bot in #4667
- Fix
spacetime devignoring top-level module-path for generate entries by @clockwork-labs-bot in #4656 {Multi,Unique}Map->{/Unique}BTreeIndex+Btree->BTreeby @Centril in #4655- Keynote-2 sqlite fixes by @bradleyshep in #4678
- wasm support for Rust SDK by @bfops in #4183
New Contributors
- @leosat made their first contribution in #4633
- @stablegenius49 made their first contribution in #4535
Full Changelog: v2.0.5...v2.1.0
Release v2.0.5
Hello again everyone! This is another small bug fix release. There was a small bug introduced during the v2.0.4 that we're fixing here, plus another fix for users who are trying to use LLMs in procedures. We recommend upgrading to this version at your earliest convenience.
Fixes
- Bump HTTP procedure timeouts (500ms/10s โ 30s/180s) and fix docs (#4630)
- core: Attempt to repair databases with wrong host type (#4619)
Thank you to everyone who has reported issues in the discord! It has made it much easier to track these bugs down and fix them quickly ๐ ๏ธ
What's Changed
- Fix disconnects breaking view updates for other connections by @joshua-spacetime in #4607
- CI - PR approval check skips for external PRs (properly this time) by @bfops in #4611
- CI: Use pull_request_target for PR approval check by @clockwork-labs-bot in #4615
- Add a mode to the Rust SDK with additional logging to a file by @gefjon in #4566
- Export Range/Bound from the spacetimedb/server in the Typescript sdk by @dusk125 in #4567
- Fix Rust Chat App Tutorial not showing messages of other users live by @OMGeeky in #4588
- Upgrade prometheus to 0.14.0 by @SupernaviX in #4598
- core: Attempt to repair databases with wrong host type by @kim in #4619
- Version bump to 2.0.5 by @jdetter in #4623
- [C#] Primary keys for query builder views by @joshua-spacetime in #4626
- Bump HTTP procedure timeouts (500ms/10s โ 30s/180s) and fix docs by @clockwork-labs-bot in #4630
New Contributors
- @dusk125 made their first contribution in #4567
- @OMGeeky made their first contribution in #4588
- @SupernaviX made their first contribution in #4598
Full Changelog: v2.0.4...v2.0.5
Release v2.0.4
Hello everyone! This week's release is a small bug-fix patch with a few UX improvements ๐
New Features
- The
spacetimeCLI now checks daily for updates. When an update is available a notice is posted telling the user to upgrade. - The
spacetime devproject initialization logic now includes a fuzzy search which makes it much easier to find and select a template.
Bug Fixes
- Fix spacetime login --token falling through to web login
- Several correctness fixes which could prevent a database from loading
What's Changed
- Migrate to Rust 2024 by @coolreader18 in #3802
- Append commit instead of individual transactions to commitlog by @kim in #4404
- feat(tanstack): add SSR prefetching for Tanstack Start by @clockwork-tien in #4519
- Make
accessorrequired for table-level index defs in typescript by @joshua-spacetime in #4525 - Fix 'unsafe attr without unsafe' error by @coolreader18 in #4534
- Add AgentSkills.io integration for AI coding assistants by @douglance in #4172
- Make accessor required for table-level index defs in C# by @joshua-spacetime in #4541
- Adds code signing to tagged windows builds by @rekhoff in #4473
- Bring typescript benchmark client to parity with rust by @coolreader18 in #4494
- Don't put invalid
Cargo.tomlfiles in our repo by @gefjon in #4536 - Expose
RawModuleDefV10via the HTTP schema route by @gefjon in #4540 - Update edition in
.rustfmt.tomland pre-commit hook by @bfops in #4543 - docs: fix TS index definition
nameโaccessorby @clockwork-labs-bot in #4537 - gitignore
*.localfiles by @bfops in #4544 - Wait for database to load before returning schema by @clockwork-labs-bot in #4551
- CI - Reduce when package job runs by @bfops in #4539
spacetime dev- Replace template selection with fuzzy-filterable menu by @clockwork-labs-bot in #4470- docs: self-hosted prod/test/dev Azure VM guide with key rotation, Azure Key Vault workflows, and rsync data migration pattern by @benpsnyder in #4545
- Add implicit query builder conversions from
booltoBoolExprby @joshua-spacetime in #4547 - Fix typos in comments and doc comments across crates by @Shiven0504 in #4560
- Fix stale
--project-pathflag in templates by @bfops in #4564 - Overhaul README with up-to-date content by @clockwork-labs-bot in #4500
- CLI - Notify users if there's an update available by @clockwork-labs-bot in #4363
- Improve login/logout CLI UX by @clockwork-labs-bot in #4367
- CI -
clockwork-labs-botneeds 2 approvals by @bfops in #4568 - docs: Audit HTTP API docs against code by @clockwork-labs-bot in #4569
- docs: Clarify HTTP endpoint auth is optional, not required by @clockwork-labs-bot in #4562
- CI - Simplify PR approval check by @bfops in #4578
- Fix spacetime login --token falling through to web login by @clockwork-labs-bot in #4579
- CI - Stop running Python smoketests by @bfops in #4376
- Persist host type update and honor stored value after restart by @kim in #4549
- CI - Label check always runs by @bfops in #4594
- CI -
rustfmtinstead ofcargo fmtby @bfops in #4595 - CI - Label check runs on
synchronizeevents by @bfops in #4602 - Version bump 2.0.4 by @jdetter in #4600
- Fix Bool deserialized as number in TS SDK fast path by @clockwork-labs-bot in #4596
- Better error message for semijoin predicates by @joshua-spacetime in #4605
- CI - Fix package job by @bfops in #4552
- CI - Skip PR approval check on external PRs by @bfops in #4604
- [Rust] Primary keys for query builder views by @joshua-spacetime in #4572
New Contributors
- @benpsnyder made their first contribution in #4545
- @Shiven0504 made their first contribution in #4560
Full Changelog: v2.0.3...v2.0.4
Release v2.0.3
SpacetimeDB v2.0.3
We've been getting amazing feedback on our 2.0 release. Today we have a release of small bugfixes and QoL improvements in the CLI and SDK based on some of what we've been hearing. More to come soon!
New features
spacetime logs --levelfiltering. Filter logs by severity with--level warn(that level and above) or--level info --level-exact(exact match only). Works with both text and JSON output. (#4362)
Bug fixes
- We have improved the latency for making commits durably persisted
- React: fix
useTableisReadystuck onfalse. - TanStack Start: fix
useSpacetimeDBQueryreturning untyped rows. - TypeScript: fix
toCamelCaseconversion. - Fix index truncate edge cases.
- CLI: preserve leading
..in--out-dirpaths. - CLI: fix publishing in directories with spaces.
- CLI: skip upgrade prompt when
-yis passed.
C# SDK
- Improve error messages for Views. Better diagnostics when view queries fail in the C# SDK. (#4435)
What's Changed
spacetime dev- Print feedback when client process exits by @clockwork-labs-bot in #4469- Fix publishing in directories with spaces by @drogus in #4453
- CLI - preserve leading
..in --out-dir paths by @clockwork-labs-bot in #4431 - Remove security warning from 00500-schedule-tables.md by @taotien in #4463
- C# smoketest for
IQueryviews by @joshua-spacetime in #4391 - [C#] Improve error messages for Views by @rekhoff in #4435
- Add PlanetScale configuration details to keynote README & DEVELOP by @bradleyshep in #4474
- Fix missing word 'time' in ScheduleAt tutorial docs by @clockwork-labs-bot in #4490
- Version upgrade 2.0.3 by @jdetter in #4489
- keynote-2: alpha -> 1.5, withConfirmedReads(true), remove warmup by @Centril in #4492
- Update C++ module bindings to RawModuleDefV10 by @JasonAtClockwork in #4461
- LLM benchmark tool updates by @bradleyshep in #4413
- Add missing TypeScript example in migration guide by @clockwork-labs-bot in #4508
- docs: document how to access module owner via init reducer by @clockwork-labs-bot in #4315
- Fix
useTableisReadystuck onfalsedue to stale snapshot cache by @clockwork-labs-bot in #4499 - fix index truncate edge cases by @Shubham8287 in #4501
- Upgrade prompt is skipped when
-yis passed by @jdetter in #4511 - [docs] Corrected
callcase and updatedout-dirto match part 3 by @rekhoff in #4513 - [TS] Fix toCamelCase by @coolreader18 in #4523
- Fix a misprint in the self-hosting docs by @bfops in #4524
- Use prepared statements for postgres keynote benchmark by @joshua-spacetime in #4522
- Add --level flag to spacetime logs for filtering by log level by @clockwork-labs-bot in #4362
- fix: fix useSpacetimeDBQuery returns untyped rows for TanStack Start by @clockwork-tien in #4488
New Contributors
Full Changelog: v2.0.2...v2.0.3