Skip to content

Docs Reference

Client library comparison

This table shows which capabilities each Kizuna client library exposes, with a link from every supported cell to the reference page that documents it.

CapabilityJavaScriptReactVueExpo / React NativeSwiftKotlin
Local reads and writesYesYesYesJS clientYesYes
Supabase-style filters and modifiersYesJS clientJS clientJS clientYesYes
Field transformsYesJS clientJS clientJS clientYesYes
Atomic write batchesNoNoNoNoNoNo
Journal of rejected writesYesYesYesJS clientYesYes
Journal of overwritten columnsYesYesYesJS clientYesYes
AttachmentsYes, with fileStoreYesYesYes, with Expo file storeYes, with attachmentRootYes, with attachmentRoot
Sync status hook or composableNo; getSyncHealth insteadYesYesReact hooksNo; scheduler health() insteadNo; scheduler health() instead
Automatic sync loopYesJS clientJS clientJS clientApp builds the schedulerApp builds the scheduler
Realtime wake-upYesJS clientJS clientJS clientPort; app writes the adapterPort; app writes the adapter
Session refresh on foregroundYesJS clientJS clientYesPass a refreshSession closurePass an Android foreground source
Browser tabs sharing one databaseYes, in the browserJS clientJS clientOn Expo webNot applicableNot applicable
How the Rust engine runsWebAssembly worker or N-APIJS clientJS clientUniFFI; WebAssembly on webUniFFIUniFFI

How to read the table#

React, Vue, and Expo / React Native wrap the JavaScript app client, so "JS client" means the capability comes from that client unchanged, and "React hooks" means an Expo app uses the React package, as it can wherever the React column has a hook. On iOS and Android the Expo / React Native column needs a development build, because Expo Go cannot load the engine, as Expo: Rust engine explains. Swift and Kotlin have no hooks: a native app subscribes to events with on and reads the state of its sync loop from the host scheduler it builds next to the client. A native app has no browser tabs, so the tab row reads "Not applicable" for Swift and Kotlin. The engine and the wire protocol carry atomic batches, but no app client exposes a way to create one, and Offline writes recommends one server-side operation for an all-or-nothing rule instead. Supported query operators lists the filters and modifiers method by method.

Found a problem? Edit this page on GitHub