Real-time
that survives a load balancer.
Reactivity isn’t a socket you manage — it’s the default. The runtime streams changes over one WebSocket as id-keyed delta patches, driven by native database change-data-capture, and fans them across every replica so a write on one instance surfaces on all of them.
// posts.list.query.ts → source drives invalidation
export const listPosts = defineQuery({
name: 'posts.list', source: 'posts',
input: Schema.Struct({}), output: Schema.Array(Post),
})
// In any component — one hook, live forever
const { data } = useSubscription('app', 'posts.list')
// A write on ANY replica pushes a delta here.
// No polling, no refetch, no useEffect.How live data actually travels.
Snapshot + delta wire protocol
One WebSocket carries every subscription. The first event is a full snapshot; the rest are id-keyed RFC-6902-style delta patches with an order array. Pure reorders emit zero ops, no-ops are suppressed, and per-subscription errors are isolated so one bad query can’t stall its siblings.
Native change-data-capture
Changes come from the database itself: Postgres LISTEN/NOTIFY, MySQL/MariaDB binlog, MSSQL Change Tracking, or an in-process bus for SQLite — so a write from anywhere (even a raw SQL client) wakes the right subscriptions.
Cross-replica fan-out
@voltro/plugin-broadcast fans app mutations to every instance behind a load balancer over Redis, NATS or memory. It’s additive to inline emit, so local reactivity survives a broker outage — and it closes the single-instance gap for SQLite and MSSQL.
Presence & typing
@voltro/plugin-presence tracks ephemeral per-channel presence with a heartbeat roster and typing indicators (usePresence / useTyping), swept automatically and working across instances.
Auto-optimistic, for free
Optimistic cache patches are derived from a mutation’s target metadata (its table + op) — override with .withOptimistic() or turn it off with .withoutOptimistic(). The list updates before the round-trip completes, then reconciles.
One-shot reads share the path
The same JSON envelope powers a POST /rpc one-shot path that drains a query to its first snapshot — exactly what SSR loaders use for first paint, with the same auth middleware.
Reactivity that scales out.
A write anywhere, seen everywhere
On Postgres and MySQL/MariaDB the fan-out is native — a write on any replica surfaces on every replica. For dialects without native cross-instance CDC, or any deployment behind a load balancer, plugin-broadcast adds a Redis or NATS bus on top of the inline emit, so scaling from one instance to a fleet doesn’t change a line of your application code.
Real-time builds on the data layer.
Open the framework. See it for yourself.
Every primitive on this page is in the framework today. Clone the starter, run `voltro dev`, and have it on screen in two minutes.