Vexo 是什么
Vexo 是一个浏览器。它自己解析 HTML、算 CSS、排版、把页面画到屏幕上,不调用系统自带的网页控件——Linux 上没有 WebKitGTK,Windows 上没有 WebView2,macOS 上没有 WKWebView。整个渲染链路是自己的代码。
Vexo 是一个浏览器。它自己解析 HTML、算 CSS、排版、把页面画到屏幕上,不调用系统自带的网页控件——Linux 上没有 WebKitGTK,Windows 上没有 WebView2,macOS 上没有 WKWebView。整个渲染链路是自己的代码。
它由两块拼起来
画页面的那部分叫 YSU,是渲染内核,用 Rust 写。给它一段 HTML 和一个地址,它吐出这块区域的像素。解析、样式、布局、绘制、光栅化、取网络资源,都在它里面。
外壳那部分才是 Vexo 本体,用 C++17 和 Qt6 写。标签页、工具栏、地址栏、文件对话框、状态栏——凡是浏览器自带而不属于网页的东西,都归 Qt 管。
两块之间只隔一层 C ABI。外壳拿不到 GPU 设备,也拿不到 DOM,它每次只收到一张 RGBA 图。
这么切的好处很实际:网页里的东西怎么变,都影响不到 Qt 那侧的代码;换一套外壳(换成 GTK、换成命令行、换成嵌入式)也不用动内核。
现在能做什么
打开一个网址,它去取回来,解析、排版、画出来。点链接会导航,点不动的地方不变手型。地址栏、前进后退、刷新、回起始页这几个按钮都在。多个标签页可以开、关、切换、拖动重排,每个标签页有自己的一份内核实例和一份历史。缩放改的是布局视口宽度,页面会重排,不是把画好的画面拉大。
本地文件也能开。命令行给一个 .html 路径、把文件拖进窗口、或者工具栏上点「打开文件」走系统对话框,三种都通。页面里 <link rel="stylesheet"> 引的外部样式表会去取,取回一份应用一份,页面随样式到达逐步重排。
现在还不能做什么
网页里的 JavaScript 不执行。<script> 会被解析进 DOM,但没人跑它。引擎 JSE 的解析部分完成了,执行部分还没动。
图片不显示。HTML 里的 <img> 不占位,CSS 的 background-image 不生效。
position: absolute 与 fixed 解析进了计算样式,布局阶段仍按常规流处理。浮动、z-index、transform 同理。
没有书签、没有下载管理、没有设置界面、没有开发者工具。
细到每一条特性,见支持范围;表现为「看着该动却没动」的那些,见已知限制。
为什么值得看
内核里没有系统网页控件的痕迹。HTML 词法、树构建、CSS 选择器匹配、层叠、块级与行内布局、弹性布局、表格、文本断行、显示列表、wgpu 管线、字形图集,全是自己写的一层一层。这份代码里能看到一个浏览器从字节到像素中间到底有几道工序。
它也不是个玩具:HTML 树构建跟着 WHATWG 规范走,用 html5lib 的测试数据回归;字符引用是生成的完整表而不是常用符号的截断;圆角、裁剪、滚动都有正经实现。
许可
专有软件。许可条款见仓库根的 LICENSE。