Current section
Files
Jump to
Current section
Files
lib/spacetimedbex.ex
defmodule Spacetimedbex do
@moduledoc """
SpacetimeDB client library for Elixir.
Provides WebSocket-based real-time connectivity to SpacetimeDB databases
using the v2 BSATN binary protocol.
## Getting Started
The main entry point is `Spacetimedbex.Client` — a GenServer that manages
a WebSocket connection, local ETS cache, and schema-driven encoding:
defmodule MyApp.SpaceClient do
use Spacetimedbex.Client
def config do
%{
host: "localhost:3000",
database: "my_db",
subscriptions: ["SELECT * FROM users"]
}
end
def on_insert("users", row, state) do
IO.puts("New user: \#{inspect(row)}")
{:ok, state}
end
end
{:ok, pid} = Spacetimedbex.Client.start_link(MyApp.SpaceClient, %{})
## Module Overview
- **`Spacetimedbex.Client`** — High-level client with callbacks
- **`Spacetimedbex.Http`** — HTTP REST client for all v1 API endpoints
- **`Spacetimedbex.Connection`** — Low-level WebSocket connection
- **`Spacetimedbex.ClientCache`** — ETS-backed local table mirror
- **`Spacetimedbex.Schema`** — Schema fetcher and parser
- **`Spacetimedbex.Phoenix`** — Phoenix PubSub integration
- **`Spacetimedbex.Codegen`** — Code generation from schema
- **`Spacetimedbex.BSATN`** — Binary codec (encoder/decoder)
- **`Spacetimedbex.Protocol`** — v2 message encoding/decoding
## Code Generation
Generate typed Elixir modules from a live database:
mix spacetimedb.gen --host localhost:3000 --database my_db --module MyApp.SpacetimeDB
"""
end