Documentation Index
Fetch the complete documentation index at: https://docs.abloatai.com/llms.txt
Use this file to discover all available pages before exploring further.
Intents
Coordinate writes to an entity with the same accessor you read it:ablo.<model>.intent(id).acquireOrAwait()is the serialize-on-contention call — you never branch on who holds the target; you just get it safely. Bind it to an agent’s write tool so agents never reason about coordination.- Handles are
AsyncDisposable—await using lock = …releases on scope exit.
intents.claim() / onRejected() are superseded
by the per-model handle and will be removed in a future release.Umbrella <AbloProvider> for React
One provider component now owns the full lifecycle — singleton rotation on auth
change, Strict-Mode-safe bootstrap, beforeunload cleanup, session-expiry
IndexedDB wipe, post-bootstrap hooks, mesh client construction. The reference
integration shrank from 515 LOC of hand-rolled wiring to a 60-LOC wrapper.Added
<AbloProvider>— umbrella provider at@abloatai/ablo/reactwith declarative data, auth, behavior, and callback props.<SyncGroupProvider id="…">+useSyncGroup()— per-entity scope context.<ClientSideSuspense fallback={…}>— gate renders until the engine isconnected.useSyncStatus()rewritten as a tagged union — impossible states are unrepresentable.useCurrentUserId(),useErrorListener(cb).- Commit payload projection built into
TransactionQueue— wire payloads derived from the schema alone; hand-rolled extractor tables can be deleted.
Breaking
- Removed
<SyncProvider>(folded into<AbloProvider>) andcreateAbloContext()— mesh is always-on;useAblo()/useParticipant()always available. - Removed
withSync(importobserverfrommobx-react-litedirectly). useSyncStatus()now returns a tagged union instead of six booleans:const isReady = useSyncStatus().name === 'connected'.
useQuery / useOne / useMutate / useReader / useMutators /
useUndoScope / usePresence / useIntent.React bindings hardening
Fixes two infinite-loop classes that surfaced downstream as React error #185 (“Maximum update depth exceeded”), and exposes sync-status reactivity as a first-class observable + hook.Fixed
useQuery/useOneno longer loop ongetSnapshot— the snapshot is cached in a ref and refreshed only inside the subscribe callback.
Added
BaseSyncedStoresync status is now properly observable (isReady,isSyncing,isOffline,isReconnecting,isError,hasUnsyncedChanges).useSyncStatus()React hook — reactive snapshot bridged viauseSyncExternalStore.
Mesh SDK — the canonical agent-multiplayer surface
The SDK covers exactly three integration shapes, each with a canonical example: server agent, browser app (scoped capability token, Stripeclient_secret
shape), and sub-agent (attenuated from the parent capability).Ergonomics
Abloclass —import Ablo from '@abloatai/ablo'/new Ablo({ schema }), matchingnew Stripe()/new OpenAI().- Model-scoped joins —
ablo.matters.join(id, { label }). asalias replacesonBehalfOf; duration strings (ttl: '3m'); auto-connect.
Coordination primitives
- Presence verbs —
presence.editing(target)/viewing(target)/idle(). - Intent verbs —
intents.editing(target)/writing(target), returning anIntentHandlewithSymbol.asyncDisposeforawait using. - Snapshots and async iterables over presence, intents, and deltas.
Config
organizationIdno longer required — the API key or session binds the caller’s org.createMeshFromEnvremoved —new Ablo({ schema })auto-reads env.
Initial release
- Schema DSL — zero-codegen schema with full TypeScript inference.
- React hooks — reactive data binding for models, mutations, and queries.
- Consumer API —
createSyncEngine()one-liner setup. - Offline-first — IndexedDB persistence with an FK-safe offline mutation queue.
- Real-time sync — WebSocket delta streaming with optimistic updates and rollback.
- AI Agent SDK —
SyncAgentfor agents as first-class sync citizens. - Pluggable auth — API key, JWT, and session providers.