theogbob/WebkitWasm

GitHub: theogbob/WebkitWasm

将完整 WebKit 引擎编译为 WebAssembly,使其作为独立浏览器引擎直接在浏览器标签页内运行并渲染到 canvas 上。

Stars: 24 | Forks: 1

# WebkitWasm --- 关于此移植的趣闻 - 主要由 fable 5、opus 4.8 和 GLM 5.2 完成,初始的“可用”版本耗时 6 小时。 - API 成本花费约 5000 美元(但单靠 Anthropic 每月 200 美元的订阅也可以轻松完成) - 该移植还包含文档、md 文件、回顾,来自我的会话以及与 claude 的工作流程,方便任何人查看进度并与 agent 协作进行构建 - 姊妹项目,由一位朋友制作的更完善的 gecko 移植版,请见此处:BUILD.md - 如果有时间,我可能会继续在这方面做一些工作。它目前有一些已知问题(例如视频支持),但引擎移植本身实际上相当快,可能比 gecko 移植版更快,因为 webkit 本身更轻量且更易于移植。 一个完全现代的浏览器引擎运行**在浏览器标签页内**。WebKit (WebCore + JavaScriptCore)通过 Emscripten 编译为 WebAssembly —— 无需 VM, 无需 x86 模拟。页面承载了一个交互式的 ``,它*就是* 引擎的渲染器,并且所有的网络请求都通过 **Wisp** 协议离开该标签页。 它可以启动、通过 Skia 绘制、运行客户端 JavaScript(无 JIT)、在重新加载时保留 cookie + localStorage,并加载真实网站 —— 包括实时的 Discord 会话 —— 所有这些都完全在 wasm 引擎内运行。 ## 快速开始 克隆操作仅提供我们大约 15 MB 的源代码。大约 11 GB 的引擎树(WebKit、emsdk、 构建好的 wasm 依赖项)被 gitignore 忽略,并由 bootstrap 脚本重新创建: ``` bash tools/bootstrap.sh # clone pinned WebKit + emsdk, build wasm deps (~30-90 min, ~15 GB) bash tools/build-webcore.sh # build the engine (WebCore + embedder) -> build/webcore/bin npm run wisp & # Wisp network server on 127.0.0.1:5001 node tools/dev-server.mjs web --mount /engine=build/webcore/bin # serves on :8080 with COOP/COEP ``` 然后打开 **`http://localhost:8080/browser.html?url=https://example.com`**。 要求:Linux 主机需配备 `git curl cmake ninja make python3 pkg-config tar xz unzip` 以及 C/C++ 编译器;`node` 用于开发/Wisp 服务器。有关 完整的操作步骤和故障排除,请参阅 [`BUILD.md`](docs/summaries/)。 ## 分支 | 分支 | 引擎 | 用途 | |---|---|---| | **`main`** | pthread GPU (`-sPROXY_TO_PTHREAD`) | 日常使用 —— 当引擎在 worker 上运行时,宿主标签页保持响应。使重度 JS 网站更流畅。 | | **`non-pthread`** | 主线程 GPU (`BIB_PTHREAD=0`) | 最大图形吞吐量 (MotionMark ~109) 且适用于不支持 SharedArrayBuffer 的宿主。权衡:长时间的客户端 JS 任务会冻结整个标签页。 | 代码相同;分支的区别仅在于默认的构建标志。`wb1-pthread` 是 保留作参考的早期 pthread 快照。 ## 工作原理(一段话概述) WebCore + JSC 被构建为自定义的 `PORT=Emscripten` (CLoop, `ENABLE_JIT=OFF`)。 渲染由 Skia 完成 → 引擎拥有 WebGL2/Ganesh 上下文并呈现给 页面 ``(在 `non-pthread` 上直接呈现,在 `main` 上通过 OffscreenCanvas 传输呈现)。网络由 WebKit 的 curl 后端(curl 8.17 + OpenSSL 3.5 + nghttp2) 通过 Emscripten SOCKFS 处理,并使用 wisp-js 作为传输层 —— TLS 在引擎内部终止。持久化由 OPFS 支持的配置文件实现。完整的 设计理由请见 [`docs/summaries/`](LICENSING.md) (decision-00x 文档)。 ## 服务要求 宿主页面**必须**使用 COOP `same-origin` + COEP `require-corp` (用于 SharedArrayBuffer / pthreads)进行服务。`tools/dev-server.mjs` 会完成此设置。 无法设置这些标头的静态宿主必须使用 `non-pthread` 构建。 ## 许可 此仓库仅包含原始代码(嵌入器、宿主页、工具)以及 `src/patches/webkit-emscripten.patch`。它**不会**重新分发 WebKit — `bootstrap.sh` 会从上游获取它。WebKit 是 **LGPL-2.1 / BSD**;该补丁 是 WebKit 源码的衍生作品,并继承这些条款。在公开之前,请为 原始代码选择一个许可证 —— 请参阅 [`LICENSING.md`]()。
标签:AI工具, Emscripten, MITM代理, WebAssembly, WebKit, 前端开发工具, 数据可视化, 浏览器引擎, 跨端渲染