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.
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.
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
Lint and tests:
pnpm lint test
Describe changes for release log:
pnpm changeset