Spacetimedbex.Phoenix (spacetimedbex v0.1.2)

Copy Markdown View Source

Phoenix PubSub adapter for SpacetimeDB.

Broadcasts SpacetimeDB table changes to Phoenix.PubSub topics, making it easy to build real-time Phoenix applications backed by SpacetimeDB.

Topics

  • "spacetimedb:{table_name}" — insert/delete events for a table
  • "spacetimedb:reducers" — reducer result events

Messages

  • {:spacetimedb, :insert, table_name, row}
  • {:spacetimedb, :delete, table_name, row}
  • {:spacetimedb, :reducer_result, request_id, result}

Usage

# In your supervision tree:
children = [
  {Phoenix.PubSub, name: MyApp.PubSub},
  {Spacetimedbex.Phoenix,
   pubsub: MyApp.PubSub,
   host: "localhost:3000",
   database: "my_db",
   subscriptions: ["SELECT * FROM users"]}
]

# In a LiveView:
def mount(_params, _session, socket) do
  Phoenix.PubSub.subscribe(MyApp.PubSub, "spacetimedb:users")
  {:ok, socket}
end

def handle_info({:spacetimedb, :insert, "users", row}, socket) do
  {:noreply, stream_insert(socket, :users, row)}
end

Summary

Functions

Get all rows from a cached table.

Start the Phoenix adapter.

Functions

find(pid \\ __MODULE__, table_name, pk_value)

Find a row by primary key.

get_all(pid \\ __MODULE__, table_name)

Get all rows from a cached table.

start_link(opts)

Start the Phoenix adapter.

Options

  • :pubsub — Phoenix.PubSub module name (required)
  • :host — SpacetimeDB host (required)
  • :database — database name (required)
  • :subscriptions — list of SQL subscription queries
  • :token — optional JWT token
  • :compression — optional compression setting
  • :name — optional process name (defaults to Spacetimedbex.Phoenix)