Skip to content

Kora.jsApps that work anywhere

The offline-first framework. Local SQLite storage, automatic conflict resolution, and multi-device sync, with zero distributed-systems code.

Kora.js emblem

From nothing to offline-first in one command

No boilerplate, no sync plumbing, no distributed-systems reading list. Scaffold, run, and you have an app with local persistence, reactive queries, and an optional sync server.

bash
npx create-kora-app my-app
cd my-app
npm run dev

Your data layer is just a schema. Everything else is inferred:

typescript
import { createApp, defineSchema, t } from 'korajs'

const app = createApp({
  schema: defineSchema({
    version: 1,
    collections: {
      todos: {
        fields: {
          title: t.string(),
          completed: t.boolean().default(false),
          createdAt: t.timestamp().auto(),
        },
      },
    },
  }),
  sync: { url: 'wss://your-server.com/kora' }, // optional: one line for multi-device sync
})

await app.ready
await app.todos.insert({ title: 'Works on a plane' })

app.todos
  .where({ completed: false })
  .orderBy('createdAt')
  .subscribe((todos) => render(todos)) // reactive: fires now and on every change

Built for real-world networks

Kora treats offline as the normal state, not the error state. Writes land in local SQLite instantly and queue durably, surviving page refreshes. When a connection appears, sync sends compact binary deltas of only the operations the other side is missing, in causal order, and resumes from the last acknowledgment if the connection drops mid-sync. Concurrent edits from different devices converge deterministically through a merge engine whose every decision can be inspected in DevTools.

That makes Kora a fit wherever connectivity is expensive, intermittent, or hostile: field data collection, point of sale, clinics, warehouses, and any app whose users ride elevators, board planes, or live beyond reliable coverage.

Build something that survives the tunnel

One command. Ten minutes. No sync code.

Get Started