Skip to content

Reducer Context

SpacetimeDB: Reducer Context ↗

Reducer context is an Effect service yielded from the assembled module.

import * as Effect from "effect/Effect"
import * as Stdb from "effect-spacetimedb"
const audit = Stdb.table("audit", {
columns: {
id: Stdb.u64().primaryKey().autoInc(),
sender: Stdb.identity(),
message: Stdb.string(),
},
})
const Audit = Stdb.StdbGroup.make("Audit").add(
Stdb.StdbFn.reducer("audit_write", {
params: Stdb.struct({ message: Stdb.string() }),
}),
)
const Module = Stdb.StdbModule.make("app").addTables(audit).add(Audit)
const { Db, ReducerCtx } = Module
const AuditLive = Stdb.StdbBuilder.group(Module, "Audit", {
audit_write: Effect.fn(function* ({ message }) {
const ctx = yield* ReducerCtx
const db = yield* Db
yield* db.audit.insert({
id: 0n,
sender: ctx.sender,
message,
})
}),
})

ReducerCtx exposes the sender identity, authenticated sender metadata, timestamp, connection id, deterministic random stream, UUID helpers, and the same writable db view available through Db.

effect-spacetimedb exposes context as scoped services rather than a positional argument: ReducerCtx for reducers, TxCtx inside explicit transaction bodies, and MutationCtx for helpers that must work in both scopes.