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@beta my-app
cd my-app
npm run dev

Upgrading an app from 1.0.0-beta.12? Read Upgrading to beta.13 first: the release is breaking, and servers upgrade before clients.

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-sync', autoConnect: true }, // 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 only the operations the other side is missing, in causal order, and resumes from the last acknowledged position if the connection drops mid-sync; nothing delivered is ever skipped. Concurrent edits from different devices converge deterministically: every replica folds the same operations into the same record, and every merge 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