Work / Flagship project
Kora.js: apps that work anywhere
An offline-first application framework I built after pharmacies asked for software that works online and offline. It’s one of the most ambitious things I’ve built.
Why I built it
While I was building Ngoane’s products, pharmacies kept asking for software that worked both online and offline. Not simple sync: networks were unstable, and some pharmacies had several branches that wanted to share one product and one database.
Building that from existing tools and libraries proved very hard. I wondered why there was no simple framework for it, the way Next.js exists for web apps. So I decided to build one, with the help of AI.

What Kora.js does
The whole data plane, handled
- Offline by defaultEvery code path works without a network. Connectivity enables sync; it never gates functionality.
- Zero sync codeDefine a schema and build the UI. Storage, conflict resolution and sync are handled.
- Three-tier merge engineLast-write-wins and CRDTs by default, declarative constraints when rules matter, custom resolvers when needed. Every merge decision is traceable.
- A real database in the browserSQLite compiled to WebAssembly, persisted with OPFS, running in a worker. IndexedDB and native SQLite adapters included.
- Type-safe by designTypeScript inference from schema to queries, mutations and hooks. Works with React, Vue and Svelte.
- Two commands to deploy
npx create-kora-appscaffolds an app;kora deployships the sync server.
Testing it on real apps
Built with Kora.js
Bozoma Learn
An offline-first LMS that runs both self-paced and cohort-based programs, built on Kora.js for the Bozoma Innovation Hub model.
KoraForms
Forms that collect responses without internet. Responses save locally and sync automatically.
KoraDocs
Documents you write offline and co-edit when a connection returns, with the local copy as the source of truth.


Engineering
- More than 3,300 automated tests.
- Sync sends compact binary deltas in causal order and resumes from the last acknowledgment if a connection drops.
- Merge decisions can be inspected in DevTools.
What I’m learning
Kora.js taught me the power a builder has. I came across a problem people were discussing, felt I had the power to build the solution, and took it on.
I’ve had to learn a lot, and I’m still learning and building. AI has played a tremendous role: coding agents write most of the code, and I’ve learned how to get the most out of any AI coding tool.
Building for unreliable networks?
Try Kora.js, or tell me what you’re building.