Skip to content

Introduction

OxideTerm is a cross-platform SSH terminal client and local terminal emulator that combines native performance with a modern interface. Built with Tauri 2.0 (Rust backend) and React 19 (TypeScript frontend), it delivers a lightweight 25–40 MB native binary with zero Electron overhead.

Pain PointOxideTerm’s Answer
SSH clients that can’t do local shellsHybrid engine: local PTY (zsh/bash/fish/pwsh/WSL2) + remote SSH in one window
Reconnect = lose everythingGrace Period reconnect: probes old connection 30s before killing it — your vim/htop/yazi survive
Remote file editing needs VS Code RemoteBuilt-in IDE: CodeMirror 6 over SFTP with 30+ languages, optional ~1 MB remote agent on Linux
No SSH connection reuseMultiplexing: terminal, SFTP, forwards, IDE share one SSH connection via reference-counted pool
SSH libraries depend on OpenSSLrussh 0.54: pure Rust SSH compiled against ring — zero C dependencies
100+ MB Electron appsTauri 2.0: native Rust backend, 25–40 MB binary
AI locked to one providerOxideSens: 40+ tools, MCP protocol, RAG knowledge base — works with OpenAI/Ollama/DeepSeek/any compatible API

OxideTerm uses a dual-plane architecture that separates latency-critical terminal I/O from management commands:

┌─────────────────────────────────────┐
│ Frontend (React 19) │
│ xterm.js 6 (WebGL) + 18 stores │
└──────────┬──────────────┬───────────┘
│ Tauri IPC │ WebSocket (binary)
│ (JSON) │ per-session port
┌──────────▼──────────────▼───────────┐
│ Backend (Rust) │
│ NodeRouter → SshConnectionRegistry │
│ Wire Protocol v1 │
│ [Type:1][Length:4][Payload:n] │
└─────────────────────────────────────┘
PlaneTransportPurpose
Data PlaneWebSocket (binary)Terminal I/O — Type-Length-Payload framing, no JSON/Base64, zero overhead in the hot path
Control PlaneTauri IPC (JSON)Management: connections, SFTP, port forwarding, config, AI chat

Each SSH session gets its own WebSocket port with single-use, time-limited token authentication on the first frame. The frontend addresses everything by nodeId — the backend NodeRouter resolves it atomically, so SSH reconnect (which changes the underlying connectionId) doesn’t break SFTP, IDE, or port forwards.

LayerTechnologyDetails
FrameworkTauri 2.0Native binary, 25–40 MB
RuntimeTokio + DashMap 6Full async, lock-free concurrent maps
SSHrussh 0.54 (ring)Pure Rust, zero C deps, SSH Agent
Local PTYportable-pty 0.8Feature-gated, ConPTY on Windows
FrontendReact 19.1 + TypeScript 5.8Vite 7, Tailwind CSS 4
StateZustand 518 specialized stores
Terminalxterm.js 6 + WebGLGPU-accelerated, 60 fps+
EditorCodeMirror 630+ language modes
EncryptionChaCha20-Poly1305 + Argon2idAEAD + memory-hard KDF (256 MB)
Storageredb 2.1Embedded KV store
i18ni18next 2511 languages × 22 namespaces
PluginsESM RuntimeFrozen PluginContext + 24 UI Kit
CLIJSON-RPC 2.0Unix Socket / Named Pipe
CategoryFeatures
TerminalLocal PTY (zsh/bash/fish/pwsh/WSL2), SSH remote, split panes, broadcast input, session recording/playback (asciicast v2), adaptive rendering (120 Hz+ Boost / 60 Hz Normal / 1–15 Hz Idle), command palette (⌘K), zen mode, 30+ themes + custom editor
SSH & AuthConnection pooling & multiplexing, ProxyJump (unlimited hops) with topology graph, auto-reconnect with Grace Period. Auth: password, SSH key (RSA/Ed25519/ECDSA), SSH Agent, certificates, keyboard-interactive 2FA, Known Hosts TOFU
SFTPDual-pane browser, drag-and-drop, smart preview (images/video/audio/code/PDF/hex/fonts), transfer queue with progress & ETA, bookmarks, archive extraction
IDE ModeCodeMirror 6 with 30+ languages, file tree + Git status, multi-tab with LRU management, conflict resolution (mtime locking), integrated terminal. Optional remote agent (10+ architectures)
Port ForwardingLocal (-L), Remote (-R), Dynamic SOCKS5 (-D), lock-free message-passing I/O, auto-restore on reconnect, death reporting, smart remote port detection
AI (OxideSens)Inline panel (⌘I) + sidebar chat, terminal buffer capture (single/all panes), multi-source context (IDE/SFTP/Git), 40+ autonomous tools, MCP server integration, RAG knowledge base (BM25 + vector hybrid search), streaming SSE
PluginsRuntime ESM loading, 18 API namespaces, 24 UI Kit components, frozen API + Proxy ACL, circuit breaker, auto-disable on errors
CLIoxt companion: JSON-RPC 2.0 over Unix Socket / Named Pipe
Security.oxide encrypted export (ChaCha20-Poly1305 + Argon2id 256 MB), OS keychain, Touch ID (macOS), host key TOFU, zeroize memory clearing
i18n11 languages: EN, 简体中文, 繁體中文, 日本語, 한국어, FR, DE, ES, IT, PT-BR, VI

OxideTerm uses a reference-counted SshConnectionRegistry backed by DashMap for lock-free concurrent access:

  • One connection, many consumers — terminal, SFTP, port forwards, and IDE share a single physical SSH connection — no redundant TCP handshakes
  • State machine per connectionconnecting → active → idle → link_down → reconnecting
  • Lifecycle management — configurable idle timeout (5m / 15m / 30m / 1h / never), 15s keepalive interval, heartbeat failure detection
  • Cascade propagation — jump host failure → all downstream nodes automatically marked link_down with status sync

The frontend manages state through 18 specialized Zustand stores:

StoreResponsibility
sessionTreeStoreUser intent (session tree structure, connection flow)
appStoreConnection facts (connections Map, backend state mirror)
localTerminalStoreLocal PTY lifecycle
ideStoreIDE mode state
reconnectOrchestratorStoreAuto-reconnect pipeline orchestration
transferStoreSFTP transfer queue
pluginStorePlugin runtime state
profilerStoreResource profiler
aiChatStoreOxideSens AI chat state
agentStoreRemote Agent management
ragStoreRAG knowledge search state
settingsStoreApp settings
broadcastStoreBroadcast input to multiple terminal panes
commandPaletteStoreCommand palette state
eventLogStoreConnection lifecycle event log
launcherStorePlatform application launcher
recordingStoreSession recording & playback
updateStoreAuto-update lifecycle