Leg eine Datei ab.
Die Runtime verdrahtet sie.
Jede Fähigkeit ist ein typisierter Descriptor, per Datei-Konvention erkannt. Nenn eine Datei *.query.ts, *.mutation.ts, *.workflow.tsx — der Discovery-Walker der CLI findet sie beim nächsten Boot und verdrahtet sie in die typisierte RPC-Gruppe. Keine Import-Barrels, keine Registrierung, kein Codegen-Befehl zum Merken.
// Drop a file with the right suffix — that's it.
todos.list.query.ts → useSubscription
todos.create.mutation.ts → useMutation
sendEmail.action.ts → useAction
order.fulfil.workflow.tsx → useWorkflow
nightly.cron.tsx → scheduled
stripe.webhook.tsx → signed inbound
// Each: a browser-safe descriptor + a .server executor.
// The discovery walker wires it in on next boot.Das Primitive-Set, nach Datei-Suffix.
Descriptor + Server-Executor
Jede Prozedur sind zwei Dateien: ein browser-sicherer Descriptor (Name, effect/Schema, Metadata) und ein server-only Executor (*.server.ts — DB, SDKs, Secrets). Die Browser-Safe-Regel ist transitiv, sodass deine Schemas zum Client shippen, ohne Node-Internals mitzuschleppen.
Das Kern-Quartett
query (Live-reaktiver Read → useSubscription), mutation (atomarer transaktionaler Write → useMutation), action (One-Shot-externes-I/O → useAction), stream (Server→Client-Push → useAgentStream). Input, Output und Errors sind alle effect/Schema.
Durable & geplant
workflow (durable mehrstufig), cron (geplant), trigger (Domain-Event → Fan-out), subscribe (Pro-Tabelle-Post-Commit-Reaktion), aggregate (materialisierte Query). Die durablen überleben Deploys, Retries und Crashes.
AI & Tools
agent (persistierter AI-Chat → useAgent), tool (model-aufrufbare Funktion), reaction (eine Änderung feuert einen Agent hinter verpflichtenden Spend-Guards). Agents auto-migrieren ihre Thread- + Message-Tabellen, tenant-scoped.
HTTP, Webhooks & E-Mail
route (öffentlicher Raw-HTTP-Endpunkt), webhook (signiertes Inbound + durable Outbound), email (React-Email-Template), plus seed- und startup-Hooks — dasselbe Discovery-Modell, anderes Suffix.
Eindeutige RPC-Tags, beim Boot geprüft
Jeder Descriptor hat einen global eindeutigen Punkt-Namen (todos.list → todosListRpc). Kollisionen lassen den Boot fehlschlagen; es gibt kein handgeschriebenes SDK pro Endpunkt, und voltro dev regeneriert den typisierten Client bei jeder Änderung.
Konvention statt Registrierung.
Der Discovery-Walker macht die Verdrahtung
Du pflegst nie eine Registry oder ein Import-Barrel. Die CLI läuft den Baum ab, findet jede Datei mit bekanntem Suffix und verdrahtet sie in die generierte RPC-Gruppe — Typen fließen über Vites Modul-Graph zum Client. Die eine Regel: Ein Descriptor und alles, was er importiert, muss browser-sicher bleiben, also lebt server-only Code in der *.server-Datei daneben.
Primitives sind die Oberfläche der Runtime.
Typsicherheit
Das Schema jedes Descriptors fließt zum Client — typisierter Input, Output und Errors, kein Codegen-Schritt.
Reaktive Queries
Die query-Primitive ist eine Live-Subscription, kein One-Shot-Fetch.
Schema-getriebene UI
AutoForm und DataTable binden direkt an einen Mutation- oder Query-Descriptor.
Ö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.