/evolu

A local-first platform designed for privacy, ease of use, and no vendor lock-in

Primary LanguageTypeScriptMIT LicenseMIT

Evolu

Local-first platform designed for privacy, ease of use, and no vendor lock-in

  • SQLite in all browsers, Electron, and React Native
  • CRDT for merging changes without conflicts
  • End-to-end encrypted sync and backup
  • Free Evolu sync and backup server, or you can run your own
  • Typed database schema (with branded types like NonEmptyString1000, PositiveInt, etc.)
  • Typed SQL via Kysely
  • Reactive queries with full React Suspense support
  • Real-time experience via revalidation on focus and network recovery
  • No signup/login, only bitcoin-like mnemonic (12 words)
  • Ad-hoc migration
  • Sqlite JSON support with automatic stringifying and parsing
  • Support for Kysely Relations (loading nested objects and arrays in a single SQL query)
  • Local-only tables (tables with _ prefix are not synced)
  • Evolu Solid/Vue/Svelte soon

Local-first apps

Local-first apps allow users to own their data by storing them on their devices. Modern browsers provide API designed precisely for that. How is it different from keeping files on disk? Files are not the right abstraction for apps and cannot synchronize among devices. That's why traditional apps use the client-server architecture. But using client-server architecture also means that users' ability to use an app depends on some server that can be offline, temporarily or forever, if a company decides to ban a user or even goes bankrupt. That's unfortunate. Luckily, a way to restore data ownership exists. It's Evolu.

Documentation

For detailed information and usage examples, please visit evolu.dev.

API Reference

evoluhq.github.io/evolu

Community

The Evolu community is on GitHub Discussions, where you can ask questions and voice ideas.

To chat with other community members, you can join the Evolu Discord.

Twitter URL

Contributing

Evolu monorepo uses pnpm.

Install the dependencies with:

pnpm install

Build Evolu monorepo:

pnpm build

Start developing and watch for code changes:

pnpm dev

Start iOS developing (pnpm dev must be running too):

pnpm ios

Lint and tests:

pnpm lint test

Describe changes for release log:

pnpm changeset