WBrowser 是一款仅支持 macOS 12+ / Apple Silicon 的本地多 Profile 浏览器管理器。 它为每个 Profile 隔离浏览器数据目录、代理、设备画像和会话,并提供可选择开启的本机 CDP / MCP 自动化能力。
WBrowser 是一个本地客户端,不提供 WBrowser 云账号、云同步、远程 Profile 托管、 计费系统或遥测分析后台。Profile 配置和浏览器数据默认保存在当前 Mac;代理密码与 VLESS URL 保存在 macOS Keychain。
WBrowser 不能保证匿名、不可检测或账号绝对不关联。网站仍可通过 IP、Cookie、 登录身份、支付信息、浏览行为以及未覆盖的浏览器信号建立关联。请只在合法、已获 授权且符合目标网站规则的场景中使用。
- 创建、编辑、复制和删除本地 Profile,每个 Profile 使用独立
--user-data-dir。 - 每个运行中的 Chromium 使用 Profile 本地名称作为其私有 macOS 应用名,Dock 悬停
不再显示通用的
Profile Browser。 - 为 Profile 保存稳定的指纹 seed,并从经过约束的 macOS / Windows 家用设备画像中 组合 CPU 核数、内存、GPU、屏幕、语言、时区、WebRTC、Canvas 等协调配置。
- 管理 HTTP、HTTPS、SOCKS5 代理;可选使用 VLESS → SOCKS5 的 TCP 两跳链路。
- 代理密码和 VLESS 凭据不写入 JSON、进程参数或应用日志,而是存入 macOS Keychain。
- Profile 关闭后再次启动时恢复上次保留的标签页。
- 开发者模式按 Profile 显式开启;通过本机 Unix socket、标准 loopback CDP 和 WBrowser Control 插件提供边界明确的自动化接口。
从旧版升级时,如果曾把 Profile Browser 固定到 Dock,请在首次启动新版本 Profile
后移除那个未运行的旧图标,并按需固定以本地名称显示的新图标。WBrowser 不会擅自
改写用户的全局 Dock 配置。
更完整的能力和限制见 MVP 说明、架构 与 自动化 API。
当前支持范围如下:
| 项目 | 支持状态 |
|---|---|
| macOS 12 或更高版本 | 支持 |
Apple Silicon (arm64) |
支持 |
| Intel Mac | 不支持托管指纹内核 |
| Windows / Linux 客户端 | 不支持 |
| WBrowser 云账号、同步或远程数据管理 | 不存在 |
默认本地数据目录:
~/Library/Application Support/wbrowser/
├── profiles.json
├── proxies.json
├── profiles/<uuid>/user-data/
├── fingerprint-kernels/
├── chain-runtime/
├── screenshots/
└── control.sock
控制 API 只绑定权限为 0600 的本机 Unix socket,不监听局域网或公网端口。
WBrowser 项目维护者不运营第三方数据管理后台,也不会通过 WBrowser 服务接收你的 Profile 列表、代理密码、Cookie、浏览历史或网页内容。不过,“本地客户端”不等于 “完全不访问第三方网络”。只有在对应功能被触发时,应用会进行以下请求:
| 触发场景 | 网络目标 | 发送内容 |
|---|---|---|
| 检查或安装指纹内核 | GitHub API / GitHub Releases | 普通下载请求和出口 IP |
| 安装可选 Xray | GitHub Releases | 普通下载请求和出口 IP |
| 时区/语言/位置跟随出口 IP | ipwho.is |
该 Profile 的出口 IP 和普通 HTTP 元数据 |
| 手动测试代理 | api64.ipify.org |
被测试代理的出口 IP 和普通 HTTP 元数据 |
| 正常浏览 | 用户访问的网站及用户配置的代理 | 正常浏览流量 |
WBrowser 不会把代理密码发送给上述 IP 查询服务;代理凭据只用于建立用户配置的代理
连接。第三方网站、代理服务、GitHub、ipwho.is 和 ipify 仍适用其各自条款与隐私
政策。完整说明见 PRIVACY.md。
WBrowser 自身是基于 Wails 的管理客户端。Profile
浏览器使用独立的第三方项目
adryfish/fingerprint-chromium:
- 该项目基于 Ungoogled Chromium,采用 BSD 3-Clause License;底层 Chromium 及其 第三方组件继续适用各自许可证。
- 指纹内核不提交在本仓库,也不预装进源码包。用户在界面确认后,WBrowser 才会从 上游 GitHub Release 下载 macOS arm64 DMG。
- GitHub API 只用于发现;只有随 WBrowser 源码批准的精确版本、资产名、字节数和 SHA-256 才可下载。安装还会校验 DMG、Bundle ID、版本、最低 macOS 版本和 Mach-O 架构,然后再启用。
- 上游 DMG 是第三方、ad-hoc 签名产物,目前没有独立发布者签名或 attestation。 编译期摘要可阻止后续静默替换,但不能独立证明最初批准的是发布者真实产物。
- WBrowser 与 Chromium、Ungoogled Chromium、fingerprint-chromium 维护者之间不存在 官方隶属或背书关系。
可选两跳代理使用独立下载的 XTLS/Xray-core v26.3.27(MPL-2.0)。它同样不在 本仓库中;下载包内的原始许可证会保留在本地运行时目录。
所有组件及其许可证见 THIRD_PARTY_NOTICES.md。
普通用户请从 GitHub Releases
下载 Apple Silicon 安装包 wbrowser-0.5.0-macos-arm64.zip 和同一 Release 中的
SHA256SUMS。WBrowser 当前不提供 Intel、Windows 或 Linux 安装包。
把两个文件放在同一目录后先校验:
shasum -a 256 -c SHA256SUMS校验通过后解压 ZIP,把 wbrowser.app 拖入“应用程序”目录并启动。正式 Release
资产必须使用 Developer ID 签名、通过 Apple notarization 并带有 stapled ticket;如果
Gatekeeper 报告资产未公证或来源无法验证,请停止安装,不要通过移除 quarantine 属性
绕过系统检查。
安装包内不预装 fingerprint-chromium 或 Xray。只有用户在应用内确认对应操作后, WBrowser 才会下载并校验这些第三方运行时。
- macOS 12+
- Apple Silicon Mac
- Xcode Command Line Tools
- Go
1.25.0module-language compatibility; release/build checks select the exact patched toolchaingo1.26.5 - Node.js 20.17+ with npm 11.17.0+(源码构建的严格 lifecycle-script 门禁)
发布/构建检查会在当前进程设置 GOTOOLCHAIN=go1.26.5,不会执行 go env -w,也不会
修改用户的全局 Go 配置。若 Go 命令无法选择这个精确版本,检查会在构建前明确失败。
git clone https://github.com/quanzhankeji/wbrowser.git
cd wbrowser
./script/check_npm_lifecycle.sh
npm --prefix frontend ci --strict-allow-scripts --dangerously-allow-all-scripts=false --ignore-scripts=false
npm --prefix plugins/wbrowser-control/mcp ci --strict-allow-scripts --dangerously-allow-all-scripts=false --ignore-scripts=false
go run github.com/wailsapp/wails/v2/cmd/wails@v2.13.0 devgo.mod 保留 go 1.25.0 语言兼容性,并声明 toolchain go1.26.5;Go 的工具链选择
由当前进程完成,不要求把全局默认版本改成 1.26.5。
./script/build_and_run.sh --verify应用输出到 build/bin/wbrowser.app。该目录是本地构建产物,不进入 Git。脚本会先关闭
同一构建路径下仍在运行的 WBrowser,再执行干净构建、打包自动化组件与许可证,最后
启动应用并检查本机控制 socket。
go test -count=1 ./...
go test -race -count=1 ./...
go vet ./...
npm --prefix frontend test
npm --prefix frontend run build
npm --prefix plugins/wbrowser-control/mcp run check
./script/check_frontend_csp.sh
./script/release.sh verify-sign-stage./script/release.sh build --version 0.5.0
./script/release.sh verify-sign-stage
./script/release.sh sign \
--artifact-dir "$PWD/build/release/0.5.0" \
--identity "Developer ID Application: Chengdu Quanzhan Technology Co., Ltd (8UPRU238P7)" \
--expected-zip-sha256 "<build 阶段输出并单独保存的 SHA-256>"
./script/release.sh notarize \
--artifact-dir "$PWD/build/release/0.5.0" \
--keychain-profile "YOUR-NOTARY-PROFILE" \
--expected-zip-sha256 "<sign 阶段输出并单独保存的 SHA-256>"build 阶段要求 GOFLAGS 为空(不接受用户 build tags),并要求 npm 11.17.0+ 以
--strict-allow-scripts 只运行两份 package.json 中精确批准的 lifecycle scripts;随后恢复
锁定依赖并执行 Wails 构建。现有 post-build hook 仍会把 MCP、
Playwright 和许可证放入 .app,并为本地开发恢复 ad-hoc seal。随后会读取最终 Mach-O
中的实际 Wails tags,并拒绝任何包含 wbrowser_dev 能力的产物。它不读取或要求 Developer
ID 凭据。sign 阶段只接受 build 阶段生成的 staged artifact set(manifest、unsigned ZIP
与 .app),并要求调用方从构建输出单独保存后显式传回 unsigned ZIP SHA-256;随后从
已校验 ZIP 解包,锁定发行 Team,执行正式签名、strict verify 和 ZIP 归档。notarize
阶段同样要求显式传回 sign 输出的摘要,只接受 Apple Accepted,再对 .app staple、
Gatekeeper 复验、重新生成最终 ZIP 和 SHA256SUMS。sign/notarize 都不会运行 npm
lifecycle、Go build/run 或 Wails。build/release/ 是构建产物目录,不是隔离 checkout、
容器或沙箱;发布前仍需在已审阅的工作树中运行并人工确认签名身份和公证结果。
生产前端由 Vite transformIndexHtml 插入 CSP meta;开发模式不插入该 meta,因此不会把
生产策略带入开发输出。该 meta 只约束它出现之后的文档内容,不宣称覆盖 Wails 在此之前
注入的 runtime / IPC 脚本;script/check_frontend_csp.sh 只检查产物中的 meta 存在/缺失,不替代真实
开发服务器 HMR 或 Wails 生命周期验收。
真实内核、Keychain、代理供应商与网页自动化验收还需要对应的本机环境和用户授权。 测试命令成功不等于第三方网站永远兼容。详细 gate 见 测试计划。
WBrowser 自有源码采用 Apache License 2.0。第三方组件、生成文件和字体不 因此改为 Apache-2.0,仍分别适用其原许可证:
- NOTICE:随 WBrowser 分发的主要归属信息;
- THIRD_PARTY_NOTICES.md:第三方运行时与直接依赖;
- 代码来源说明:自有代码、Wails 生成代码和概念参考的边界;
frontend/src/assets/fonts/OFL.txt:Nunito 的 SIL OFL 1.1 原文。
发布二进制时,请同时分发 LICENSE、NOTICE 和 THIRD_PARTY_NOTICES.md。项目构建
脚本会自动把这些文件放入 .app/Contents/Resources/legal/。
安全问题请通过本仓库的 GitHub Security Advisory 私下报告,详情见 SECURITY.md。