首页/DevOps/lightpanda-browser
L

lightpanda-browser

by @aradotsov1.0.0
4.4(13)

用 Zig 编写的高性能无头浏览器,专为 AI Agent 和爬虫设计,内存占用仅为 Chrome 的 1/9

browser-automationheadless-browserweb-scrapingperformancezigGitHub
安装方式
npx skills add aradotso/trending-skills --skill lightpanda-browser
compare_arrows

Before / After 效果对比

1
使用前

使用 Chrome Headless 进行大规模爬取,内存占用高导致服务器崩溃,并发能力受限

使用后

Lightpanda 内存占用降低 89%,速度提升 11 倍,支持更高并发和更低的运营成本

description SKILL.md

lightpanda-browser

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(content)}")

        await browser.close()

asyncio.run(main())

Web Scraping Patterns

Batch Page Fetching

import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
const context = await browser.newContext();

const urls = [
  'https://example.com/page1',
  'https://example.com/page2',
  'https://example.com/page3',
];

for (const url of urls) {
  const page = await context.newPage();
  await page.goto(url, { waitUntil: 'networkidle' });

  const data = await page.evaluate(() => ({
    title: document.title,
    text: document.body.innerText,
    links: [...document.querySelectorAll('a[href]')].map(a => a.href),
  }));

  console.log(JSON.stringify(data, null, 2));
  await page.close();
}

await browser.close();

Extract Structured Data

const data = await page.evaluate(() => {
  const items = document.querySelectorAll('.product-card');
  return [...items].map(item => ({
    name: item.querySelector('h2')?.textContent?.trim(),
    price: item.querySelector('.price')?.textContent?.trim(),
    link: item.querySelector('a')?.href,
  }));
});

Docker Compose (with your app)

services:
  lightpanda:
    image: lightpanda/browser:nightly
    ports:
      - "9222:9222"
    restart: unless-stopped

  scraper:
    build: .
    depends_on:
      - lightpanda
    environment:
      - BROWSER_WS_ENDPOINT=ws://lightpanda:9222

Supported Web APIs

Lightpanda supports (partial, expanding):

  • DOM tree manipulation and querying

  • JavaScript execution (V8)

  • XMLHttpRequest (XHR)

  • Fetch API

  • Cookie management

  • Network interception

  • Proxy support

Configuration

Environment Variable Description

LIGHTPANDA_DISABLE_TELEMETRY Set to true to opt out of usage metrics

Performance Comparison

Metric Lightpanda Chrome Headless

Memory ~9x less Baseline

Speed ~11x faster Baseline

Binary size Small (Zig) Large (Chromium)

Rendering No visual rendering Full rendering engine

When to Use Lightpanda

Use Lightpanda when:

  • Running AI agents that need to browse the web

  • Batch scraping at scale (memory/CPU savings matter)

  • Automating form submissions and data extraction

  • Running in containers where resources are limited

  • You need CDP compatibility but not full visual rendering

Use Chrome/Playwright instead when:

  • You need pixel-perfect screenshots or PDF generation

  • You need full Web API coverage (Lightpanda is still partial)

  • Visual regression testing

  • Testing browser-specific rendering behavior

Building from Source

Requires: Zig 0.15.2, Rust, CMake, system dependencies.

# Ubuntu/Debian dependencies
sudo apt install xz-utils ca-certificates pkg-config libglib2.0-dev clang make curl

# Build
git clone https://github.com/lightpanda-io/browser.git
cd browser
zig build

# Optional: pre-build V8 snapshot for faster startup
zig build snapshot_creator -- src/snapshot.bin
zig build -Dsnapshot_path=../../snapshot.bin

Troubleshooting

Connection refused on port 9222:

  • Ensure ./lightpanda serve is running

  • Check --host 0.0.0.0 if connecting from Docker/remote

Playwright script breaks after update:

  • Lightpanda is beta — Playwright's capability detection may behave differently across versions

  • Pin your Lightpanda version or use nightly consistently

Missing Web API support:

Links

Weekly Installs280Repositoryaradotso/trending-skillsGitHub Stars3First Seen6 days agoSecurity AuditsGen Agent Trust HubFailSocketPassSnykFailInstalled onopencode276gemini-cli276github-copilot276amp276cline276codex276

forum用户评价 (0)

发表评价

效果
易用性
文档
兼容性

暂无评价,来写第一条吧

统计数据

安装量434
评分4.4 / 5.0
版本1.0.0
更新日期2026年3月22日
对比案例1 组

用户评分

4.4(13)
5
0%
4
0%
3
0%
2
0%
1
0%

为此 Skill 评分

0.0

兼容平台

🔧Claude Code

时间线

创建2026年3月22日
最后更新2026年3月22日