Datasette Apps: ejecutar aplicaciones HTML seguras dentro de Datasette
Datasette presentó el plugin datasette-apps (18 de junio de 2026), que permite integrar aplicaciones HTML+JavaScript embebidas en iframes aislados. Ofrece acceso a consultas SQL controladas, un CSP inyectado y un canal seguro de mensajería para proteger datos sensibles.
Resumen y contexto
El 18 de junio de 2026 se anunció el lanzamiento del nuevo plugin datasette-apps para Datasette. En esencia, Datasette Apps son aplicaciones HTML+JavaScript autocontenidas que se ejecutan en un iframe estrictamente restringido dentro de una instancia de Datasette. Están diseñadas para permitir interfaces personalizadas que consultan datos alojados en Datasette, manteniendo al mismo tiempo controles fuertes sobre lo que ese código puede y no puede hacer.
Para la audiencia técnica y de decisiones en América Latina esto significa poder ofrecer experiencias front-end específicas —herramientas internas, visualizaciones ad hoc, interfaces para equipos de producto o integraciones con agentes— sin sacrificar la seguridad de los datos ni exponer secretos de la plataforma.
¿Qué permiten y qué limitan las Datasette Apps?
- Ejecutar HTML, CSS y JavaScript dentro de un entorno aislado.
- Realizar consultas SQL de solo lectura directamente desde el código cliente contra la API de Datasette.
- Ejecutar operaciones de escritura solo si se configuran explícitamente consultas almacenadas (stored queries) que activen esas escrituras.
Las apps corren en un iframe con atributos como <iframe sandbox=“allow-scripts allow-forms”> que impiden el acceso al DOM del contenedor, a cookies o a localStorage. Además, el sistema inyecta un encabezado de Content-Security-Policy (CSP) en el contenido del iframe para bloquear peticiones HTTP a dominios externos. Esa combinación reduce significativamente el riesgo de exfiltración de datos incluso si una app contiene código malicioso o fallas.
Origen e inspiración
El creador del proyecto describe cómo algunas de sus experiencias previas motivaron esta funcionalidad: proyectos tempranos que usaron la API JSON de Datasette para construir interfaces de búsqueda, incluyendo un buscador interno de documentación durante su paso por Eventbrite, y experimentos con “vibe-coded HTML tools” y mecanismos tipo “Claude Artifacts” para agentes LLM. La idea central es potente: un backend relacional como Datasette más un frontend HTML autocontenido proporciona una plataforma flexible y persistente para interfaces personalizadas.
El truco técnico: sandbox + CSP
La conjunción que hace viable este enfoque es simple pero eficaz:
- El iframe se ejecuta con sandbox para aislar APIs sensibles.
- El contenido del iframe incluye un <meta http-equiv=“Content-Security-Policy” content=“default-src ‘none’; script-src ‘unsafe-inline’; style-src ‘unsafe-inline’; img-src data: blob:;”> que restringe recursos externos.
Aunque el iframe permite correr scripts, el CSP inyectado impide que esos scripts carguen recursos desde hosts externos o realicen peticiones arbitrarias a la red. Un aspecto clave es que la política CSP resulta inmutable para el contenido del frame una vez definida, lo que impide que JavaScript inyectado la modifique para evadir restricciones.
Comunicación segura: postMessage() y MessageChannel()
Con el iframe fuertemente limitado, el siguiente desafío fue permitir un conjunto controlado de operaciones útiles (por ejemplo, ejecutar consultas SQL permitidas) sin abrir una vía de ataque. Inicialmente se desarrolló un protocolo simple usando postMessage(), lo que permite que el iframe envíe solicitudes al padre para que ejecute consultas verificadas. Más adelante se migró la comunicación a MessageChannel(), que ofrece ventajas de seguridad adicionales: si la página cambia de destino o navega fuera, el canal se cierra automáticamente, reduciendo riesgos de ejecución de comandos procedentes de páginas externas.
Este diseño establece un patrón de “permitir solo lo necesario”: los iframes solicitan operaciones y el host verifica contra un allow-list antes de ejecutar cualquier cosa.
Transparencia para desarrollo: logs visibles
Una mejora práctica incluida en los demos es el registro visible de errores y de consultas. Por ejemplo, si una app intenta cargar imágenes desde un dominio que no está en la lista del CSP, ese error queda capturado y enviado al contenedor, donde se muestra en un log de errores accesible al desarrollador. De la misma manera las consultas SQL que realiza la app se registran y son visibles. Esto facilita depurar y ajustar apps, y permite construir flujos donde el administrador decide agregar dominios al allow-list tras revisar qué está fallando.
Escrituras: consultas almacenadas como control
Permitir que una app escriba en la base de datos es mucho más sensible que permitir lecturas. En lugar de dar acceso SQL arbitrario desde el iframe, el enfoque documentado permite la ejecución de escrituras únicamente a través de consultas almacenadas (stored queries) predefinidas y configuradas en Datasette. De ese modo el equipo puede exponer operaciones concretas y seguras —por ejemplo, insertar un registro o actualizar un estado— sin abrir la puerta a ejecuciones SQL arbitrarias.
Casos de uso relevantes para la región
- Portales internos con vistas y filtros específicos para equipos de producto o compliance, sin necesidad de desplegar nuevos servicios web.
- Herramientas de auditoría y visualización de datos que se integran directamente en la instancia de Datasette protegida.
- Prototipos rápidos de interfaces de datos que requieren acceso a la base relacional pero donde la seguridad y privacidad son prioridad.
Organizaciones en Latinoamérica que manejan datos sensibles (p. ej. salud, finanzas, gobierno) pueden beneficiarse de este patrón: equipos de datos o desarrollo publican interfaces ricas sin comprometer credenciales ni abrir rutas de exfiltración.
Experiencia práctica y demo
Existe un demo público donde pueden explorarse ejemplos (incluye una línea de tiempo personalizada). Para probar las apps se puede iniciar sesión con GitHub en la instancia demo agent.datasette.io, lo que facilita ver cómo funcionan las restricciones, ver logs y ajustar consultas.
Consideraciones finales y próximos pasos
Datasette Apps introduce una forma pragmática de combinar un backend relacional persistente con frontends HTML autocontenidos y seguros. Para equipos en América Latina que buscan mantener control estricto sobre sus datos mientras entregan experiencias personalizadas, este enfoque ofrece un balance interesante entre flexibilidad y seguridad.
Si su organización evalúa integrar este tipo de capacidades, vale la pena planificar: definir qué operaciones deben permitirse, establecer políticas de CSP y allow-lists, y diseñar consultas almacenadas para las acciones de escritura. Con esos elementos en su lugar, Datasette Apps puede acelerar prototipos y despliegues internos sin comprometer el riesgo.
Fuente original: Simon Willison