开源项目

browser

browser

用 Zig 从零构建的无头浏览器,专为 AI agent 和网页自动化设计,不基于 Chromium/WebKit。内存占用比 Headless Chrome 低约 16 倍,执行速度快约 9 倍;支持 CDP、WebDriver Bidi 和 MCP 协议,内置原生 agent 模式可直连多模型 provider,还提供 token-free 的 PandaScript 录制回放。适合做大规模爬虫和 AI agent 的浏览器底座。

README

Logo

Lightpanda Browser

为 AI agent 和自动化而从头构建的无头浏览器。
不是 Chromium 的分支,也不是 WebKit 的补丁。这是一个用 Zig 编写的新浏览器。

License Twitter Follow GitHub stars Discord

 

基准测试

在 AWS EC2 m5.large 实例上通过网络请求了 933 个真实网页。 详见 benchmark details。

指标 Lightpanda Headless Chrome 差异
内存(峰值,100 个页面) 123MB 2GB 约少 16 倍
执行时间(100 个页面) 5s 46s 约快 9 倍

快速开始

安装

包管理器

通过 Homebrew 安装最新 nightly(每夜构建):

brew install lightpanda-io/browser/lightpanda

通过 Arch Linux User Repository 安装最新 nightly:

yay -S lightpanda-nightly-bin

从 nightly 构建下载

你可以从 nightly builds 下载适用于 Linux 和 MacOS 的 x86_64 及 aarch64 最新二进制文件。

Linux

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

运行前先验证二进制文件:

./lightpanda version

Linux aarch64 也可用

注意: Linux 发布版二进制文件链接的是 glibc。在基于 musl 的发行版(Alpine 等)上,由于缺少 glibc 动态链接器,二进制文件会报 cannot execute: required file not found。请使用基于 glibc 的基础镜像(如 FROM debian:bookworm-slim 或 FROM ubuntu:24.04),或从源码构建。

MacOS

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

MacOS x86_64 也可用

Windows + WSL2

Lightpanda 没有原生 Windows 二进制。请按照上述 Linux 步骤在 WSL 中安装。

尚未安装 WSL?在管理员 shell 中运行 wsl --install,重启后打开 wsl。 详见 Microsoft 的 WSL 安装指南。

你的自动化客户端(Puppeteer、Playwright 等)可以在 WSL 内运行,也可以在 Windows 主机上运行。WSL 会自动转发 localhost:9222。

通过 Docker 安装

Lightpanda 提供适用于 Linux amd64 和 arm64 架构的官方 Docker 镜像。 以下命令拉取 Docker 镜像并启动一个新容器,在端口 9222 上暴露 Lightpanda 的 CDP 服务器。

docker run -d --name lightpanda -p 127.0.0.1:9222:9222 lightpanda/browser:nightly

抓取一个 URL

./lightpanda fetch --obey-robots --dump html --log-format pretty  --log-level info https://demo-browser.lightpanda.io/campfire-commerce/

你可以使用 --dump markdown 直接转换为 markdown,使用 --dump png > page.png 或 --dump pdf > page.pdf 进行仅文本方式的页面渲染。 --wait-until、--wait-ms、--wait-selector 和 --wait-script 可用于调整抓取前的等待时间。

启动 CDP 服务器

./lightpanda serve --obey-robots --log-format pretty  --log-level info --host 127.0.0.1 --port 9222

CDP 服务器启动后,你可以通过配置 browserWSEndpoint 来运行 Puppeteer 脚本。

Puppeteer 脚本示例
import puppeteer from 'puppeteer-core';

// use browserWSEndpoint to pass the Lightpanda's CDP server address.
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:9222",
});

// The rest of your script remains the same.
const context = await browser.createBrowserContext();
const frame = await context.newPage();

// Dump all the links from the frame.
await frame.goto('https://demo-browser.lightpanda.io/amiibo/', {waitUntil: "networkidle0"});

const links = await frame.evaluate(() => {
  return Array.from(document.querySelectorAll('a')).map(row => {
    return row.getAttribute('href');
  });
});

console.log(links);

await frame.close();
await context.close();
await browser.disconnect();
启动 WebDriver Bidi 服务器

使用 --protocol webdriver 启用 Bidi 支持。 你可以同时启动 CDP 和 Bidi:--protocol webdriver --protocol cdp

./lightpanda serve --obey-robots --log-format pretty  --log-level info --host 127.0.0.1 --port 9222 --protocol webdriver

Agent 模式

lightpanda agent 让你通过原生 agent 驱动浏览器。用简单的英语或斜杠命令描述你的需求,它会控制浏览器:导航页面、点击流程、填写表单、提取结构化数据。你可以把它想象成一个被指挥使用网络的机器人,而不是一个与之对话的聊天机器人。

由于 agent 与浏览器运行在同一个进程中,每次工具调用都是直接操作,你依然能获得 Lightpanda 在速度和内存上的优势。

agent 会话的输出是 PandaScript:一种直接在 Lightpanda 中内置了少量原生浏览器原语的 vanilla JavaScript。 运行 /save 可导出当前会话,然后用 lightpanda run <script>.js 重放。脚本是确定性的且不依赖 token,因此你可以先用 LLM 做原型,再在没有模型的情况下把产出部署到生产环境。

它支持 Anthropic、OpenAI、Gemini、Google Vertex AI、Mistral、Hugging Face、Vercel AI Gateway(一个 key 即可使用各大实验室数百种模型)、通过 OPENAI_BASE_URL 指定的任何 OpenAI 兼容端点,以及通过 Ollama 或 llama.cpp 运行的本地模型。你也可以使用 --no-llm 在没有 LLM 的情况下运行,这会进入 REPL。完整参考请阅读 agent 文档。

./lightpanda agent                                    # 从环境变量自动检测 API key
./lightpanda agent --task "top story on news.ycombinator.com?"
./lightpanda agent --no-llm                           # 基础 REPL,无 LLM
./lightpanda run session.js                           # 运行录制的脚本
./lightpanda agent --provider gemini --task "..."     # 强制使用特定 provider
./lightpanda agent --list-models                      # 列出检测到的 provider 可用的模型
VERTEX_API_KEY=... ./lightpanda agent --provider vertex             # Vertex AI,express 模式
GOOGLE_CLOUD_PROJECT=my-proj ./lightpanda agent --provider vertex   # Vertex AI,通过 gcloud auth 获取 token
AI_GATEWAY_API_KEY=... ./lightpanda agent --provider vercel --model moonshotai/kimi-k2   # Vercel AI Gateway 背后的任何模型
OPENAI_BASE_URL=https://my-gateway/v1 OPENAI_API_KEY=... ./lightpanda agent            # 任何 OpenAI 兼容服务器

原生 MCP 与 skill

MCP 服务器通过 stdio 使用 MCP JSON-RPC 2.0 通信。

添加到你的 MCP 配置中:

{
  "mcpServers": {
    "lightpanda": {
      "command": "/path/to/lightpanda",
      "args": ["mcp"]
    }
  }
}
HTTP 传输与独立会话

要在单个进程中服务多个 agent,可以给 MCP 服务器指定一个端口来通过 HTTP 而不是 stdio 提供服务(添加 --host x.x.x.x 以指定监听接口):

lightpanda mcp --port 9223

客户端向 http://host:9223/mcp POST JSON-RPC。每个连接都被路由到其自己的浏览会话 —— 自己的页面、cookie 和内存 —— 因此 agent 之间不再互相干扰:

  • 在 initialize 时未带 Mcp-Session-Id 头的客户端会被分配一个全新会话;id 会在响应的 Mcp-Session-Id 头中返回。后续请求带上该 id 即可保持在同一会话(隔离)。
  • 两个发送相同 Mcp-Session-Id 的 agent 会共享一个浏览上下文(共享 —— 例如多个 agent 协作操作同一页面的工作流)。
  • session_new、session_list 和 session_close 工具用于显式管理会话。发送带有 Mcp-Session-Id 的 DELETE /mcp 可关闭该会话。

阅读完整文档

在 lightpanda-io/agent-skill 中提供了一个 skill。

遥测

默认情况下,Lightpanda 会收集并发送使用遥测数据。可以通过设置环境变量 LIGHTPANDA_DISABLE_TELEMETRY=true 禁用。你可以在 https://lightpanda.io/privacy-policy 阅读 Lightpanda 的隐私政策。

核心转储

设置 LIGHTPANDA_DISABLE_CORE_DUMP(任意值)可在启动时将软 RLIMIT_CORE 置零,从而禁止崩溃时的核心转储。

状态

以下是我们已实现的关键功能。 完整详情请参阅我们的 Web Platform Tests 结果。

  • CORS(使用 --experimental-features cors 启用)
  • HTTP 加载器(Libcurl)
  • HTML 解析器(html5ever)
  • DOM 树
  • JavaScript 支持(v8)
  • DOM API
  • Ajax
    • XHR API
    • Fetch API
  • DOM 和 Markdown 导出
  • CDP/websockets 服务器
  • 点击
  • 表单输入
  • Cookies
  • 自定义 HTTP 头
  • 代理支持
  • 网络拦截
  • 通过 --obey-robots 选项遵守 robots.txt
  • CDP 与 Webdriver Bidi
  • 广告拦截

从源码构建

前置条件

Lightpanda 使用 Zig 0.15.2 编写。你必须安装正确版本才能构建项目。

Lightpanda 还依赖 v8、 Libcurl 和 html5ever。

要构建 v8 引擎,你需要安装以下库:

对于 基于 Debian/Ubuntu 的 Linux:

sudo apt install xz-utils ca-certificates \
    pkg-config libglib2.0-dev \
    clang make curl git

你还需要安装 Rust。

对于使用 Nix 的系统,可以使用 devShell:

nix develop

对于 MacOS,需要 cmake 和 Rust。

brew install cmake

构建并运行

你可以使用 make build 构建完整浏览器,或使用 make build-dev 构建调试环境。

也可以直接使用 zig 命令:zig build run。

嵌入 v8 snapshot

Lightpanda 使用 v8 snapshot。默认情况下它会在启动时创建,但你可以通过以下命令将其嵌入:

生成 snapshot。

zig build snapshot_creator -- src/snapshot.bin

使用 snapshot 二进制文件构建。

zig build -Dsnapshot_path=../../snapshot.bin

更多细节见 #1279。

测试

单元测试

你可以运行 make test 来测试 Lightpanda。

make test                                       # 运行所有测试
make test F="server"                            # 按子字符串过滤
TEST_FILTER="WebApi: #selector_all" make test   # 过滤主测试 + 子测试(分隔符:#)
TEST_VERBOSE=true make test
TEST_FAIL_FIRST=true make test
METRICS=true make test                          # 以 JSON 形式捕获分配/耗时指标

端到端测试

要运行端到端测试,你需要将 demo repository 克隆到 ../demo 目录。

你需要安装 demo 的 node 依赖。

还需要安装 Go > v1.24。

make end2end

Web Platform Tests

Lightpanda 会对照标准化的 Web Platform Tests 进行测试。

我们使用一个分支,其中包含自定义的 testharnessreport.js。结果会每天发布。

作为参考,你可以通过 wpt.live 在浏览器中轻松执行 WPT 测试用例。

配置 WPT HTTP 服务器

要运行测试,你需要克隆仓库、配置自定义 hosts 并生成 MANIFEST.json 文件。

克隆 fork 分支的仓库。

git clone -b fork --depth=1 git@github.com:lightpanda-io/wpt.git

进入 wpt/ 目录。

在 /etc/hosts 中安装自定义域名。

./wpt make-hosts-file | sudo tee -a /etc/hosts

生成 MANIFEST.json

./wpt manifest

详细步骤请参考 WPT 的配置指南。

运行 WPT 测试套件

github.com/lightpanda-io/demo/ 仓库提供了一个外部 Go runner,位于 wptrunner/ 目录。 你需要先克隆该项目。

首先从你的 wpt/ 克隆目录启动 WPT HTTP 服务器。

./wpt serve

运行一个 Lightpanda 浏览器。

zig build run -- --insecure-disable-tls-host-verification

然后从 demo 克隆目录启动 wptrunner:

cd wptrunner && go run .

或者运行某个特定测试:

cd wptrunner && go run . Node-childNodes.html

wptrunner 命令接受 --summary 和 --json 选项以改变输出。 另外 --concurrency 用于定义并发限制。

:warning: 运行整个测试套件会花费很长时间。这种情况下, 以 releaseFast 模式构建会很有用,可加快测试速度。

zig build -Doptimize=ReleaseFast run

贡献

指南请参阅 CONTRIBUTING.md。 在 pull request 过程中你必须签署 CLA。

为什么选择 Lightpanda?

现代 Web 必须执行 JavaScript

简单的 HTTP 请求过去足以满足 Web 自动化。如今已不再如此。JavaScript 现在驱动着互联网的大部分内容:

  • Ajax、单页应用、无限加载、即时搜索
  • JS 框架:React、Vue、Angular 等

Chrome 不是合适的工具

在服务器上运行完整的桌面浏览器可行,但扩展性不佳。Chrome 在数百或数千实例时的成本很高:

  • 对 RAM 和 CPU 消耗大
  • 在规模部署时难以打包、部署和维护
  • 无头模式下很多功能并非必需

Lightpanda 为性能而生

要真正实现 JavaScript 的高性能,意味着必须从头构建,而不是 fork Chromium:

  • 不基于 Chromium、Blink 或 WebKit
  • 使用 Zig 编写,这是一种具有显式内存控制能力的底层语言
  • 没有图形渲染引擎
开源项目lightpanda-io2026-09-07原文

相关内容