Easy to use wrapper and Drizzle ORM driver for DuckDB WASM
Web browser based Playground, try it!
Note
Usage notes (as of Apr 12, 2025)
While using @proj-airi/duckdb-wasm
directly or indirectly with Vite, you may encounter the following error:
Cannot read file: .../node_modules/.pnpm/@[email protected]/node_modules/@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url
node_modules/.pnpm/@[email protected]/node_modules/@proj-airi/duckdb-wasm/dist/bundles/import-url-browser.mjs:3:26:
3 β import mvpMainWorker from '@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url';
β΅ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is due to an open issue with Vite, as a workaround, you can try excluding @proj-airi/duckdb-wasm
in optimizeDeps
in your
vite.config.ts
:
export default defineConfig({
// ...
optimizeDeps: {
exclude: ['@proj-airi/duckdb-wasm']
}
})
See also: vitejs/vite#10838
ni @proj-airi/drizzle-duckdb-wasm -D # from @antfu/ni, can be installed via `npm i -g @antfu/ni`
pnpm i @proj-airi/drizzle-duckdb-wasm -D
yarn i @proj-airi/drizzle-duckdb-wasm -D
npm i @proj-airi/drizzle-duckdb-wasm -D
import { drizzle } from '@proj-airi/drizzle-duckdb-wasm'
const db = drizzle('duckdb-wasm://?bundles=import-url', { schema })
const results = await db.execute('SELECT count(*)::INTEGER as v FROM generate_series(0, 100) t(v)')
console.log(results) // Output [{ v: 101 }]
// Remember to close / dispose the resources.
await db.$client.close()
@proj-airi/drizzle-duckdb-wasm
: Drizzle ORM driver for DuckDB WASM@proj-airi/duckdb-wasm
: Easy to use wrapper for@duckdb/duckdb-wasm
pnpm i
Start the Drizzle DuckDB WASM playground locally:
pnpm -F @proj-airi/drizzle-duckdb-wasm play:dev