简介
OxideTerm 是一个本地优先的 SSH 工作区,不只是一个终端。打开一次远程节点后,你可以在同一处围绕它使用 Shell、SFTP、端口转发、trzsz 传输、轻量编辑、本地 Shell 和 BYOK 优先的 OxideSens AI。
OxideTerm 基于 Tauri 2.0(Rust 后端)和 React 19(TypeScript 前端)构建,提供 25–40 MB 的轻量原生二进制,并坚持 零 Electron、零 OpenSSL、零遥测、核心应用零订阅 和 纯 Rust SSH。
OxideTerm 不是云端 AI 平台、托管 Agent 服务、泛远程协议工具箱,也不以终端渲染性能跑分为主要卖点。许多现代终端正在围绕本地 Shell、AI 面板或云端 Agent 平台演进;OxideTerm 专注的是本地优先的 SSH 工作区。
为什么选择 OxideTerm?
Section titled “为什么选择 OxideTerm?”| 痛点 | OxideTerm 的回答 |
|---|---|
| SSH 工作区,而不只是 Shell | 远程节点工作区:一个节点下聚合终端、SFTP、端口转发、trzsz、轻量 IDE、监控和 AI 上下文 |
| 你仍然需要本地 Shell | 集成本地 Shell:zsh/bash/fish/pwsh/WSL2 与 SSH 会话并列,本地和远程任务共用同一界面 |
| 重连 = 丢失一切 | 优雅期重连:先探测旧连接 30 秒再杀掉它;如果 TCP 流恢复,vim/htop/yazi 可以继续幸存 |
| 远程编辑总要 VS Code Remote | 轻量 IDE:通过 SFTP 使用 CodeMirror 6,支持 24 种语言,Linux 上可选约 1 MB 远程 Agent |
| SSH 连接不能复用 | 连接复用:终端、SFTP、端口转发和 IDE 共享同一个引用计数 SSH 连接 |
| SSH 库依赖 OpenSSL | russh 0.59:纯 Rust SSH,基于 ring,零 C 依赖 |
| 100+ MB Electron 应用 | Tauri 2.0:Rust 原生后端,系统 WebView,25–40 MB 二进制 |
| 不想要遥测或应用订阅 | 零追踪,核心 SSH 工作流零应用订阅:SSH/SFTP/端口转发/本地 Shell 不需要 OxideTerm 账号或订阅;云同步通过插件按需启用 |
| 想要 AI,但不想绑定平台账号 | BYOK 优先的 OxideSens:target-first 工作区 AI,把保存连接、活动 SSH、终端缓冲区、SFTP 路径、设置和知识库都当成可操作目标 |
OxideTerm 使用双平面架构,将低延迟终端 I/O 与管理命令分离:
┌─────────────────────────────────────┐│ Frontend (React 19) ││ xterm.js 6 (WebGL) + Zustand │└──────────┬──────────────┬───────────┘ │ Tauri IPC │ WebSocket (binary) │ (JSON) │ per-session port┌──────────▼──────────────▼───────────┐│ Backend (Rust) ││ NodeRouter → SshConnectionRegistry ││ Wire Protocol v1 ││ [Type:1][Length:4][Payload:n] │└─────────────────────────────────────┘| 平面 | 传输 | 用途 |
|---|---|---|
| 数据平面 | WebSocket(二进制) | 终端 I/O:Type-Length-Payload 帧,热路径不走 JSON/Base64 |
| 控制平面 | Tauri IPC(JSON) | 连接、SFTP、端口转发、配置、AI 聊天等管理操作 |
每个 SSH 会话都会获得独立的 WebSocket 端口,并在第一帧使用一次性限时 token 认证。前端用稳定节点标识访问远程资源;后端在背后解析实时连接状态,因此重连不会让 SFTP、IDE 或端口转发消费者失效。
| 层级 | 技术 | 说明 |
|---|---|---|
| 框架 | Tauri 2.0 | 原生应用,25–40 MB |
| 运行时 | Tokio + DashMap | 异步后端与并发 registry |
| SSH | russh 0.59 (ring) | 纯 Rust,零 OpenSSL,支持 SSH Agent |
| 本地 PTY | portable-pty | Windows ConPTY,本地 zsh/bash/fish/pwsh/WSL2 工作流 |
| 前端 | React 19 + TypeScript | Vite、Tailwind CSS |
| 状态管理 | Zustand | 终端、SSH、SFTP、插件、AI、设置等专用 store |
| 终端 | xterm.js 6 + WebGL/Canvas | 自适应渲染,软件 renderer 自动回退 |
| 编辑器 | CodeMirror 6 | 轻量远程编辑 |
| 加密 | ChaCha20-Poly1305 + Argon2id | .oxide 导出加密和本地配置密封 |
| 存储 | redb | 本地嵌入式 KV 存储 |
| i18n | i18next | 11 种 UI 语言 |
| 插件 | ESM Runtime | 官方 Cloud Sync、Telnet Client 和运行时扩展 API |
| CLI | JSON-RPC 2.0 | Unix Socket / Named Pipe 伴侣工具 |
| 分类 | 功能 |
|---|---|
| 终端 | 本地 PTY、SSH 远程、分屏、广播输入、会话录制/回放、自适应渲染、命令面板、禅模式、主题与自定义编辑器 |
| SSH 与认证 | 连接池、ProxyJump 拓扑、优雅期重连、Agent Forwarding、密码/密钥/证书/SSH Agent/直连 keyboard-interactive、Known Hosts TOFU |
| SFTP | 双面板浏览、拖放、智能预览、传输队列、书签、压缩包提取、目录传输控制 |
| IDE 模式 | CodeMirror 6 编辑、文件树 + Git 状态、多标签、冲突检测、可选远程 Agent |
| 端口转发 | 本地 (-L)、远程 (-R)、动态 SOCKS5 (-D),重连后自动恢复,状态与进程可见 |
| AI (OxideSens) | Target-first 的 BYOK 助手。它把保存连接、活动 SSH、终端缓冲区、SFTP 路径、设置和知识库看作工作区目标;可诊断远程输出、运行已批准命令、检查文件并解释失败,无需 OxideTerm 账号 |
| 插件 | 运行时 ESM 加载、PluginContext API、侧边栏/状态栏/标签页贡献、官方可选工作流 |
| 安全 | OS 钥匙串、本地配置静态加密、.oxide 导出加密、macOS Touch ID 门控、主机密钥 TOFU、敏感内存清零 |
| 国际化 | 11 种语言:EN、简体中文、繁體中文、日本語、한국어、FR、DE、ES、IT、PT-BR、VI |
SSH 连接池
Section titled “SSH 连接池”OxideTerm 使用引用计数 SSH 连接 registry:
- 一个连接,多种消费者:终端、SFTP、端口转发和 IDE 共享同一个物理 SSH 连接。
- 运行态状态机:
connecting → active → idle → link_down → reconnecting。 - 生命周期管理:可配置空闲超时、keepalive、link-down 检测和恢复。
- 级联传播:跳板机失败会一致地标记下游节点和 UI surface。
本地优先边界
Section titled “本地优先边界”OxideTerm 的核心 SSH 工作流不需要 OxideTerm 账号或订阅:
- SSH、SFTP、端口转发、本地 Shell、保存连接和设置都在本地工作。
- 凭据和 API Key 存在系统钥匙串。
- AI 是 BYOK:provider 费用由你选择的 provider 决定,不是 OxideTerm 应用订阅。
- Cloud Sync 是可选官方插件,不是使用工作区的前置条件。