DuckDB‑Wasm permite bases de datos persistentes en el navegador mediante OPFS
A partir de la versión 1.32.0, DuckDB‑Wasm puede abrir archivos .duckdb en el Origin Private File System, manteniendo datos entre recargas y cierres de pestaña.

DuckDB‑Wasm incorporó soporte para el Origin Private File System (OPFS) y ya no depende exclusivamente del heap de WebAssembly. En versiones anteriores (2021‑2022) los datos desaparecían al cerrar la pestaña, obligando a serializar tablas a Parquet y guardarlas en IndexedDB. Con OPFS, un archivo opfs://analytics.duckdb se crea en el sandbox del origen y su write‑ahead log y checkpoints sobreviven a recargas y a reinicios del navegador.
El código de apertura es sencillo:
await db.open({
path: 'opfs://analytics.duckdb',
accessMode: duckdb.DuckDBAccessMode.READ_WRITE
});
En la práctica, la primera carga crea la tabla y escribe una fila; al volver a cargar la página la sentencia CREATE TABLE IF NOT EXISTS detecta la tabla existente y el INSERT añade una nueva fila, por lo que el conteo pasa de 1 a 2 sin ninguna operación de exportación.
Versiones y compatibilidad
El artículo advierte que la versión publicada en npm (1.33.1‑dev57.0) genera los archivos OPFS pero no escribe en ellos, rompiendo la persistencia. La solución es usar la etiqueta 1.32.0 o cualquier versión a partir de 1.33.1‑dev64.0. El proceso de inicialización sigue siendo el mismo que para cualquier aplicación DuckDB‑Wasm: seleccionar el bundle adecuado, crear un worker del mismo origen y crear una instancia AsyncDuckDB.
Uso de datos externos y caché
El prefijo opfs:// también sirve para archivos de datos. Un ejemplo típico carga la tabla TPC‑H orders desde la web shell de DuckDB y la materializa en OPFS. La primera carga realiza peticiones HTTP con range requests; en recargas posteriores la tabla se lee directamente del sistema de archivos privado, lo que se refleja en la ausencia de logs de red.
CREATE TABLE IF NOT EXISTS orders AS SELECT * FROM 'https://shell.duckdb.org/data/tpch/0_01/parquet/orders.parquet';
CHECKPOINT;
Con los datos locales, se pueden generar resultados agregados y guardarlos como Parquet en OPFS, reutilizándolos sin volver a descargar nada.
Modo de manejo de archivos
Al abrir la base con la opción { fileHandling: 'auto' }, DuckDB‑Wasm registra automáticamente cualquier literal 'opfs://...' encontrado en la sentencia SQL, creando archivos y directorios según sea necesario y liberando los manejos al terminar. Esta característica solo funciona cuando la propia base está almacenada en OPFS.
En resumen, la incorporación de OPFS convierte a DuckDB‑Wasm en una solución viable para aplicaciones web que requieren persistencia real de datos, eliminando la complejidad de gestionar manualmente IndexedDB o descargas de archivos.
Repositorio en GitHub muestra los cambios y ejemplos de uso. Para verificar la disponibilidad de OPFS en los navegadores, consulte la tabla de compatibilidad en caniuse.com.


