Skip to main content
The SDK stores everything in IndexedDB and syncs in the background.

What Happens Offline

ActionOffline behavior
listDocumentsReturns cached records immediately
listCasesReturns cached cases immediately
addDocumentSaves record + blob as upload_failure — retried on reconnect
editDocumentPatches DB (isEdited: true) — synced on reconnect
deleteDocumentSoft-deletes (isArchived: true) — hard-deleted on reconnect
createCaseSaves locally (isRemoteCreated: false) — created on reconnect

Sync

Clear cache on logout

Reactive UI Updates

Subscribe to DB change events — the UI auto-updates on any write (upload, edit, delete, sync).
Events:
EventFired after
documents:changedAny record write (upload, edit, delete, sync)
cases:changedAny case write

Pending sync count

Logging

The SDK emits a structured event for every CRUD operation (create / read / update / delete) on records and cases, routed through your onLog callback. Events are analytics-ready — forward them straight to Mixpanel, Sentry, Datadog, etc. If onLog is not configured, logging is a no-op.
SDKLog shape:
Event names follow the pattern {Records|Cases}_TS_SDK_{CREATE|READ|UPDATE|DELETE}. Each operation typically fires two events — one with platform: 'database' (local write) and one with platform: 'network' (server sync) — each with its own success / failure status.

Electron Setup

IndexedDB works natively in the Electron renderer process. Only the transport differs:
bridge routes Eka API calls through window.networkApi (IPC → main → net.fetch). S3 uploads always use fetch() directly — the IPC bridge cannot carry binary data.