
🎉 SpacetimeDB 1.0 🎉
Today we're incredibly excited to officially release SpacetimeDB 1.0!
This is a milestone that the whole team has been working towards for years. A huge amount of engineering and effort has gone into stabilizing our APIs across all of our languages and libraries, as well as making SpacetimeDB a stable product that you can rely on in production. So today, we are leaving beta and are offering our first production-ready release!
With this release you can host your own applications with SpacetimeDB Standalone and rest assured that the data formats and APIs will not be changing until the next major version release. For future major version releases we will also provide a migration path.
Read more about the announcement at https://spacetimedb.com/blog/introducing-spacetimedb-1-0.
Maincloud
Alongside SpacetimeDB 1.0 we are also launching, Maincloud, our managed cloud service. Maincloud is just like Standalone except that you don't have to worry about any of the deployment! Just run the below command and we take care of the rest.
spacetime publish -s maincloud your-app
We use an "energy"-based cloud credit system to show you exactly how to optimize your applications. Check out the Maincloud announcement on our website to find our how to buy energy 90% off during our launch sale.
Install
Install this release now via the instructions here ➡️ https://spacetimedb.com/install
Also if you're new here please take a moment to star our repository! https://github.com/clockworklabs/SpacetimeDB
Highlights
- A new cloud hosted service called Maincloud
- Streamlined stable client SDKs in TypeScript, C#, and Rust
- Streamlined stable module APIs in C# and Rust
- Big performance improvements for certain workloads
- Brand new mutable subscription APIs allowing you to change your subscriptions incrementally
- Beautiful new version manager CLI commands
- Brand new website interface and account management
- OpenID Connect integration and APIs
Notes
- Testnet is now deprecated and is replaced by Maincloud
Upgrading from previous versions
All previous versions of the spacetime
CLI will not be able to upgrade to the new version using the previous upgrade procedure. You will need to uninstall the previous version of spacetime
and re-run the installation instructions found here: https://spacetimedb.com/install
Once you've installed the new version of spacetime
you should verify that you're on the Version 1.0.0
version via:
spacetime --version
Join the Community
Have questions on the best way to get started or just want to see what others are building on SpacetimeDB?
Join us on Discord! https://discord.gg/spacetimedb
What's Changed
- query engine integration by @joshua-spacetime in #2074
- add signature of
datastore_update_bsatn
host call by @Centril in #2102 - Add
SubscriptionBuilder::subscribe_to_all_tables
by @gefjon in #2109 - Fix wording in
ReplayVisitor::visit_insert
by @Centril in #2123 - commitlog: Make offset index usable externally by @kim in #2108
- Add new crates to
publish-crates.sh
script by @bfops in #2125 - Rework RLS macro for amended syntax by @gefjon in #2105
- Rust SDK:
with_credentials
->with_token
by @gefjon in #2118 - Split binaries by @coolreader18 in #2011
- Run smoketests on windows in ci by @coolreader18 in #2129
- CLI - Replace clippy with a manual check by @bfops in #1928
- Make the key of
Table.indexes
beIndexId
by @Centril in #2124 - Lookup lifecycle reducers by lifecycle flag, not by name by @coolreader18 in #2132
- core: Make SNAPSHOT_FREQUENCY pub by @kim in #2135
- Use actual types for api responses, not ad-hoc
json!()
objects by @coolreader18 in #1931 - Fix unique index +
MutTxId::insert
not un-deleteting by @Centril in #2156 - Set
tracing
static level for binaries only by @kim in #2144 - snapshot: Invalidate newer snapshots on creation by @kim in #2143
- Query execution updates for cpu metrics by @joshua-spacetime in #2130
- Fix & test row deletion API by @RReverser in #2146
- Fix autocomplete issues in bindings crate by @coolreader18 in #2157
- Fix sending of subscription errors. by @jsdt in #2166
- Don't create indexes during bootstrapping; wait until after replay by @gefjon in #2161
- Fix ScheduleAt in C# by @kazimuth in #2163
- Fixed issues with the Rust module quickstart-chat README.md by @cloutiertyler in #2154
- Remove the client from subscription manager on a disconnect by @jsdt in #2170
- Add the
update
ABI by @Centril in #2137 - Adds improvements & new crates to
publish-crates.sh
by @cloutiertyler in #2173 - Bump version to
1.0.0-rc4
by @bfops in #2177 - Cache whether a
Table
is a scheduler table, avoiding fetching the schema by @Centril in #2141 - Bump to Rust 1.84 by @coolreader18 in #2001
- Switch
DeleteTable
impl to one based onFixedBitSet
by @Centril in #2183 - Meter wasm memory usage by @coolreader18 in #2187
- Track query and datastore cpu usage metrics by @joshua-spacetime in #2140
- Log errmsg if reducer fails by @coolreader18 in #2186
- Fix CI on master by @coolreader18 in #2193
- Make
check_and_insert
&find_old_row
and friends do less checks by @Centril in #2192 - CLI - Just-in-time login flow by @bfops in #2158
- Track compute metrics for sql dml with new engine by @joshua-spacetime in #2190
- Implement incremental subscriptions on the client by @jsdt in #2111
- InstanceEnv: make the inspect_err closures cold by @Centril in #2197
- Data size SKU for billing by @gefjon in #2098
prop_assume!(a != b)
in some tests to fix spurious failures by @gefjon in #2199- Match datastore semantics more closely:
btree_scan
=>index_scan_range
by @Centril in #2203 - Update sql literals to match spec by @joshua-spacetime in #2196
- Fix ctrl-c handling by @coolreader18 in #2200
- Return errors for invariant violations during query planning by @joshua-spacetime in #2209
- Rust SDK: remove
anyhow
, usethiserror
w/ structured error types by @gefjon in #2169 - Rust client SDK: rework
EventContext
into multiple types by @gefjon in #2189 - Make
MutTxId::update
really idempotent wrt.TxData
by @Centril in #2212 - Rewrite C# codegen to the new Lang infra + fixes by @RReverser in #2184
- add
direct
indices, except for in datastore & C# by @Centril in #2205 - Fix multi-column index scan by @mamcx in #2208
- Register data size metrics for standalone. by @jsdt in #2216
- Handle optimization and execution errors on initial subscription by @joshua-spacetime in #2213
- Finish spacetimedb-update functionality by @coolreader18 in #2126
- CLI - Better module language inference by @bfops in #2218
- CLI - Clarify helptext for
spacetime login
by @bfops in #2219 - Add
direct
indices to datastore by @Centril in #2221 - Add metrics for fuel usage and reducer runtime totals. by @jsdt in #2217
- Make
Timestamp
a special SATS type by @gefjon in #1836 - Rework event contexts in C# SDK by @kazimuth in #2226
- Error handling for incremental evaluation by @joshua-spacetime in #2223
- Implemented the new EventContext types in Typescript codegen by @cloutiertyler in #2224
- Add /health endpoint by @drogus in #1989
- CLI - Warn when using an unstable command by @bfops in #2227
- Standardized module names and added module-test-cs based on module-test by @cloutiertyler in #2232
- Rename
Address
toConnectionId
by @gefjon in #2220 - Use Into instead of ToString by @RReverser in #2127
- Fix confusing csharp workload-install error message by @coolreader18 in #2238
- Add metrics for index inserts and deletes by @jsdt in #2236
- Implement IComparable for Timestamp by @kazimuth in #2239
- Remove janky schema from http API by @coolreader18 in #2181
- DBConnection -> DbConnection for the TypeScript API by @cloutiertyler in #2230
- CLI - Default config lists maincloud, not testnet by @bfops in #2237
- Refactor HTTP api to better adhere to REST guidelines (real) by @coolreader18 in #2243
- Remove some Identity conversions that could panic by @jsdt in #1966
- Implemented error arguments in error callbacks by @cloutiertyler in #2229
- Only support bearer auth by @coolreader18 in #2248
- Fixup comment for SpacetimeCreds by @coolreader18 in #2250
- C# SDK - Emit Event.UnknownTransaction rather than throwing on unknown reducer (#2241) by @kazimuth in #2249
- Add fast ser/de paths for structs of prims with repr(C) by @Centril in #2251
- Add
keynote-benchmarks
by @Centril in #2252 - Save 10 ms by using
Vec
instead ofVecDeque
by @Centril in #2254 - CI - Update
actions/cache@v2
->@v4
by @bfops in #2247 - CI - Fix the
SDK Tests
CI job after branch rename by @bfops in #2258 - keynote-benchmarks: measure the hot latency in 'roundtrip' by @Centril in #2264
- Send delete updates for unsubscribes by @jsdt in #2271
- Impose
FilterableValue
inUniqueColumn::find
by @Centril in #2267 - CLI - Remove newlines from command helptext by @bfops in #2277
- CLI - Add feature to print markdown docs by @bfops in #2276
- Add README.md to all modules in SpacetimeDB/modules describing their usage by @mamcx in #2282
- Add support for LIMIT by @joshua-spacetime in #2279
- Add support for COUNT by @joshua-spacetime in #2285
- Update Rust module documentation by @kazimuth in #2050
- Update install script by @coolreader18 in #2265
- Fix docker container for standalone by @jdetter in #2289
- Add multi-query version of subscribe messages, and dedup queries on the backend. by @jsdt in #2278
- Fix some typos in the ts code gen. by @jsdt in #2287
- Rust client SDK: send
SubscribeMulti
andUnsubscribeMulti
by @gefjon in #2281 - Use fixed term width for cli help test by @coolreader18 in #2293
- Rust SDK: Deduplicate rows accross queries by @Centril in #2286
- fix: join order rewrite rule by @joshua-spacetime in #2295
bindings-csharp
: use the update ABI by @Centril in #2269- sdk: Basic connection metrics by @kim in #2299
MutTxId::update
: consider deleted commited row when replacing tx row by @Centril in #2302- Clear DB size gauges when shutting a module down by @jsdt in #2259
- Final C# codegen changes by @kazimuth in #2303
- Add comment on Time Stamp Counter (TSC) for profiling with tracy by @joshua-spacetime in #2304
- Added in a SQL execution time calculation by @cloutiertyler in #2297
Full Changelog: v1.0.0-rc3-hotfix7...v1.0.0