牛马论坛查看原帖 →

[开源]OxideTerm: Rust+GPUI,让终端飞起来!

Success 4 阅读 3 回复
大家好,我是 OxideTerm 的作者。https://github.com/AnalyseDeCircuit/oxideterm
7 月底我在这里发过一帖,介绍了将 OxideTerm 从 WebView 迁移到 Rust + GPUI 的过程。我也希望借鉴 WindTerm 等知名 SSH 客户端和终端的一些好用设计,继续打磨这个免费开源、功能丰富( SSH ,Mosh ,Serial ,Telnet ,RDP ,VNC ,BLE 等)的原生 SSH 客户端。
原生版持续迭代了近四个月,兼容性和日常交互一直在完善,目前已经比较稳定了。从当时的 2.0.11 到前几天发布的 2.3.1 ,我们还花了不少精力打磨终端的基本功:吞吐、绘制和历史存储,希望持续追赶 WindTerm 、Ghostty 、Alacritty 等成熟终端的表现。
[img]https://analysedecircuit.github.io/oxideterm-media/screenshots/2.3.1/workspace-docker-framed.png[/img]
既然说要让终端飞起来,那就拿实际输出比划比划。
[size=5]刷日志的时候,让终端速度跟上[/size]

跑构建、看大量诊断信息时,数据已经到了本机,如果终端却还在慢慢处理,眼前的内容就会落后;想滚动回看、切换会话,界面线程又忙着解析输出。我们想减少的,就是终端自己带来的这部分等待。
下面是 8 月早期发布构建与现在 2.3.1 的吞吐测试记录对比。每类负载输出 [b]16 MiB[/b],预热一次,测量三次取中位数,具体测试方法在仓库里。
[img]https://analysedecircuit.github.io/oxideterm-media/benchmarks/2.3.1/throughput.png[/img]
[b]其实这背后没有什么黑魔法[/b],就是反复测试、找瓶颈:把 SSH 终端解析放到后台线程,批量处理文本和网格写入,减少重复扫描与内存复制,绘制时复用没有变化的文字排版。大量输出的时候,少做一点重复工作,就能给界面操作多留一些余地。
[size=5]日志想多留一点?内存就要省着用![/size]

上次去掉 WebView ,这次则深入到了历史存储。像 xterm.js 的缓冲区,内容和属性逐字符格保存,整行同色也仍然逐格保留属性。我们则把历史文本和样式分开紧凑保存,让相邻的同样式文字共享记录。
在 10 月这轮分阶段存储改造中,保留 20,000 行历史、400 列,另含 40 行屏幕,伪随机 ASCII 满行时,终端与解析器的保留堆从 196.47 MB 降到 15.50 MB ,[b]减少 92.1%。[/b]
[img]https://analysedecircuit.github.io/oxideterm-media/benchmarks/2.3.1/history-memory.png[/img]
这是我们自己的终端内核改造前后的结果,完整记录里有具体条件。
[b]落到日常使用,就是多留些日志、多挂几个会话时,少挤占浏览器、IDE 和容器的内存。赶上这轮内存涨价,终端能省一些,肯定是个好事情。[/b]
[size=5]新增功能与改进[/size]

我们在这三四个月内也更新了很多别的功能,这里仅仅挑出来一些和大家分享:
[list]
[*][b]WindTerm 用户熟悉的本地语义着色[/b]:远端输出没带颜色,也能初步识别一些内容,轻松辨别数字、unix 权限等。
[*][b]类 WindTerm 的 Free Type Mode[/b]:用鼠标定位和选择当前命令,支持复制、剪切和拖动文字,改长命令不用一直按方向键。
[*][b]SFTP 侧边栏与拖拽上传[/b]:侧边栏可以跟随活动 SSH 主机,也可以固定。把本地文件拖进 SSH 终端,就能上传到它的当前目录。
[*][b]向外部 AI 开放的 MCP 接口[/b]:让 Codex 等常用 AI 客户端,经授权使用连接、终端、文件和主机工具,少一点复制粘贴,权限随时可撤销。
[*][b]壁纸功能大拓展[/b]:图片、GIF 、视频和粒子效果都支持,模糊、透明度和阅读遮罩可以调整,还能开启输入时暂停动效,简约和华丽随你选择。
[*][b]最多 16 窗格混合工作区[/b]:终端、SFTP 、IDE 、设置乃至插件页面都能混排,本机和不同服务器自由组合,拖拽布局不用重连。
[*][b]原生插件系统[/b]:通过应用内市场,按需安装语言高亮、RDP / VNC / Mosh 等扩展,插件可以独立更新。
[*]X11 转发、BLE 连接模式、Kerberos 认证方式、审计系统、个人运维知识库(支持 Markdown 编辑和预览)……
[/list]比如下面这样,把 SSH 、本地终端、笔记和 SFTP 放进同一个标签页:
[img]https://analysedecircuit.github.io/oxideterm-media/screenshots/2.3.1/mixed-workspace-framed.png[/img]
[size=5]写在最后[/size]

[b]玉不琢不成器,感谢这几个月以来热心帮助的朋友们。[/b]OxideTerm 目前依然是 GPL-3.0 的开源自由软件,免费,没有账号和订阅门槛,也不收集遥测数据。欢迎试试现在的 2.3.1 ,之前用过早期版本的朋友也欢迎回来看看。觉得顺手可以点个 Star ,有问题或建议,欢迎提 Issue 、PR ,希望它能越来越实用。最近也开了个交流群,欢迎来聊使用体验和改进建议。
[b]感谢大家![/b]


⚠️内容来自互联网,如有侵权请点击反馈!侵权投诉
我也在用 GPUI 重写,不过主线 Flutter 还要继续维护。终端仿真前段时间从 alacritty_terminal 切到 ghostty 了,现在是能切换。
@Oktfolio 我也深有体会,alacritty_terminal 现在看来确实还是差了些,libghostty 会更好。
一直在用,还不错

阅读全文与全部回复 →