{"id":46504,"library":"sqlite-worker","title":"sqlite-worker","description":"sqlite-worker is a persistent SQLite database library for Web pages, Web Workers, and Service Workers (v0.9.0). It wraps sql.js and sqlite-tag to provide a tagged template literal API for queries, with automatic persistence via IndexedDB. Unlike sql.js alone, it manages the database file lifecycle and offers both main-thread (init) and worker-based (SQLiteWorker) execution. The library requires manual dist folder path configuration in Worker contexts due to a browser bug. Release cadence is irregular; latest version is 0.9.0.","status":"active","version":"0.9.0","language":"javascript","source_language":"en","source_url":"https://github.com/WebReflection/sqlite-worker-","tags":["javascript","sqlite","persistent","indexeddb","worker"],"install":[{"cmd":"npm install sqlite-worker","lang":"bash","label":"npm"},{"cmd":"yarn add sqlite-worker","lang":"bash","label":"yarn"},{"cmd":"pnpm add sqlite-worker","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"SQLite compiled to WebAssembly for SQL execution","package":"sql.js","optional":false},{"reason":"Tagged template helper for SQL query construction","package":"sqlite-tag","optional":false}],"imports":[{"note":"Named export, not default. Only works in main thread with ESM; in Workers use importScripts.","wrong":"import SQLiteWorker from 'sqlite-worker'","symbol":"SQLiteWorker","correct":"import { SQLiteWorker } from 'sqlite-worker'"},{"note":"init runs SQLite in main thread. Named export, ESM only.","wrong":"const { init } = require('sqlite-worker')","symbol":"init","correct":"import { init } from 'sqlite-worker'"},{"note":"In Service Workers, use importScripts on dist/sw.js; symbol attached to self (globalThis). Not a module export.","wrong":"import { sqliteWorker } from 'sqlite-worker'","symbol":"sqliteWorker (global)","correct":"importScripts('./dist/sw.js'); const { sqliteWorker } = self;"}],"quickstart":{"code":"import { SQLiteWorker } from 'sqlite-worker';\nimport { init } from 'sqlite-worker';\n\n// Option 1: Use a Web Worker (recommended)\nconst db = await SQLiteWorker({ name: 'my-app-db' });\nawait db.query`CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, value TEXT)`;\nawait db.query`INSERT INTO test (value) VALUES (${'hello'})`;\nconst rows = await db.all`SELECT * FROM test`;\nconsole.log(rows);\n\n// Option 2: Run on main thread (slightly faster)\nconst db2 = await init({ name: 'my-app-db' });\nawait db2.query`CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, value TEXT)`;\nconsole.log(await db2.all`SELECT * FROM test`);\n\n// Or use tagged template for safe table/column names\nconst { raw } = db;\nconst table = raw`my_table`;\nawait db.query`SELECT * FROM ${table}`;","lang":"typescript","description":"Shows two initialization methods (worker vs main thread) and basic CRUD with tagged template literals."},"warnings":[{"fix":"Provide dist option: SQLiteWorker({ dist: './dist/', name: 'my-db' })","message":"In Web Workers and Service Workers, the 'dist' folder path must be specified manually to resolve sql.js WASM files. Fails silently if omitted.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use importScripts and call the global sqliteWorker function, not the ES import.","message":"importScripts('./dist/sw.js') must be used in Service Workers instead of ES import. The module attaches a global 'sqliteWorker' function.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use query for standalone queries; for transactions, use the transaction function returned by init/SQLiteWorker.","message":"The 'transaction' export might change in future versions; raw transactions are available via query.","severity":"deprecated","affected_versions":">=0.9.0"}],"env_vars":null,"search_vec":"'0.9.0':88 'alon':45 'api':35 'automat':39 'base':62 'browser':79 'bug':80 'cadenc':82 'configur':72 'context':75 'databas':11,49 'dist':69 'due':76 'execut':64 'file':50 'folder':70 'indexeddb':42,92 'init':58 'irregular':84 'javascript':89 'latest':85 'librari':12,66 'lifecycl':51 'liter':34 'main':56 'main-thread':55 'manag':47 'manual':68 'offer':53 'page':15 'path':71 'persist':9,40,91 'provid':30 'queri':37 'releas':81 'requir':67 'servic':19 'sql.js':24,44 'sqlite':2,5,10,27,90 'sqlite-tag':26 'sqlite-work':1,4 'sqlitework':63 'tag':28,32 'templat':33 'thread':57 'unlik':43 'v0.9.0':21 'version':86 'via':41 'web':14,16 'worker':3,6,17,20,61,74,93 'worker-bas':60 'wrap':23","created_at":"2026-06-07T13:00:14.761919+00:00","updated_at":"2026-06-07T13:00:14.761919+00:00","problems":[{"fix":"In Workers, use importScripts('./dist/sw.js') or provide dist option to SQLiteWorker.","cause":"Missing dist folder / wrong import method in Worker context","error":"TypeError: Failed to resolve module specifier 'sqlite-worker'"},{"fix":"Run: npm install sql.js sqlite-worker","cause":"sql.js not installed as a dependency; sqlite-worker requires it as a peer dependency","error":"Error: Cannot find module 'sql.js'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/WebReflection/sqlite-worker-#readme","github":"https://github.com/WebReflection/sqlite-worker-","docs":null,"changelog":null,"pypi":null,"npm":"sqlite-worker","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}