Skip to main content
The Sync Explorer is a dashboard operator console that surfaces the same durable shared-state primitives the Sync REST surface exposes — Documents, Maps, Lists, and Streams — through a set of per-kind forms. Read the Sync end-to-end guide for the object model, REST endpoints, and WebSocket protocol; this page covers the dashboard console: where it lives, what each tab does, one worked example per kind, and the failure modes you can hit.

1. Where the explorer lives

Open the dashboard, choose Developer in the sidebar, and select Sync Explorer from the tile grid (or navigate directly to /developer/sync). The page is available to owners, admins, and developer roles — the same roles that hold write permission on the Sync REST surface. The explorer is a thin shell over four per-kind tabs:

2. Reading a Sync object

Every durable kind — Documents, Maps, and Lists — is fetched by its unique_name. Type the name into the field at the top of the tab and click Load. The explorer calls the same GET endpoints a client application would use, and the response renders in the card below:
  • Documents — the current JSON data plus revision and date_updated.
  • Maps — every key with its data and per-item revision.
  • Lists — every item with its zero-based index, data, and revision.
If the object does not exist (or its TTL expired) you see an empty state prompt instead of an error — the forms below let you create it. Streams have no read surface. A Stream is ephemeral — a message fans out to subscribers connected at publish time and nothing is stored. There is no Load button on the Streams tab and nothing to fetch.

3. Mutating objects

Below the read card, a data editor lets you compose a JSON object. The editor validates parse on every keystroke and disables the action buttons until the JSON is valid. Every destructive action prompts a confirmation dialog before the request is sent.

Revision and CAS

Documents and List/Map items carry a monotonic revision the explorer displays. On an Update loaded the explorer sends the form data without an explicit revision guard — the server compares revisions internally and returns a 409 if another writer changed the object since you loaded it (see the failure modes section below).

4. Publishing to a Stream

The Streams tab has a single form: a unique_name, a JSON editor, and a Publish message button. Clicking it sends POST /streams/:name/messages with your data. The message fan-out is immediate and fire-and-forget — the explorer does not show a receipt or subscriber count. Subscribers connected over the WebSocket gateway at publish time receive the stream.message event; clients that connect later never see it.

5. Per-kind worked examples

Each example below is a concrete pair you can type into the explorer right now and observe the result.

Document: presence state

Tab: Documents. Name: agent_presence. Data:
Click Create. The card renders the stored JSON with revision 1. Change the status to busy, click Update loaded, and revision ticks to 2.

Map: order details

Tab: Maps. Name: order_4982. Key: shipping. Data:
Click Set item. Add another key (billing) with different data. The card lists both keys with their individual revisions.

List: audit trail

Tab: Lists. Name: queue_audit. Data:
Click Append. Repeat with a second entry. The card lists both items at indices [0] and [1].

Stream: live counter

Tab: Streams. Name: metrics_dashboard. Data:
Click Publish message. The message is sent. A subscribing client receives the envelope; the explorer stays silent.

6. When to use the explorer vs the REST surface

The Sync end-to-end guide covers the full REST API — curl commands, error codes, the WebSocket gateway, and the programmable integration path. Choose the right surface by who is acting:
  • Explorer — a human operator inspecting state, debugging a presence roster, checking a document value, or sending a one-off Stream message from the dashboard. No code, no key management, and the same role gates as REST.
  • REST + WebSocket — an application or backend worker that creates, reads, and reacts to Sync objects under application control. It holds an API key, handles retries and rate limits, and subscribes over the WebSocket gateway for live change events.
The explorer reads and writes the exact same objects — a document created through the REST POST /sync/documents is immediately fetchable in the explorer, and a Stream message published from the dashboard is delivered to subscribing clients over the WebSocket gateway.

7. Failure modes

TTL expiry applies to Documents and Maps (and Map items) that were created with a non-zero ttl. Once the window elapses the object vanishes silently — a subsequent Load shows the empty state. Streams have no TTL because they have no retention.

8. See also