一个精简、可独立运行的浏览器终端。Rust 服务端管理本地 PTY,浏览器通过 WebSocket 连接 Shell,并保留有限的终端历史。前端资源嵌入单个二进制,无需额外静态文件服务。
不是把终端搬进浏览器那么简单 —— 多标签、分屏、断线重连、历史搜索与文件操作,围绕真实工作流设计。
最多 8 个独立终端标签页,支持新建、切换与关闭。桌面端可将任意两个终端合并为双面板视图,同时存在多个分屏组合;分隔条可拖动、双击均分、一键交换。
每个会话由独立的 session-host 子进程托管:PTY 与滚动历史不随服务进程重启而丢失。断线后自动重连并补回断线期间的内容,服务重启后仍按标签恢复运行中的 shell。
搜索当前终端已加载的屏幕与滚动历史。浏览器默认保留 20000 行(可在设置中调整,移动端自动降为 10000 行),服务端每会话默认保留 8MB 输出。
集中管理常用 SSH 主机:分组、默认打开路径与可选密码保存。密码使用由访问 Token 派生密钥加密存储,旧版本明文密码会在读取时自动迁移。
桌面端与移动端均可使用虚拟键盘,并支持可编辑的自定义命令按钮;在键盘上左右滑动即可切换默认 / 自定义键盘,触屏操作也能流畅完成日常运维。
本地与 SSH 远端文件浏览:树形目录、创建、上传、下载、重命名、删除与图片预览;Git 仓库文件夹自动显示 git 标记。编辑器基于 CodeMirror 6,支持多标签、行内增改标记与冲突检测。
在工具栏查看当前在线的浏览器客户端:浏览器类型、地址、连接时间与所在终端标签,并可踢出其他客户端。被踢出的客户端断开后不会自动重连,当前客户端不能被自己踢出。
浏览器启动时自动检查更新清单,发现新版本后在工具栏显示 NEW 按钮,并按版本展示当前版本之后的全部可用改动。PM2 托管的部署可直接一键自动升级。
前端资源通过 rust-embed 嵌入二进制,浏览器原生 ES modules 直接由静态资源服务提供,无需前端打包步骤;终端会话由 session-host 子进程托管,与服务进程生命周期解耦。
需要 Rust stable 与一个可用的本地 Shell。默认监听 127.0.0.1:11083,浏览器打开后输入配置中的 Token 完成认证。
必须使用高强度 Token,并通过 HTTPS 对外提供服务。SSH 密码使用由 Token 派生密钥加密保存,旧版本明文密码读取时自动迁移;Token 泄露仍意味着密码可被解密。
自定义命令按钮中的命令以当前用户权限执行,只配置可信命令。所有已认证客户端共享终端输入、输出与标签列表,运行时目录权限 0700、会话 socket 与元数据 0600。
终端会话由独立的 session-host 子进程托管,PTY 与滚动历史不随服务进程重启而丢失;服务重启后自动恢复仍存活的会话,关闭或失效的会话文件会被清理。
自动升级前校验 sha256 与大小,原子替换二进制并备份为 .prev,pm2 restart 后生效;手动回滚只需把备份移回再启动。