命令行工具
lightpanda-io/browser avatar
lightpanda-io/browser

Lightpanda 评测:用 Zig 重写的无头浏览器,内存只有 Chrome 的十六分之一

Lightpanda:专为人工智能和自动化设计的无头浏览器。启动 CDP 服务器 CDP 服务器启动后,您可以通过配置浏览器 WSEndpoint 来运行 Puppeteer 脚本。

35,340 个 Star1,677 个 ForkZigAGPL-3.0

秒懂

它是什么?
Lightpanda 是一个从零开始、用 Zig 编写的无头浏览器,面向 AI 代理和自动化任务。它通过 CDP 协议兼容 Puppeteer,并提供原生 agent 模式。实测数据显示其内存占用和速度远超 Headless Chrome,但功能集和生态成熟度仍需仔细评估。
适合谁用?
Lightpanda 适合那些对内存占用极度敏感、且任务集中在文本提取、链接抓取和简单表单操作的 AI 代理和自动化脚本开发者。如果你的工作流依赖复杂的 JavaScript 渲染、Canvas 或 WebGL,或者需要完整的浏览器扩展支持,那么它目前不是正确的工具,你仍应使用 Playwright 或 Puppeteer 配合 Chromium。
能商用吗?
可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Zig(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:AI 代理的浏览器太重了

AI 代理和自动化脚本需要浏览器,但 Chromium 系浏览器非常笨重。每次启动一个 Headless Chrome 实例,内存轻松超过 2GB,执行 100 个页面的抓取需要 46 秒。Lightpanda 的定位就是解决这个痛点:一个从头编写的浏览器,用 Zig 实现,没有继承 Chromium 或 WebKit 的任何代码。它面向的是那些需要高频、轻量、可嵌入的浏览器内核的开发者,尤其是 AI agent 的开发者,因为 agent 通常需要同时管理多个页面上下文。Lightpanda 的 README 给出的基准测试显示,在 AWS EC2 m5.large 实例上请求 933 个真实网页,峰值内存为 123MB(对比 Chrome 的 2GB,约 16 倍差距),执行 100 页耗时 5 秒(对比 46 秒,约 9 倍差距)。这些数字来自项目方自己的 benchmark,我们无法独立复现,但它们至少表明设计目标明确。

核心机制:CDP 兼容与原生 agent 双通道

Lightpanda 提供了两种主要的自动化方式。第一种是标准 CDP 服务器:运行 `./lightpanda serve` 后,它会监听一个 WebSocket 端口,任何支持 CDP 的客户端都能连接。README 中给出了 Puppeteer 的例子,通过 `browserWSEndpoint: "ws://127.0.0.1:9222"` 连接,然后像操作普通浏览器一样调用 `createBrowserContext`、`newPage`、`goto` 和 `evaluate`。这意味着你现有的 Puppeteer 脚本大部分可以无缝迁移,只要不依赖 Chromium 特有的功能。第二种是 agent 模式:`lightpanda agent` 启动一个内置的 AI 代理,你可以用自然语言描述任务,比如 `--task "top story on news.ycombinator.com?"`,它会自动导航、点击、填表并提取结构化数据。这个 agent 与浏览器运行在同一个进程内,所以每次工具调用都是直接操作,没有 IPC 开销,这也是它声称能保持速度和内存优势的原因。agent 会话的输出是一个 PandaScript 文件,用 `/save` 导出,之后可以用 `lightpanda run session.js` 重放,这个过程是确定性的,且不需要在运行时调用 LLM。

获取与运行:从 Homebrew 到 Docker 的多种路径

安装 Lightpanda 有几种方式,取决于你的操作系统。macOS 用户可以直接 `brew install lightpanda-io/browser/lightpanda`,Arch Linux 用户可以用 `yay -S lightpanda-nightly-bin`。对于 Linux 和 macOS 的 x86_64 和 aarch64 架构,项目提供了 nightly 构建的二进制,下载后需要 `chmod a+x` 并运行 `./lightpanda version` 验证。一个重要的限制是:Linux 二进制链接的是 glibc,在 musl 发行版(如 Alpine)上会直接报错 `cannot execute: required file not found`。README 明确建议使用 glibc 基础镜像,比如 `debian:bookworm-slim` 或 `ubuntu:24.04`,或者从源码编译。Windows 没有原生支持,只能通过 WSL2 运行,但 WSL 会自动转发 localhost 端口,所以你的 Puppeteer 客户端可以运行在 Windows 主机上,连接 `ws://localhost:9222`。此外还有官方 Docker 镜像,一条命令就能启动:`docker run -d --name lightpanda -p 127.0.0.1:9222:9222 lightpanda/browser:nightly`。

内容抓取:fetch 命令与等待策略

除了 CDP 和 agent 模式,Lightpanda 还提供了一个直接的抓取命令 `fetch`。你可以用 `./lightpanda fetch --obey-robots --dump html --log-format pretty --log-level info https://demo-browser.lightpanda.io/campfire-commerce/` 来获取页面 HTML。`--dump` 参数支持多种输出格式:`markdown` 可以直接将页面转换为 Markdown,`png` 和 `pdf` 可以导出为图片或 PDF 文件,但 README 特别注明这是“text-only rendering”,也就是说它可能不包含复杂的 CSS 渲染效果。等待策略是抓取的关键,`--wait-until`、`--wait-ms`、`--wait-selector` 和 `--wait-script` 这些参数让你可以控制页面加载完成的条件。如果你要抓取一个依赖 JavaScript 动态渲染内容的页面,`--wait-selector` 可能比固定等待更可靠。这里有个明显的取舍:Lightpanda 的渲染引擎是全新的,它可能无法支持所有现代 Web 平台 API,所以对于重度交互的页面,你需要测试 `waitUntil: "networkidle0"` 是否真的能等到所有资源加载完毕。

agent 模式与 PandaScript:从 LLM 到确定性脚本

agent 模式是 Lightpanda 区别于其他无头浏览器的一个亮点。它支持 Anthropic、OpenAI、Gemini、Google Vertex AI、Mistral、Hugging Face,以及任何兼容 OpenAI 的端点(通过 `OPENAI_BASE_URL` 配置),也支持本地模型如 Ollama 和 llama.cpp。如果你不想用 LLM,`--no-llm` 参数会给你一个 REPL,可以手动输入命令来控制浏览器。agent 会话的输出是 PandaScript,这是一种“vanilla JavaScript with a small set of native browser primitives”,也就是说它是在标准 JS 之上增加了一些内置的浏览器原语。关键卖点是:你可以在开发时用 LLM 来生成脚本,然后导出 PandaScript,在生产环境中用 `lightpanda run session.js` 运行,整个过程不需要模型参与,因此是确定性的,且没有 token 成本。这个设计很聪明,它把 LLM 当作开发工具,而不是运行时依赖。但注意,PandaScript 的 API 是 Lightpanda 独有的,如果你以后想迁移到其他浏览器,这些脚本可能无法直接复用。

MCP 支持与多会话架构

Lightpanda 原生支持 MCP(Model Context Protocol),它的 MCP 服务器通过 stdio 通信,使用 JSON-RPC 2.0。你可以在 MCP 配置文件中添加一个 server 条目,指定命令为 `/path/to/lightpanda`,参数为 `["mcp"]`。这意味着任何支持 MCP 的 AI 客户端(比如 Claude Desktop 或其他 agent 框架)都能直接调用 Lightpanda 的浏览器能力。README 还提到了 HTTP transport 和独立会话(independent sessions),但细节被截断了,我们无法确认具体实现方式。根据仓库布局,这个 MCP 服务器应该是内置的,不需要额外安装。对于希望将浏览器控制集成到现有 AI 工作流中的开发者,这是一个低摩擦的入口。不过,MCP 的生态还在快速变化,你需要确认你的客户端版本与 Lightpanda 的 MCP 实现兼容。

限制与失败模式:哪些场景它不合适

Lightpanda 目前最明显的限制是它不支持完整的 Web 平台。README 没有明确列出支持的 API 列表,但既然它强调是“from scratch”和“text-only rendering”,可以推断它不会支持 WebGL、Canvas 的复杂绘图、或者需要大量 GPU 资源的页面。如果你的自动化任务依赖这些功能,Lightpanda 会直接失败或者产生错误输出。另一个失败模式是 glibc 依赖问题,在 Alpine 这类 musl 发行版上,二进制无法运行,你必须在 Dockerfile 里换成 Debian 或 Ubuntu 基础镜像,这增加了部署复杂度。还有,agent 模式依赖外部 LLM API,如果你使用远程模型,每次会话都会产生 token 费用,而且网络延迟会影响响应速度。虽然 `--no-llm` 可以离线使用,但那需要你手动编写命令,失去了自然语言交互的便利。最后,AGPL-3.0 许可证是一个需要认真对待的约束。如果你的产品以网络服务形式提供,并且集成了 Lightpanda,你可能需要将整个服务的源代码开源。这不是一个可以忽略的细节。

替代方案与对比:Playwright 和 Chromium 的差异

如果你需要更完整的浏览器功能,Playwright 或 Puppeteer 配合 Chromium 是主流选择。它们支持所有现代 Web API、完善的调试工具(如 Playwright Inspector)、以及跨浏览器测试(Firefox、WebKit)。但代价是资源占用巨大,一个 Chromium 实例的内存开销通常在 300MB 以上,而且启动时间慢。Lightpanda 的差异在于它从架构上放弃了完整的渲染引擎,只保留自动化所需的核心功能。这意味着它不能运行复杂的前端框架应用,但如果你只需要抓取 SSR 页面或简单的 CSR 页面,它的速度和内存优势是实实在在的。另一个替代方案是使用无头 Chrome 的 `--dump-dom` 参数,但那仍然需要启动完整的浏览器进程。Lightpanda 的 fetch 命令和 CDP 服务器都是轻量级的,适合在 serverless 环境或边缘计算中运行。选择的关键在于你的页面复杂度:如果页面需要执行大量 JavaScript 才能产生内容,Lightpanda 可能无法胜任,Chromium 系是更安全的选择。

编辑结论

Lightpanda 适合那些对内存占用极度敏感、且任务集中在文本提取、链接抓取和简单表单操作的 AI 代理和自动化脚本开发者。如果你的工作流依赖复杂的 JavaScript 渲染、Canvas 或 WebGL,或者需要完整的浏览器扩展支持,那么它目前不是正确的工具,你仍应使用 Playwright 或 Puppeteer 配合 Chromium。在采用之前,请先验证两件事:一是用你自己的目标网站列表跑一遍 `lightpanda fetch --dump html`,确认渲染结果满足需求;二是检查你的部署环境是否为 glibc 基础镜像,因为 musl 发行版(如 Alpine)无法直接运行官方二进制。另外,AGPL-3.0 许可证意味着如果你将 Lightpanda 作为网络服务的一部分提供给第三方,你可能需要开源相关代码,请务必咨询法律意见。最终判断:Lightpanda 在性能和资源占用上的优势是真实的,但它的适用边界同样清晰,它不是 Chromium 的替代品,而是一个针对特定自动化场景的专用工具。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记