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, 可视化界面, 命令行界面, 开发工具, 浏览器, 终端工具, 通知系统