zenbu-labs/terminal-browser
GitHub: zenbu-labs/terminal-browser
这是一个让真实 Chromium 浏览器直接运行在终端内部的工具,使开发者无需离开终端即可浏览网页和预览网站。
Stars: 828 | Forks: 36
# terminal-browser
一个在您的终端中运行的真实浏览器
### 安装:
```
curl -fsSl https://terminal-browser.sh/install | bash
```
### 用法
```
terminal-browser # launches the browser
terminal-browser open # opens the browser at a url
terminal-browser --split right # opens the browser in a split pane to the right
terminal-browser ls # lists open browsers
terminal-browser action # an agent-browser compatible cli for interacting with open terminal-browsers
```
### 使用场景:
- 您可以将编程助手和网站放在同一个终端标签页中
- 您的助手拥有与已打开的 terminal-browser 进行交互的完全权限,这使得您的助手具备了使用网络的能力
- 您可以让助手制作 HTML 计划,然后在 terminal-browser 中打开它们,它会自动在助手旁边的分屏面板中打开
- terminal-browser 支持 SSH 运行,这让您可以轻松预览在远程机器上运行的网站
### 它是如何工作的?
支持 kitty graphics protocol 的终端(包括 ghostty、kitty、cmux、vscode 等等)允许在终端中运行的程序在您的终端内显示像素。我们利用这一功能来显示由 chromium 生成的像素。
我们使用 [electron 的离屏渲染 API](https://www.electronjs.org/docs/latest/tutorial/offscreen-rendering) 直接从 GPU 读取由 chromium 生成的像素。这使得 terminal-browser 能够流畅渲染而不掉帧。
在浏览器引擎启动并在终端中显示像素后,它需要能够读取用户输入才能让网站真正运作起来。terminal-browser 会监听来自终端的鼠标点击、鼠标位置和键盘事件,然后根据这些数据向 chromium 发送模拟事件。对于无法从终端获取的用户输入事件,我们使用一个在后台运行的 swift 应用直接从操作系统读取以监听输入事件(无感知地)。正是这一点使得 terminal-browser 能够实现平滑滚动,并监听触控板事件(具有无限画布的网站在 terminal-browser 中运行得非常好!)
浏览器的外部 UI 使用基于 rust 构建的图形引擎实现。实际的 UI 是在 react 中使用自定义的 react renderer 定义的,这使我们能够使用 typescript 构建浏览器的 UI。外部浏览器的 UI 和浏览器内容本身都被绘制到 rust 引擎内的同一个共享画布上,这使我们能够将 UI 叠加在浏览器之上。
### 路线图
- Linux 支持([PR](https://github.com/zenbu-labs/terminal-browser/pull/4))
- Chrome 扩展
- 设计模式
### 贡献
- PR **描述** 必须由人类撰写并解释清楚,否则我们将关闭它们
- 提交 PR 时,必须在描述中明确定义动机
- 尽量减小 PR 的体积,以获得被合并的最佳机会
要搭建 terminal-browser 的本地开发环境,推荐的方式是求助于编程助手。
### 致谢
- [kitty](https://github.com/kovidgoyal/kitty) 项目,感谢他们开发了 kitty graphics protocol
- [awrit](https://github.com/chase/awrit) - 第一次在终端中嵌入 chromium 的尝试
标签:Chromium, Electron, GUI, SOC Prime, 可视化界面, 命令行界面, 开发工具, 浏览器, 终端工具, 通知系统