SQLite Wasm compiled with automatically initialized sqlite-sync and sqlite-vector extensions. Conveniently packaged as an ES Module for effortless integration.
npm install @sqliteai/sqlite-wasmSQLite WASM conveniently wrapped as an ES Module. It includes the
sqlite-sync and
sqlite-vector extensions that are
automatically loaded at runtime. TypeScript types are from the
official sqlite-wasm repository.
- š SQLite WASM wrapped as an ES Module
- š Includes sqlite-sync and sqlite-vector extensions
- š Full TypeScript support
- š¾ OPFS (Origin Private File System) support for persistent storage
- ā” Worker thread support for better performance
``bash`
npm install @sqliteai/sqlite-wasm
If you are using Vite, you need to add the following
configuration options to your vite.config.js:
`js
import { defineConfig } from 'vite';
export default defineConfig({
server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp',
},
},
optimizeDeps: {
exclude: ['@sqliteai/sqlite-wasm'],
},
});
`
š” Example: Check out the
sport-tracker-app example
to see SQLite WASM in action with a worker thread implementation.
There are three ways to use SQLite WASM:
1. Wrapped Worker - Uses a wrapped
worker (recommended)
2. Direct Worker - Uses a direct worker
implementation
3. Main Thread - Runs in the main thread ā ļø
_sqlite-sync does not work in the main thread_
> š” Note: Only the worker versions support the Origin Private File System
> (OPFS) storage backend for persistent data storage.
> [!Warning]
>
> For this to work, you need to set the following headers on your server:
>
> Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp
>
>
`js
import { sqlite3Worker1Promiser } from '@sqliteai/sqlite-wasm';
const log = console.log;
const error = console.error;
const initializeSQLite = async () => {
try {
log('Loading and initializing SQLite3 module...');
const promiser = await new Promise((resolve) => {
const _promiser = sqlite3Worker1Promiser({
onready: () => resolve(_promiser),
});
});
log('Done initializing. Running demo...');
const configResponse = await promiser('config-get', {});
log('Running SQLite3 version', configResponse.result.version.libVersion);
const openResponse = await promiser('open', {
filename: 'file:mydb.sqlite3?vfs=opfs',
});
const { dbId } = openResponse;
log(
'OPFS is available, created persisted database at',
openResponse.result.filename.replace(/^file:(.*?)\?vfs=opfs$/, '$1'),
);
// Your SQLite code here.
} catch (err) {
if (!(err instanceof Error)) {
err = new Error(err.result.message);
}
error(err.name, err.message);
}
};
initializeSQLite();
`
> š API Reference: The promiser object implements the
> Worker1 API.
> [!Warning]
>
> For this to work, you need to set the following headers on your server:
>
> Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp
>
>
Main thread (main.js):
`js`
const worker = new Worker('worker.js', { type: 'module' });
Worker thread (worker.js):
`js
import sqlite3InitModule from '@sqliteai/sqlite-wasm';
const log = console.log;
const error = console.error;
const start = (sqlite3) => {
log('Running SQLite3 version', sqlite3.version.libVersion);
const db =
'opfs' in sqlite3
? new sqlite3.oo1.OpfsDb('/mydb.sqlite3')
: new sqlite3.oo1.DB('/mydb.sqlite3', 'ct');
log(
'opfs' in sqlite3
? OPFS is available, created persisted database at ${db.filename}OPFS is not available, created transient database ${db.filename}
: ,
);
// Your SQLite code here.
};
const initializeSQLite = async () => {
try {
log('Loading and initializing SQLite3 module...');
const sqlite3 = await sqlite3InitModule({ print: log, printErr: error });
log('Done initializing. Running demo...');
start(sqlite3);
} catch (err) {
error('Initialization error:', err.name, err.message);
}
};
initializeSQLite();
`
> š API Reference: The db object implements the
> Object Oriented API #1.
`js
import sqlite3InitModule from '@sqliteai/sqlite-wasm';
const log = console.log;
const error = console.error;
const start = (sqlite3) => {
log('Running SQLite3 version', sqlite3.version.libVersion);
const db = new sqlite3.oo1.DB('/mydb.sqlite3', 'ct');
// Your SQLite code here.
};
const initializeSQLite = async () => {
try {
log('Loading and initializing SQLite3 module...');
const sqlite3 = await sqlite3InitModule({
print: log,
printErr: error,
});
log('Done initializing. Running demo...');
start(sqlite3);
} catch (err) {
error('Initialization error:', err.name, err.message);
}
};
initializeSQLite();
`
> š API Reference: The db` object implements the
> Object Oriented API #1.
- š SQLite WASM Documentation
- š§ Worker1 API Reference
- š ļø Object Oriented API #1
- š¦ Package on NPM
This project is licensed under the Elastic License 2.0. You can
use, copy, modify, and distribute it under the terms of the license for
non-production use. For production or managed service use, please
contact SQLite Cloud, Inc for a commercial
license.