Qué es Obscura, el navegador headless en Rust para agentes de IA
Índice de contenidos
- Puntos clave
- Qué es Obscura y qué problema resuelve
- Cómo funciona por dentro
- Qué pasó cuando lo ejecuté en mi propia máquina
- Cómo se compara con Chrome headless y con Lightpanda
- Qué no hace bien todavía
- Cuándo compensa y cuándo no
- Preguntas frecuentes
- ¿Obscura sustituye a Playwright o a Puppeteer?
- ¿Puedo usar Obscura en un producto comercial cerrado?
- ¿Sirve Obscura para hacer capturas de pantalla fiables?
- Conclusión
- Fuentes
Obscura es un motor de navegador headless escrito en Rust y publicado bajo licencia Apache-2.0. Ejecuta JavaScript sobre V8, habla el protocolo Chrome DevTools y sustituye a Chrome headless en Playwright o Puppeteer sin tocar el código. Su ventaja medida es la memoria: unos 38 MB por sesión frente a los 532 MB de Chromium.
Obscura apareció en GitHub en abril de 2026 y en cinco meses ha reunido 24.624 estrellas. El equipo de ingeniería de Cloudflare lo cita como el punto de partida de su propio navegador para agentes, y el proyecto ya anuncia una versión gestionada. Aquí explico qué hace exactamente, qué números salieron cuando lo ejecuté en mi propia máquina y en qué casos sustituye de verdad a Chrome headless.
Puntos clave
- Obscura es un motor de navegador headless escrito en Rust, con licencia Apache-2.0, que ejecuta JavaScript sobre V8 y habla el protocolo Chrome DevTools.
- Playwright y Puppeteer se conectan sin cambiar una línea: basta con apuntar
connectOverCDPal puerto que abreobscura serve. - Su ventaja reproducible es la memoria. En mis pruebas consumió unos 38 MB por sesión frente a los 532 MB de Chromium headless sobre la misma página.
- La ventaja de velocidad depende de la página: clara en HTML estático, inexistente en una web real donde manda la latencia de red.
- Desde la versión 0.2.0 (agosto de 2026) renderiza y captura sin Chromium, pero todavía no iguala a Chromium, y lo noté en la primera página que le pasé.
Qué es Obscura y qué problema resuelve
Obscura es un motor de navegador sin interfaz gráfica escrito desde cero en Rust. No es un fork de Chromium ni un parche sobre WebKit: incorpora V8 para ejecutar el JavaScript de la página, construye su propio DOM y expone el Chrome DevTools Protocol para que las herramientas de automatización existentes lo traten como si fuera Chrome. La documentación oficial lo define así: "Obscura is an open-source headless browser engine written in Rust. It runs JavaScript via V8, speaks the Chrome DevTools Protocol, and works as a drop-in replacement for headless Chrome with Puppeteer and Playwright"[1].
El problema que ataca es de coste, no de capacidad. Chrome headless funciona perfectamente para automatizar una página, pero fue diseñado para una persona mirando una pestaña. Cuando un enjambre de agentes abre miles de sesiones simultáneas, cada proceso arrastra un compositor, una pila de renderizado y decenas de subsistemas que ningún agente llega a usar. Eso se paga en gigabytes de memoria y en segundos de arranque. El planteamiento de Obscura es quedarse con la parte que sí importa para leer datos: ejecutar el JavaScript, montar el DOM y devolverlo.
La conexión con Cloudflare es la mejor señal de que la idea funciona. En el anuncio de Kitesurf, su navegador para agentes sobre Workers, el equipo escribe: "We got the initial inspiration from obscura, a headless engine written in Rust for AI automation that has ‘no Chrome, no Node.js, no dependencies’"[2]. Cloudflare portó Obscura a Workers como primera prueba de concepto en mayo de 2026 y a partir de ahí construyó su producto. Kitesurf sigue siendo un servicio de Cloudflare en beta gratuita; Obscura es el motor que puedes descargar hoy.
Cómo funciona por dentro
El binario reúne tres piezas. La primera es V8, el mismo motor de JavaScript que usa Chrome, embebido directamente en el proceso de Rust. La segunda es una implementación propia del DOM y de las API web que necesita una página moderna: fetch, XHR, observadores, Shadow DOM, elementos personalizados, WebCrypto y compañía. La tercera es el servidor CDP, que traduce las llamadas de Puppeteer o Playwright a operaciones sobre ese DOM.
Desde la versión 0.2.0, publicada el 8 de agosto de 2026 con 449 commits acumulados, hay una cuarta pieza: un motor de layout y pintado escrito también en Rust, que permite capturas de pantalla, screencast y exportación a PDF sin arrancar Chromium. La versión 0.2.1, del 23 de agosto, añadió realms de V8 propios para los iframes hijos.
Instalarlo no requiere Node.js ni Chrome. El proyecto publica binarios para Linux, macOS y Windows, en variantes con y sin renderizado y con y sin modo sigiloso, además de una imagen oficial en Docker Hub[3] que acumula 45.789 descargas.
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-linux.tar.gz
tar xzf obscura-aarch64-linux.tar.gz
./obscura fetch https://example.com --eval "document.title"
./obscura fetch https://example.com --dump markdown
./obscura serve --port 9222 --stealth
El modo sigiloso es una variante de compilación aparte. Según el README del proyecto, aleatoriza la huella de GPU, pantalla, canvas, audio y batería en cada sesión, deja navigator.webdriver sin definir y bloquea 3.520 dominios de rastreo. Son cifras del propio proyecto, no de un tercero.
También trae un servidor de Model Context Protocol integrado, con catorce herramientas de navegación que un asistente puede llamar directamente. Si vienes de montar tus propios servidores, en la guía completa de MCP está el contexto de ese protocolo.
Qué pasó cuando lo ejecuté en mi propia máquina
Descargué la variante aarch64-linux de la v0.2.1 y la ejecuté en un contenedor Linux ARM64 el 4 de septiembre de 2026, midiendo tiempo de pared y memoria residente máxima del árbol de procesos. Enfrente puse Chromium headless conducido por Playwright, sobre las mismas URL y la misma red. Tres pasadas por combinación.
| Página | Obscura v0.2.1 | Chromium headless |
|---|---|---|
| example.com | 92 ms, 13 MB | 237 ms, 510 MB |
| news.ycombinator.com | 1.550 ms, 38 MB | 1.430 ms, 532 MB |
La lectura honesta de esos números tiene dos mitades. La ventaja de memoria es enorme y se sostiene: unas trece veces menos en la página real. La ventaja de velocidad se evapora en cuanto la página deja de ser un archivo estático de 500 bytes. En Hacker News, Chromium fue incluso algo más rápido, porque lo que domina la mediana no es el motor sino la red. Bajar --wait a cero no cambió el resultado.
El propio repositorio de benchmarks del proyecto llega a la misma conclusión con más datos: sobre un corpus de 98 páginas públicas reales, Obscura renderizó 94 y Chrome headless 85, con 64,2 MB de memoria mediana frente a 201,2 MB, pero con una latencia mediana de 5,2 segundos frente a los 2,1 segundos de Chrome. Ese es el reparto real de las cartas.
La compatibilidad con Playwright resultó ser literal. Levanté obscura serve --port 9333 y conecté con chromium.connectOverCDP('ws://127.0.0.1:9333') sin tocar nada más: navegación, page.title() y page.evaluate() respondieron en 100 milisegundos.
Después probé el renderizado nuevo sobre la portada de un WordPress con Tailwind. La captura tardó 587 milisegundos y salió un PNG válido, pero con diferencias claras frente a Chromium.

La diferencia más concreta: el tema declara los rótulos de la barra de navegación como pseudoelementos ::after con content: attr(data-tooltip) y opacity: 0, visibles solo al pasar el ratón. Obscura pintó el pseudoelemento pero ignoró la opacidad, así que la cabecera salió llena de etiquetas superpuestas. También apareció desplegado el panel de búsqueda y faltó el aviso de cookies. Es exactamente el tipo de fallo que el proyecto declara en sus notas de versión, encontrado en la primera página que le pasé.
Cómo se compara con Chrome headless y con Lightpanda
Hay cuatro familias de soluciones y conviene no mezclarlas, porque resuelven cosas distintas. Datos de GitHub del 4 de septiembre de 2026.
| Opción | Motor | Licencia | Estrellas | Qué resuelve |
|---|---|---|---|---|
| Obscura | Propio, en Rust | Apache-2.0 | 24.624 | Coste de memoria por sesión |
| Lightpanda[4] | Propio, en Zig | AGPL-3.0 | 34.414 | Lo mismo, con más recorrido |
| Chrome headless con Playwright | Chromium | Apache-2.0 | 95.604 | Fidelidad total de renderizado |
| Steel Browser o Browserless | Chromium envuelto | Apache-2.0 o propia | 7.591 y 13.658 | Operar la infraestructura |
Lightpanda es el rival directo: mismo planteamiento de motor nuevo, escrito en Zig, con dos años más de vida y más estrellas. La diferencia que decide en muchos equipos no es técnica sino legal. Lightpanda usa AGPL-3.0, que se contagia a cualquier servicio que lo exponga por red. Obscura usa Apache-2.0, que no. Si vas a integrarlo en un producto cerrado, esa línea del LICENSE pesa más que cualquier benchmark.
Steel Browser y Browserless no compiten con Obscura: envuelven Chromium con colas, sesiones y una API. Resuelven la operación, no el coste por sesión. Browserless además no es software libre, es gratuito solo para uso no comercial.
Y luego está el ecosistema de agentes que ya usa navegador. Si lo que buscas es un agente que navegue por ti, Browser Use o Computer Use en producción atacan la capa de arriba; si lo que quieres son datos limpios de la web, Firecrawl hace la extracción por ti. Obscura vive por debajo de todos ellos, como sustituto del motor.
Qué no hace bien todavía
El renderizado tiene menos de un mes de vida y no alcanza la paridad con Chromium. Las propias notas de la v0.2.0 lo dicen sin adornos: el CSS de cola larga, algunas API web, la reproducción de medios y los efectos del compositor de GPU pueden diferir. Mi prueba lo confirmó a la primera. El PDF además es ráster, así que el texto no se puede seleccionar.
La conformidad tampoco es total. El repositorio de benchmarks publica un 83,3 % de subtests superados en el nivel Core del Web Platform Test (318.916 de 382.891) y un 60,0 % en el conjunto completo. Ese 60 % no es un defecto oculto, es la consecuencia de no implementar capas enteras de la plataforma a propósito, y el proyecto lo documenta.
Las cifras del README envejecen rápido. Anuncia un binario de 70 MB, pero el que descargué para ARM64 con renderizado ocupa 100 MB descomprimido, más otros 92 MB del proceso trabajador. La imagen de Docker pasó de 53,2 MB en la 0.1.11 a 87,1 MB en la 0.2.1. Nada de esto es grave, pero conviene medir en tu plataforma antes de citar la tabla.
El proyecto es joven y está muy concentrado. Nació el 13 de abril de 2026 y, de los veinte contribuyentes que lista la API de GitHub, uno solo acumula 733 commits. El modo sigiloso reduce las señales de automatización, pero no evita bloqueos por reputación de dirección IP ni por patrón de comportamiento. Y Obscura Cloud, la versión gestionada, todavía es una lista de espera, no un producto que puedas contratar.
Cuándo compensa y cuándo no
Compensa cuando tu factura es de memoria. Si tienes cientos o miles de sesiones concurrentes extrayendo datos, pasar de 500 MB a 38 MB por sesión cambia el dimensionado de las máquinas de forma que ninguna optimización de código iguala. También compensa cuando quieres empaquetar un navegador dentro de una imagen pequeña, sin Node.js ni Chrome, o cuando necesitas sesiones limpias de verdad y reproducibles.
No compensa si tu carga es de decenas de páginas y ya funciona. La ganancia de latencia por página real es nula o negativa, y estarías cambiando un motor maduro por otro de cinco meses. Tampoco compensa si dependes de la fidelidad visual: pruebas de regresión visual, capturas para el cliente o cualquier cosa donde el píxel importe siguen siendo territorio de Chromium. Y si tu problema es que te bloquean, el motor no es la palanca; lo son los proxies y el ritmo de las peticiones.
Mi recomendación práctica: móntalo en paralelo. Ejecuta obscura serve junto a tu Chrome headless actual, apunta un porcentaje del tráfico con connectOverCDP y compara resultados sobre tus propias páginas objetivo durante una semana. La migración cuesta una variable de entorno, así que el experimento es barato. Si tienes curiosidad por el lenguaje que hay debajo, en Rust para backend con Axum y Tokio está el contexto de por qué esta clase de proyectos se escriben así.
Preguntas frecuentes
¿Obscura sustituye a Playwright o a Puppeteer?
No, los complementa. Playwright y Puppeteer son las bibliotecas con las que escribes el guion de automatización; Obscura es el navegador contra el que ese guion se ejecuta. Sigues escribiendo el mismo código de Playwright y solo cambias el destino de la conexión, de un Chromium lanzado por la biblioteca a un obscura serve que escucha por CDP.
¿Puedo usar Obscura en un producto comercial cerrado?
Sí. La licencia es Apache-2.0, que permite el uso comercial y la integración en software propietario sin obligación de publicar tu código. Es la diferencia práctica más relevante frente a Lightpanda, que usa AGPL-3.0 y exige liberar el código de cualquier servicio en red que lo incorpore.
¿Sirve Obscura para hacer capturas de pantalla fiables?
Solo con cautela. Desde la v0.2.0 hace capturas, screencast y PDF sin Chromium, y funcionan. Pero el motor de pintado es nuevo y el propio proyecto avisa de que no iguala a Chromium. En mi prueba ignoró una regla de opacidad sobre un pseudoelemento y la cabecera salió mal. Para pruebas de regresión visual sigue usando Chromium.
Conclusión
Obscura resuelve un problema concreto y lo resuelve bien: el coste de memoria de tener un navegador por agente. Trece veces menos RAM por sesión es una cifra que cambia decisiones de arquitectura, y la compatibilidad con CDP hace que probarlo cueste casi nada. Lo que no debes esperar es la mejora de velocidad que anuncia la portada, porque en páginas reales no aparece, ni una fidelidad de renderizado equivalente a Chromium, porque el propio proyecto avisa de que aún no la tiene.
Que Cloudflare partiera de este código para construir Kitesurf dice bastante de la calidad de la idea. Cinco meses de vida dicen bastante del riesgo. Mídelo con tus páginas antes de mover nada.
Fuentes: [1] Obscura, repositorio oficial en GitHub[5], [2] Obscura, notas de las versiones publicadas[6], [3] obscura-benchmark, conformidad y rendimiento medidos[7], [4] Documentación oficial de Obscura[1], [5] Cloudflare, presentación de Kitesurf[2], [6] Imagen oficial de Obscura en Docker Hub[3], [7] Sitio oficial de Obscura[8], [8] wpt.fyi, resultados del Web Platform Test por motor[9].
Versión en inglés: Obscura, the Rust headless browser for AI agents.
Fuentes
- "Obscura is an open-source headless browser engine written in Rust. It runs JavaScript via V8, speaks the Chrome DevTools Protocol, and works as a drop-in replacement for headless Chrome with Puppeteer and Playwright"
- "We got the initial inspiration from obscura, a headless engine written in Rust for AI automation that has ‘no Chrome, no Node.js, no dependencies’"
- imagen oficial en Docker Hub
- Lightpanda
- Obscura, repositorio oficial en GitHub
- Obscura, notas de las versiones publicadas
- obscura-benchmark, conformidad y rendimiento medidos
- Sitio oficial de Obscura
- wpt.fyi, resultados del Web Platform Test por motor
Código fuente
Accede a todo el código fuente de este artículo en GitHub.
Ver en GitHub