Instantiation
DuckDB-Wasm has multiple ways to be instantiated depending on the use case.
cdn(jsdelivr)
import * as duckdb from '@duckdb/duckdb-wasm';
const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
// Select a bundle based on browser checksconst bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
const worker_url = URL.createObjectURL( new Blob([`importScripts("${bundle.mainWorker}");`], {type: 'text/javascript'}));
// Instantiate the asynchronous version of DuckDB-Wasmconst worker = new Worker(worker_url);const logger = new duckdb.ConsoleLogger();const db = new duckdb.AsyncDuckDB(logger, worker);await db.instantiate(bundle.mainModule, bundle.pthreadWorker);URL.revokeObjectURL(worker_url);webpack
import * as duckdb from '@duckdb/duckdb-wasm';import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm';import duckdb_wasm_next from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm';const MANUAL_BUNDLES: duckdb.DuckDBBundles = { mvp: { mainModule: duckdb_wasm, mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js', import.meta.url).toString(), }, eh: { mainModule: duckdb_wasm_next, mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js', import.meta.url).toString(), },};// Select a bundle based on browser checksconst bundle = await duckdb.selectBundle(MANUAL_BUNDLES);// Instantiate the asynchronous version of DuckDB-Wasmconst worker = new Worker(bundle.mainWorker!);const logger = new duckdb.ConsoleLogger();const db = new duckdb.AsyncDuckDB(logger, worker);await db.instantiate(bundle.mainModule, bundle.pthreadWorker);vite
import * as duckdb from '@duckdb/duckdb-wasm';import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url';import mvp_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url';import duckdb_wasm_eh from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url';import eh_worker from '@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url';
const MANUAL_BUNDLES: duckdb.DuckDBBundles = { mvp: { mainModule: duckdb_wasm, mainWorker: mvp_worker, }, eh: { mainModule: duckdb_wasm_eh, mainWorker: eh_worker, },};// Select a bundle based on browser checksconst bundle = await duckdb.selectBundle(MANUAL_BUNDLES);// Instantiate the asynchronous version of DuckDB-wasmconst worker = new Worker(bundle.mainWorker!);const logger = new duckdb.ConsoleLogger();const db = new duckdb.AsyncDuckDB(logger, worker);await db.instantiate(bundle.mainModule, bundle.pthreadWorker);Statically Served
It is possible to manually download the files from https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm/dist/.
import * as duckdb from '@duckdb/duckdb-wasm';
const MANUAL_BUNDLES: duckdb.DuckDBBundles = { mvp: { mainModule: 'change/me/../duckdb-mvp.wasm', mainWorker: 'change/me/../duckdb-browser-mvp.worker.js', }, eh: { mainModule: 'change/m/../duckdb-eh.wasm', mainWorker: 'change/m/../duckdb-browser-eh.worker.js', },};// Select a bundle based on browser checksconst bundle = await duckdb.selectBundle(MANUAL_BUNDLES);// Instantiate the asynchronous version of DuckDB-Wasmconst worker = new Worker(bundle.mainWorker!);const logger = new duckdb.ConsoleLogger();const db = new duckdb.AsyncDuckDB(logger, worker);await db.instantiate(bundle.mainModule, bundle.pthreadWorker);