kikko
kikko copied to clipboard
Powerful SQLite adapter for web, mobile and desktop. Build reactive UI on top of it
Kikko is a wrapper around SQLite interfaces. It brings transaction support, middlewares for queries, and SQLite adapters for the most popular platforms.
Build data heavy reactive interfaces on top of SQLite for any platform with any framework or lib.
Full documentation can be found on the site.
Also you can check example at CodeSanbox (multi-tab is not supported due to CORS).
Kikko | |
---|---|
⚡️ Fast on big datasets | And even for web! It even faster then IndexedDB. You can easily store 1m+ records at table, and everything will work smoothly. The SQLite project exists for 22+ years, and team made a great job to bring an excellent performance. And you can also use the whole power of SQL DBs — like indexes, triggers or views. |
🚀 Fast startup time | You don't need to load the whole DB into memory, and it guarantees the fast startup time for you app. |
📱 Wide platforms support | Web, mobile(react-native, expo, cordova, ionic), desktop(electron, tauri). |
🧰 Lib-agnostic | Use with React, Vue (WIP), Svelte (WIP), Angular (WIP) or any other lib/framework you want. |
📦 Out-of-the-box query builder | We tried to add support of all possible SQLite queries could be. But you can still use raw SQL queries. |
🧩 Good modularity | You can use @kikko-land/sql /@kikko-land/query-builder /@kikko-land/kikko without need to require the full lib. Use the only package you need. |
🛠 Plugin system | Allows you to integrate your own code on query/transaction run. |
👯 Multi-tab support for web | Mutate DB in one tab, and your data will be updated in other. |
🥹 Full typescript support | Yes! |
https://user-images.githubusercontent.com/7958527/174773307-9be37e1f-0700-45b4-8d25-aa2c83df6cec.mp4
Source code
CodeSandbox example
CAUTION: Right now multi-tab mode doesn't work correctly and crashes sometimes due to this bug at absurd-sql repo. I am working to fix it.
Supported platforms
Platform | Uses | Package | Example | Doc |
---|---|---|---|---|
Vite | @kikko-land/better-absurd-sql | @kikko-land/absurd-web-backend |
Link | Link |
Create-react-app | @kikko-land/better-absurd-sql | @kikko-land/absurd-web-backend |
Link | Link |
Tauri + Vite | tauri-plugin-sqlite | @kikko-land/tauri-backend |
Link | Link |
Expo | @kikko-land/better-absurd-sql for web, expo SQLite for native | @kikko-land/absurd-web-backend @kikko-land/native-expo-backend |
Link | Link |
Electron | better-sqlite3 | @kikko-land/electron-better-sqlite3-backend |
Link | Link |
Ionic | @awesome-cordova-plugins/sqlite | @kikko-land/absurd-web-backend @kikko-land/native-ionic-backend |
Link | Link |
React Native | react-native-sqlite-storage | @kikko-land/react-native-backend |
Link | Link |
WASM SQLite is better than IndexedDB
Read performance: doing something like SELECT SUM(value) FROM kv
:

Write performance: doing a bulk insert:

The graphs are taken from absurd-sql repo.
Overall, it works more consistent than IndexedDB. It is very often the case when IndexedDB crashes, but due to absurd-sql makes simple blocks read and writes, SQLite works more consistently.