lightpanda-browser

aradotso/trending-skills · updated Apr 8, 2026

$npx skills add https://github.com/aradotso/trending-skills --skill lightpanda-browser
0 commentsdiscussion
summary

Skill by ara.so — Daily 2026 Skills collection

skill.md

Lightpanda — Headless Browser for AI & Automation

Skill by ara.so — Daily 2026 Skills collection

Lightpanda is a headless browser built from scratch in Zig, designed for AI agents, web scraping, and automation. It uses 9x less memory and runs 11x faster than Chrome headless.

Key facts:

  • Not based on Chromium, Blink, or WebKit — clean-slate Zig implementation
  • JavaScript execution via V8 engine
  • CDP (Chrome DevTools Protocol) compatible — works with Playwright, Puppeteer, chromedp
  • Respects robots.txt via --obey_robots flag
  • Beta status, actively developed
  • License: AGPL-3.0

Installation

macOS (Apple Silicon)

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos
chmod a+x ./lightpanda

Linux (x86_64)

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux
chmod a+x ./lightpanda

Docker

# Supports amd64 and arm64
docker run -d --name lightpanda -p 9222:9222 lightpanda/browser:nightly

CLI Usage

Fetch a URL (dump rendered HTML)

./lightpanda fetch --obey_robots --log_format pretty --log_level info https://example.com

Start CDP Server

./lightpanda serve --obey_robots --log_format pretty --log_level info --host 127.0.0.1 --port 9222

This launches a WebSocket-based CDP server for programmatic control.

CLI Flags

Flag Description
--obey_robots Respect robots.txt rules
--log_format pretty Human-readable log output
--log_level info Log verbosity: debug, info, warn, error
--host 127.0.0.1 Bind address for CDP server
--port 9222 Port for CDP server
--insecure_disable_tls_host_verification Disable TLS verification (testing only)

Playwright Integration

Start the CDP server, then connect Playwright to it:

import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
const context = await browser.contexts()[0] || await browser.newContext();
const page = await context.newPage();

await page.goto('https://example.com', { waitUntil: 'networkidle' });
const title = await page.title();
const content = await page.content();

console.log(`Title: ${title}`);
console.log(`HTML length: ${content.length}`);

await browser.close();

Puppeteer Integration

import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: 'ws://127.0.0.1:9222',
});

const context = await browser.createBrowserContext();
const page = await context.newPage();

await page.goto('https://example.com', { waitUntil: 'networkidle0' });

const title = await page.title();
const text = await page.evaluate(() => document.body.innerText);

console.log(`Title: ${title}`);
console.log(`Body text: ${text.substring(0, 200)}`);

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

Go (chromedp) Integration

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/chromedp/chromedp"
)

func main() {
    allocCtx, cancel := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222")
    defer cancel()

    ctx, cancel := chromedp.NewContext(allocCtx)
    defer cancel()

    var title string
    err := chromedp.Run(ctx,
        chromedp.Navigate("https://example.com"),
        chromedp.Title(&title),
    )
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Title:", title)
}

Python Integration

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.connect_over_cdp("http://127.0.0.1:9222")
        context = browser.contexts[0] if browser.contexts else await browser.new_context()
        page = await context.new_page()

        await page.goto("https://example.com", wait_until="networkidle")
        title = await page.title()
        content = await page.content()

        print(f"Title: {title}")
        print(f"HTML length: {len

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.533 reviews
  • Dhruvi Jain· Dec 28, 2024

    Useful defaults in lightpanda-browser — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Sofia Robinson· Dec 28, 2024

    lightpanda-browser reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • William Harris· Dec 12, 2024

    lightpanda-browser has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Ava Mehta· Dec 8, 2024

    Registry listing for lightpanda-browser matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Oshnikdeep· Nov 19, 2024

    lightpanda-browser is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • William Khan· Nov 3, 2024

    lightpanda-browser fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Amelia Ghosh· Oct 22, 2024

    We added lightpanda-browser from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Ganesh Mohane· Oct 10, 2024

    Keeps context tight: lightpanda-browser is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Rahul Santra· Sep 25, 2024

    Registry listing for lightpanda-browser matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Jin Ramirez· Sep 25, 2024

    I recommend lightpanda-browser for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

showing 1-10 of 33

1 / 4