Skip to content

Simple util to use SQLite in browser, persist data to IndexedDB or OPFS, support FTS5 and UPDATE / DELETE LIMIT

License

Notifications You must be signed in to change notification settings

subframe7536/sqlite-wasm

Repository files navigation

sqlite-wasm

Typesafe custom wa-sqlite wrapper, run in memory or persist data to IndexedDB or OPFS, support FTS5 and update / delete limit

Low-level layer for kysely-wasqlite-worker-dialect

Usage

Memory

Use MemoryVFS with wa-sqlite.wasm, no data persistence

import { initSQLite, isOpfsSupported, useMemoryStorage } from '@subframe7536/sqlite-wasm' // optional url const url = 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite.wasm' const { run, changes, lastInsertRowId, close } = await initSQLite( useMemoryStorage({ url }) )

IndexedDB

use IDBBatchAtomicVFS with wa-sqlite-async.wasm, larger than sync version, better compatibility

minimal IndexedDB backend browser version

import { initSQLite } from '@subframe7536/sqlite-wasm' import { useIdbStorage } from '@subframe7536/sqlite-wasm/idb' // optional url const url = 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite-async.wasm' const { run, changes, lastInsertRowId, close } = await initSQLite( useIdbStorage('IndexedDB', { url }) )

IdbMemory

Use IDBMirrorVFS with wa-sqlite-async.wasm (larger than sync version), better performance compare to useIdbStorage, store data in memory and sync to IndexedDB.

import { initSQLite } from '@subframe7536/sqlite-wasm' import { useIdbMemoryStorage } from '@subframe7536/sqlite-wasm/idb' // optional url const url = 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite-async.wasm' const { run, changes, lastInsertRowId, close } = await initSQLite( useIdbMemoryStorage('IndexedDB', { url }) )

OPFS

use OPFSCoopSyncVFS with wa-sqlite.wasm, smaller than async version

minimal OPFS backend browser version

MUST RUN IN WEB WORKER

import { initSQLite, isOpfsSupported } from '@subframe7536/sqlite-wasm' import { useOpfsStorage } from '@subframe7536/sqlite-wasm/opfs' // optional url const url = 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite.wasm' onmessage = async () => { if (!await isOpfsSupported()) { // this can be called in main thread return } const { run, changes, lastInsertRowId, close } = await initSQLite( useOpfsStorage('OPFS', url) ) }

Custom Function

import { customFunction, initSQLite, useMemoryStorage } from '@subframe7536/sqlite-wasm' // optional url const url = 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite.wasm' const { sqlite, db, run } = await initSQLite(useMemoryStorage({ url })) customFunction(sqlite, db, 'testFn', (a: number, b: number) => a + b, {/* options */}) await run('select testFn(1,2) as a') // [{ a: 3 }]

License

MIT

About

Simple util to use SQLite in browser, persist data to IndexedDB or OPFS, support FTS5 and UPDATE / DELETE LIMIT

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published