Skip to content

Event Tables

SpacetimeDB: Event Tables ↗

Event tables use the same Stdb.table(...) builder with event: true.

import * as Effect from "effect/Effect"
import * as Stream from "effect/Stream"
import * as Stdb from "effect-spacetimedb"
const presenceEvent = Stdb.table("presenceEvent", {
public: true,
event: true,
columns: {
userId: Stdb.string(),
kind: Stdb.literal("joined", "left"),
},
})
const Module = Stdb.StdbModule.make("presence", {}).addTables(presenceEvent)
const Example = Stdb.project(Module.spec)
const program = Effect.gen(function* () {
const session = yield* Example.client.ws.Session
yield* session.streamEventTable("presenceEvent").pipe(
Stream.runForEach((event) =>
Effect.log(`presence ${event.row.userId} ${event.row.kind}`),
),
)
})

effect-spacetimedb separates public persistent table targets from public event-table targets in Stdb.project(...).targets. Use Example.targets.eventTables.presenceEvent for direct target subscriptions and streamEventTable("presenceEvent") for insert-only event streams.