Subscribe to a view. Get live updates. Zero boilerplate. Arcana syncs your PostgreSQL data to any frontend through normalized diffs — one record changed, every display updated.
Zero-dependency real-time transport. Two auth modes: HTTP upgrade (cookies/headers) and token-based (SPA/mobile). Subscribe, mutate, sync — all over a single connection.
Register write operations with RegisterMutation(). Execute via HTTP or WebSocket. Typed parameter validation + automatic reactive invalidation.
First-class adapters for all three frameworks. useView, useRow, useMutation, useStatus — reactive hooks with SSR support and offline persistence.
Built-in dark-themed dashboard. Graphs, mutations, subscriptions, WS connections, data store rows — all visible at a glance with 2-second auto-refresh.
One record, one source of truth, 100 display locations. Change a company name once — every view using it updates instantly via normalized diffs.
table_diff for data changes (broadcast to workspace), view_diff for structural changes (private per session). Minimal traffic, maximum precision.
Column-level filtering. Only re-compute views that depend on changed columns. Explicit notify, pg_notify, or WAL — your choice.
Graphs are the security boundary. No graph, no data. Factory functions = authorization logic. 409 masking hides resource existence.
IndexedDB adapter. Load from cache when offline. Reconnect with version vectors — get only what changed. Zero data loss.
Built-in WebSocket transport — no Centrifugo, no Redis, no external services. Just Go + PostgreSQL.
A graph is a named query with dependencies. Plain Go — no DSL, no YAML, no magic.
One hook. No event listeners. No manual refetching. Data arrives as normalized diffs — your framework applies them with zero full re-renders.
Mutations are registered on the server with typed parameters and a handler function. The result declares which rows changed — Arcana handles the rest.
POST /mutate with {"action":"create_task","params":{...}}{"type":"mutate","action":"create_task"} over the same WS connectionuseMutation("create_task") in React/Vue/SvelteCall engine.Notify() after mutations. Simple, full control.
Auto-generated triggers. Zero app instrumentation after setup.
Logical replication stream. Captures all DML. Most reliable.
useView, useRow, useMutation, useStatus hooks with SSR supportshallowRef reactivity and onUnmounted cleanupcreateSubscription() with $state reactivitygo run ./cmd/arcana-gen generates tables.d.ts + views.d.tsAll HTTP endpoints require authentication via AuthFunc. WebSocket supports HTTP upgrade auth or token-based auth for SPAs.
Get running in 5 minutes. Install, define a graph, subscribe from any framework.
Server-side writes with typed params, auto-invalidation, HTTP and WebSocket execution.
Built-in WebSocket, Centrifugo, or custom. Auth modes, reconnect, protocol details.
Built-in dashboard. Graphs, mutations, subscriptions, WS connections, data store.
Client, React/Vue/Svelte adapters, WebSocket transport, IndexedDB, codegen.
Basic setup, real-time dashboard with mutations, WS transport, and DevTools.