Realtime,
die einen Load Balancer überlebt.
Reaktivität ist kein Socket, den du verwaltest — sie ist der Default. Die Runtime streamt Änderungen über einen WebSocket als id-basierte Delta-Patches, getrieben von nativem Datenbank-Change-Data-Capture, und fächert sie über jede Replica, sodass ein Write auf einer Instanz auf allen erscheint.
// 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.Wie Live-Daten wirklich reisen.
Snapshot- + Delta-Wire-Protokoll
Ein WebSocket trägt jede Subscription. Das erste Event ist ein voller Snapshot; der Rest sind id-basierte Delta-Patches im RFC-6902-Stil mit einem order-Array. Reine Reorders emittieren null Ops, No-Ops werden unterdrückt, und Fehler pro Subscription sind isoliert, sodass eine schlechte Query ihre Geschwister nicht blockiert.
Natives Change-Data-Capture
Änderungen kommen aus der Datenbank selbst: Postgres LISTEN/NOTIFY, MySQL/MariaDB Binlog, MSSQL Change Tracking oder ein In-Process-Bus für SQLite — sodass ein Write von überall (sogar ein roher SQL-Client) die richtigen Subscriptions weckt.
Cross-Replica-Fan-out
@voltro/plugin-broadcast fächert App-Mutationen an jede Instanz hinter einem Load Balancer über Redis, NATS oder Memory. Es ist additiv zum Inline-Emit, sodass lokale Reaktivität einen Broker-Ausfall überlebt — und es schließt die Single-Instance-Lücke für SQLite und MSSQL.
Presence & Typing
@voltro/plugin-presence verfolgt ephemere Presence pro Channel mit Heartbeat-Roster und Typing-Indikatoren (usePresence / useTyping), automatisch gesweept und über Instanzen hinweg funktionierend.
Auto-Optimistic, gratis
Optimistic-Cache-Patches werden aus dem target-Metadata einer Mutation abgeleitet (sein table + op) — überschreib mit .withOptimistic() oder schalt es mit .withoutOptimistic() aus. Die Liste aktualisiert sich vor dem Round-Trip und reconciliert dann.
One-Shot-Reads teilen den Pfad
Dasselbe JSON-Envelope treibt einen POST /rpc-One-Shot-Pfad, der eine Query bis zum ersten Snapshot leert — genau das, was SSR-Loader für den First Paint nutzen, mit derselben Auth-Middleware.
Reaktivität, die skaliert.
Ein Write überall, überall gesehen
Auf Postgres und MySQL/MariaDB ist der Fan-out nativ — ein Write auf einer Replica erscheint auf jeder Replica. Für Dialekte ohne natives Cross-Instance-CDC oder jedes Deployment hinter einem Load Balancer ergänzt plugin-broadcast einen Redis- oder NATS-Bus über dem Inline-Emit, sodass das Skalieren von einer Instanz zu einer Flotte keine Zeile deines Anwendungscodes ändert.
Realtime baut auf der Datenschicht auf.
Öffne das Framework. Schau es dir selbst an.
Jede Primitive auf dieser Seite ist heute im Framework. Klone den Starter, lass `voltro dev` laufen, in zwei Minuten ist es auf dem Bildschirm.