Lightpanda 1.0 vs Chrome headless: lo medimos con Playwright y la memoria bajó de 473 MB a 29 MB

Lightpanda 1.0, el navegador headless escrito en Zig, salió de beta el 2 de octubre: en nuestra prueba con Playwright usó entre 12 y 16 veces menos memoria que Chrome headless, pero fue solo entre 1,3 y 3 veces más rápido, no 9, y se rompieron tres cosas que el anuncio no menciona.

Instalamos el binario 1.0.0, servimos un conjunto de páginas de prueba en local y ejecutamos el mismo script de Playwright contra Lightpanda, contra el headless shell de Chromium y contra Chrome completo en modo headless. A continuación: qué es Lightpanda, cómo se instala, los números que obtuvimos y la lista de cosas que debes revisar antes de ponerlo detrás de una suite de tests o de un pipeline de scraping.

¿Qué es Lightpanda?

Lightpanda es un navegador headless (headless browser) construido desde cero en Zig. Ejecuta JavaScript con V8 (la versión 15.5 en la 1.0, el mismo motor de Chrome y Node.js), pero no tiene renderizado gráfico: no calcula layout ni pinta la página. De esa decisión de diseño salen sus ventajas de memoria y de arranque, y también sus límites.

Habla el Chrome DevTools Protocol (CDP), así que Puppeteer, Playwright y chromedp se conectan a él igual que a Chrome. También expone un endpoint WebDriver para Selenium, un servidor MCP nativo para agentes de IA y una CLI que vuelca una página como HTML, markdown o árbol semántico.

El equipo, liderado por su cofundador y CEO Francis Bouvier, lo construyó después de años manteniendo una flota de instancias de Chrome headless que rastreaba más de 20 millones de páginas al día.

Si leíste nuestra nota sobre la beta, Lightpanda: El Headless Browser Hecho para Agentes de IA, esta es la continuación: la misma herramienta, ahora estable y, esta vez, medida.

¿Qué cambió en Lightpanda 1.0?

Según el anuncio, había dos condiciones para quitar la etiqueta de beta:

  • Cobertura de la plataforma web. Lightpanda pasa 1.739.845 subtests de los Web Platform Tests, frente a 2.645 en la beta de noviembre de 2024. Chrome pasa 2.184.491 en wpt.fyi, así que Lightpanda queda en torno al 80 por ciento de la cifra de Chrome. Según el equipo, más de la mitad de la diferencia está en las suites de CSS, edición y SVG: los tests de layout y pintado que no persigue a propósito.
  • Seguridad. CORS se aplica ahora por defecto en cada fetch() y XMLHttpRequest que hace una página. Esto importa en un navegador que carga páginas que nadie revisó dentro de tu red en la nube: sin CORS, una página maliciosa podría llamar a un servicio interno y leer la respuesta. Versiones 0.x anteriores ya habían añadido --block-private-networks y --block-cidrs para mantener el navegador lejos de subredes privadas y de los endpoints de metadatos de la nube, y la carga opcional de iframes, workers y hojas de estilo externas con --load-resources.

Las notas de la versión 1.0.0 en GitHub listan tres cambios de comportamiento que conviene revisar si usabas una 0.x: los resultados de getComputedStyle ahora son de solo lectura, desapareció el fallback de idioma "en" (ahora se define con --locale) y se eliminó el antiguo flag --experimental-features cors. Si CORS te rompe algo, la salida temporal es --disable-features cors.

¿Cómo instalar Lightpanda?

En Linux o macOS, fija la versión de forma explícita:

curl -fsSL https://pkg.lightpanda.io/install.sh | bash -s "1.0.0"

Fíjala siempre: sin el argumento de versión, el instalador descarga la última compilación nightly, no la versión estable.

El instalador necesita curl, jq y sha256sum, y deja el binario en ~/.local/bin/lightpanda. Si ese directorio no está en tu PATH:

export PATH="$HOME/.local/bin:$PATH"

Lightpanda envía telemetría de uso por defecto. Para desactivarla:

export LIGHTPANDA_DISABLE_TELEMETRY=true

Comprueba que funciona:

lightpanda version
# 1.0.0

¿Y pip install lightpanda o npm install @lightpanda/browser?

Los dos existen, pero ninguno es “el navegador en la versión X”. Son paquetes separados, con su propia numeración y su propia licencia. Al 13 de octubre de 2026, el paquete de npm @lightpanda/browser va por la 1.6.0 y el paquete de PyPI lightpanda por la 1.0.0.post1, ambos con licencia Apache-2.0. El navegador es la 1.0.0 y tiene licencia AGPL-3.0. Si ves “Lightpanda 1.6.0” en algún sitio, se refiere al driver de npm, no al navegador.

¿Lightpanda funciona en Windows?

No de forma nativa. En Windows funciona dentro de WSL2: instala WSL y una distribución Ubuntu, y después instala Lightpanda dentro de WSL exactamente igual que en Linux.

¿Lightpanda reemplaza a Playwright?

No: reemplaza al navegador que está detrás de Playwright. Tu código de Playwright (o de Puppeteer, o de Selenium) sigue siendo el mismo; lo que cambia es que, en lugar de lanzar Chromium, te conectas a Lightpanda por CDP.

Cómo conectar Playwright headless a Lightpanda

Arranca Lightpanda como servidor CDP:

lightpanda serve --host 127.0.0.1 --port 9222

Después, en lugar de chromium.launch(), conéctate por CDP. Este es el patrón de la documentación oficial:

import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
const context = await browser.newContext({});
const page = await context.newPage();

await page.goto('https://wikipedia.com/');
console.log(await page.locator('h1').textContent());

await page.close();
await context.close();
await browser.close();

Puppeteer funciona igual con puppeteer.connect({ browserWSEndpoint }).

¿Se puede usar Lightpanda para web scraping con Python?

Sí. Con Playwright para Python te conectas exactamente igual, con connect_over_cdp. Este es el ejemplo de la documentación oficial:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp("ws://127.0.0.1:9222")
    context = browser.new_context()
    page = context.new_page()

    page.goto("https://wikipedia.com/")

    title = page.title()
    print(title)

    page.close()
    context.close()
    browser.close()

Existe también un SDK propio en PyPI (pip install lightpanda), que no probamos en esta nota.

¿Cuánta memoria ahorra Lightpanda frente a Chrome headless?

Nuestro entorno: una VM Linux con 2 vCPU y 8 GB; Lightpanda 1.0.0; Chromium 141 en dos variantes (el headless shell que distribuye Playwright, más liviano, y Chrome completo con --headless=new); Playwright 1.56 conectado a los tres por CDP con el mismo código. La página de prueba es una pequeña SPA que renderiza una lista de 50 productos a partir de dos llamadas fetch() (la misma forma que el benchmark de página única del propio fabricante), servida en local para que la latencia de red no distorsione el resultado. Medimos la memoria como PSS de todo el árbol de procesos del navegador, con muestras cada 100 ms. Cada prueba se repitió tres veces; los rangos cubren las tres.

Lightpanda 1.0 Chromium headless shell Chrome --headless=new
Arranque hasta que responde CDP 24–39 ms 82–94 ms 254–285 ms
100 cargas secuenciales 5,5–5,8 s 7,4–7,8 s 8,6–9,4 s
Memoria pico, secuencial 29 MB 340 MB 473 MB
200 cargas, 10 workers en paralelo 6,2 s 10,6–12,9 s 19,3–19,9 s
Memoria pico, 10 workers 75–78 MB ~650 MB ~910 MB

Qué significa:

  • Memoria: la promesa se cumple. 12 veces menos que el headless shell y 16 veces menos que Chrome completo en la prueba secuencial; entre 8 y 12 veces menos con 10 workers. Es la cifra que cambia cuántos navegadores caben en una misma máquina.
  • Velocidad: real, pero mucho menor de lo que se anuncia. Entre 1,3 y 1,7 veces más rápido en secuencial, y entre 1,7 y 3,2 veces con 10 workers. Donde más se nota es en el arranque: entre 2,5 y 3 veces más rápido que el headless shell y entre 7 y 12 veces más rápido que Chrome completo, algo que pesa si levantas un navegador nuevo por cada tarea.

Las cifras que verás citadas (“9 veces más rápido y 16 veces menos memoria” en la documentación de Hermes Agent; “4 veces más rápido y 6 veces más eficiente en costo que Chromium”, de Keenable, cliente; “4 veces más rápido y carga media 10 veces menor”, de DeveloperHub.io, cliente) son números del fabricante o de sus clientes, no benchmarks independientes. La página de benchmarks de Lightpanda usa una instancia AWS m5.xlarge y maneja Chrome 143 con Puppeteer y chromedp. Nuestra hipótesis sobre por qué nuestra diferencia de velocidad es menor: Playwright añade su propio costo por cada navegación, igual para ambos navegadores, y eso comprime la proporción. Si usas CDP directo, es probable que la diferencia sea mayor; a través de Playwright, espera algo más cercano a lo nuestro.

¿Qué se rompe al cambiar Chrome por Lightpanda?

Ejecutamos un script de compatibilidad con 14 comprobaciones contra los tres motores. Lightpanda se comportó igual que Chrome en páginas estáticas, en el renderizado de una SPA con fetch(), en formularios (fill, selectOption, check, click), en locators dentro de Shadow DOM, en evaluate, en isVisible, en manejadores de clic y en CORS: las peticiones entre orígenes permitidas pasaron y las no permitidas se bloquearon, exactamente igual que en Chrome. Cuatro cosas no:

1. Solo un browser context por conexión

Un segundo browser.newContext() falla:

Protocol error (Target.createBrowserContext): Cannot have more than one browser context at a time

Muchas suites de Playwright aíslan cada test en su propio contexto. Ese patrón no funciona contra una única conexión a Lightpanda. La solución es abrir una conexión CDP por worker, cada una con su contexto, que es como ejecutamos la prueba de 10 workers. El comando serve acepta hasta 16 conexiones CDP simultáneas por defecto, ajustable con --cdp-max-connections. Ten en cuenta que no es la misma configuración que usamos con Chrome, donde corrimos 10 contextos dentro de un solo navegador: es la configuración natural de cada motor.

2. boundingBox() devuelve números incorrectos en lugar de un error

Para un div con width: 300px; height: 120px; padding: 10px, Chrome devuelve {x: 8, y: 8, width: 320, height: 140}, la caja real. Lightpanda devuelve {x: 0, y: 25, width: 300, height: 120}. Como no hay motor de layout, la respuesta es aproximada, pero no falla. Cualquier test que verifique posiciones o tamaños pasará o fallará sobre números creíbles que no son reales. Trata todo lo geométrico como no soportado.

3. Las capturas y los PDF funcionan, pero no muestran la página

page.screenshot() y page.pdf() devuelven un PNG y un PDF válidos. Según las propias FAQ de Lightpanda, lo que renderizan es el markdown de la página, no su aspecto real. Los tests de regresión visual no van a fallar: van a comparar en silencio otra cosa. (Hermes Agent resuelve esto volviendo a Chrome automáticamente para las capturas).

4. En un sitio real, el evento load puede no llegar nunca

En la página de issues de GitHub, page.goto() con el valor por defecto de Playwright, waitUntil: 'load', agotó los 30 segundos de espera en Lightpanda, mientras que el headless shell la cargó. Con waitUntil: 'domcontentloaded', las dos páginas de GitHub que probamos cargaron en Lightpanda y devolvieron el mismo número de enlaces que Chrome (247 y 129). Si migras, cambia a domcontentloaded y añade waitForSelector explícitos para el contenido que necesitas. Una salvedad: nuestro entorno solo llega a una lista corta de sitios públicos, a través de un proxy, así que GitHub fue el único sitio real que pudimos comprobar. No saques conclusiones de tiempos a partir de esa prueba.

Si una página se rompe, el equipo pide abrir un issue con la URL. DeveloperHub.io abrió dos antes de pasar a producción, y los dos se corrigieron antes del cambio.

¿Lightpanda es gratis? Qué implica la licencia AGPL

El navegador es libre y de código abierto bajo AGPL-3.0, que permite el uso comercial. La cláusula que hay que entender es la de red: si modificas Lightpanda y permites que usuarios interactúen con esa versión modificada a través de una red, debes ofrecerles el código fuente de tu versión modificada. Ejecutar el binario sin modificar detrás de tu propio scraper o de tu suite de tests es una situación distinta a ofrecer un fork modificado como servicio. Si tu plan se parece a lo segundo, consúltalo con quien lleve el tema de licencias en tu empresa antes de construir encima: esto no es asesoría legal.

Los paquetes cliente (@lightpanda/browser en npm y lightpanda en PyPI) tienen licencia Apache-2.0. También existe Lightpanda Cloud, un servicio alojado al que te conectas con la misma llamada connectOverCDP y un token; no lo probamos.

¿Lightpanda o Chrome headless?

Usa Lightpanda si:

  • extraes datos o texto de páginas renderizadas con JavaScript a volumen;
  • la memoria por navegador es lo que limita cuántas tareas caben en una máquina;
  • levantas un navegador por tarea y el tiempo de arranque se acumula;
  • le das un navegador a un agente de IA y quieres CORS y el bloqueo de redes privadas activados por defecto.

Quédate con Chrome si:

  • tus tests verifican layout, posiciones, tamaños o cualquier aspecto visual;
  • necesitas capturas o PDF de cómo se ve realmente la página;
  • tu suite depende de varios browser contexts por conexión y no puedes reestructurarla;
  • los sitios que te interesan se rompen en Lightpanda y no puedes esperar una corrección.

La migración práctica no es todo o nada: ejecuta las tareas de extracción en Lightpanda y mantén un pool de Chrome para el trabajo visual, que es justo lo que Hermes Agent hace de forma automática.


¿Y tú? ¿Qué es lo que más memoria consume hoy en tu stack de automatización: Chrome, el runner de tests o algo más?

¿Qué navegador headless usas para automatización o scraping?
  • Chrome / Chromium headless
  • Lightpanda
  • Firefox o WebKit con Playwright
  • Prefiero otra opción (cuéntanos cuál)
0 votantes

Comenta abajo o, si este artículo te llegó por correo, responde directamente al email: tu respuesta se publica aquí.

Relacionado: Cómo darle un navegador a tu agente de IA sin cargar Chromium