JSQLite lleva SQLite al navegador sin WebAssembly: qué ofrece frente a SQLite

Navegador consultando una base de datos SQLite con JSQLite

JSQLite es un proyecto de código abierto que traduce a TypeScript la parte de lectura del motor de SQLite para consultar bases de datos SQLite directamente en el navegador, sin WebAssembly ni código nativo. Está en fase beta (v0.0.0-beta.2), solo admite consultas de lectura y se distribuye con licencia GPL v3. Su enfoque es distinto al de las soluciones habituales para llevar SQLite a la web, que compilan el código C original a WebAssembly.

Las claves de JSQLite frente a SQLite en 20 segundos

  • JSQLite traduce a TypeScript el motor de consultas de SQLite 3.53.4 para usarlo en el navegador sin WebAssembly.
  • Solo lee: no escribe, no usa transacciones ni recupera el WAL, y su soporte SQL es parcial.
  • Está en beta, con licencia GPL v3, solo se prueba en Chromium y aún no publica pruebas de rendimiento.

El proyecto lo firma Salvador Fandiño junto a los colaboradores de JSQLite, y su repositorio en GitHub acumula ya más de 940 commits. La idea es sencilla de explicar: se publica un archivo de base de datos SQLite como un fichero estático en un servidor web, el navegador lo abre por HTTP y ejecuta las consultas en local, en un worker dedicado, sin enviar el SQL a ningún backend. La web del proyecto incluye un playground con la base de ejemplo Chinook para probarlo sin instalar nada.

Qué hace JSQLite y qué no

JSQLite no es un port automático ni un envoltorio de la librería original. Según su documentación, es una traducción nueva del código C de SQLite a TypeScript, que toma como referencia el código fuente de SQLite 3.53.4. El resultado es JavaScript que se ejecuta en el navegador con módulos ESM y una API parecida a la de SQLite: open, prepare, step, column, finalize y close.

En la parte SQL soporta SELECT, joins, agregados, subconsultas, vistas, CTE y funciones de ventana, con índices y funciones en los casos documentados. Maneja enteros de 64 bits exactos como bigint, BLOB como Uint8Array, textos en UTF-8 y UTF-16, sentencias preparadas y ejecución asíncrona con cancelación y límites de recursos. El propio proyecto advierte de que no todas las combinaciones ni rutas del optimizador están implementadas, y de que las consultas no soportadas deben fallar de forma explícita en lugar de devolver resultados erróneos.

Lo que deja fuera es igual de importante para un administrador de sistemas. No hay escrituras, transacciones ni recuperación del WAL, así que la base debe publicarse como una instantánea limpia e inmutable, con los cambios del journal o del WAL ya aplicados. Tampoco admite extensiones externas. Si la base se sirve desde otro dominio, hay que configurar CORS. Las pruebas cubren Chromium y el resto de navegadores no está certificado. Aún no se publica en npm: se descarga desde las releases de GitHub y hay que servir el árbol completo de módulos.

JSQLite frente a SQLite y sus versiones para el navegador

Comparar JSQLite con SQLite tiene sentido solo con matices, porque no compiten en el mismo terreno. SQLite es una librería en C de dominio público, embebida en sistemas operativos, móviles, navegadores y aplicaciones, que lee y escribe con transacciones ACID, modo WAL y extensiones. JSQLite toma solo su parte de consulta y la lleva al navegador en otro lenguaje. Donde sí compite es con las formas habituales de usar SQLite en la web, que se apoyan en WebAssembly:

CaracterísticaSQLite (C)SQLite en WebAssembly (oficial y sql.js)JSQLite
Dónde se ejecutaNativo: servidor, escritorio, móvilNavegador o Node.js mediante WebAssemblyNavegador, en TypeScript/JavaScript
Lectura y escrituraSí, con transacciones ACIDSíSolo lectura
WAL y journalSíSegún el modo de almacenamientoNo; requiere una instantánea limpia
Compatibilidad SQLCompletaCompleta (es el mismo código C)Parcial, documentada por casos
ExtensionesSíLimitadas a las compiladasNo
LicenciaDominio públicoDominio público (oficial) y MIT (sql.js)GPL v3 o posterior
MadurezMás de 25 años en producciónEstableBeta

La ventaja que reivindica JSQLite es no necesitar WebAssembly, algo útil en entornos donde está restringido por políticas de seguridad o donde se quiere auditar el código que se ejecuta en el navegador en un lenguaje más legible. A cambio, renuncia a la escritura y a la compatibilidad total, y no publica cifras de rendimiento que permitan compararlo con las versiones en WebAssembly. La licencia también pesa: la GPL v3 obliga a publicar el código de las aplicaciones que lo distribuyan, algo que no ocurre con SQLite ni con sql.js.

Cuándo tiene sentido usarlo

El caso de uso que plantea el proyecto es publicar un conjunto de datos como un archivo estático y dejar que los usuarios lo consulten desde el navegador: catálogos, datos abiertos, documentación técnica o paneles de solo lectura, sin servidor de base de datos ni API intermedia. Para un sysadmin significa menos piezas que mantener y que proteger, a costa de servir la base completa como un recurso público.

Para cualquier otro escenario, la recomendación es seguir con SQLite o con su versión oficial en WebAssembly, que ofrece escritura y persistencia en el navegador. La propia web de JSQLite pide revisar el alcance de la beta y sus limitaciones antes de elegirlo para una aplicación. Para manejar bases SQLite desde la línea de comandos siguen siendo útiles herramientas como sqlite-utils o sqlit, el cliente de bases de datos para la consola, y para entornos de producción con muchos datos merece la pena repasar la guía de clustering, replicación y sharding.

Preguntas frecuentes

¿Qué es JSQLite?

Una traducción a TypeScript de la parte de lectura del motor de SQLite que permite consultar bases de datos SQLite en el navegador sin WebAssembly ni código nativo.

¿JSQLite puede escribir en la base de datos?

No. Es de solo lectura y no admite transacciones ni recuperación del WAL, así que la base debe ser una instantánea limpia e inmutable.

¿En qué se diferencia de sql.js o de SQLite en WebAssembly?

Las versiones en WebAssembly compilan el código C original de SQLite y ofrecen lectura, escritura y compatibilidad completa. JSQLite reescribe la parte de consulta en TypeScript, solo lee y tiene una compatibilidad SQL parcial.

¿Qué licencia tiene JSQLite?

GPL v3 o posterior. SQLite, en cambio, es de dominio público.

Fuentes:

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

Scroll al inicio
×