AO

analysedecircuit/oxideterm

Developer tools
1.2K stars Quality 36 Trend 36

AI-Powered SSH Client and Remote Operations Workspace SSH, Telnet, Serial, RDP/VNC, SFTP, port forwarding, and lightweight editing in one native workspace. GPU-rendered. Free. No account needed.

Overview

AI-Powered SSH Client and Remote Operations Workspace SSH, Telnet, Serial, RDP/VNC, SFTP, port forwarding, and lightweight editing in one native workspace. GPU-rendered. Free. No account needed.

README

⚡ OxideTerm

AI-Powered SSH Client and Remote Operations Workspace

SSH, Telnet, Serial, RDP/VNC, SFTP, port forwarding, and lightweight editing in one native workspace.

GPU-rendered. Free. No account needed.

No Electron. No bundled WebView. No telemetry. No subscription. BYOK-first. Pure-Rust SSH without OpenSSL/libssh2.

Open-source, local-first, and GPU-rendered with GPUI.

English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Português | Tiếng Việt


What OxideTerm Is

OxideTerm is an open-source, local-first workspace for connecting to servers and working across terminals, files, forwarding, host tools, and remote desktops.

What you can do:

  • Manage SSH, Telnet, Serial, RDP/VNC, SFTP, port forwards, local shells, and lightweight editing in one native workspace
  • Keep remote work alive through network hiccups with Grace Period reconnect
  • Ask OxideSens AI to inspect live sessions and perform approved workspace actions through your own AI provider
  • Load bounded Agent Skills and use the advanced terminal command sender for scheduled, repeatable, multi-target input

Your connections and operational data stay under your control. OxideTerm requires no account, uses your own AI provider when OxideSens is enabled, and keeps the desktop experience free of Electron and bundled browser runtimes.


Why OxideTerm?

If you care about… OxideTerm gives you…
One remote node, many tools Terminal, SFTP, port forwarding, RDP/VNC, trzsz, native IDE, monitoring, and OxideSens AI stay attached to the same workspace
A desktop app without Electron or a bundled WebView GPUI draws the interface directly on a GPU surface, without shipping a browser runtime
Local-first operations workflows SSH, Telnet, SFTP, forwarding, RDP/VNC, local shell, serial terminals, and config work without signup
BYOK OxideSens AI instead of platform credits OxideSens uses your OpenAI/Anthropic/Gemini/Ollama/OpenAI-compatible endpoint with MCP, RAG, provider-aware reasoning controls, and approved workspace actions
Reconnect stability Grace Period probes the old connection for 30s before replacing it, so TUI apps can survive short network drops
Pure-Rust SSH and credential safety The SSH stack uses russh + ring without OpenSSL/libssh2; stored credentials use the OS keychain, and .oxide bundles use ChaCha20-Poly1305 + Argon2id

Screenshots

The screenshots below show the OxideTerm workspace across terminal, file, editing, and forwarding workflows.


Built for Remote Operations

OxideTerm keeps terminal rendering, connection state, reconnect orchestration, files, forwarding, automation, and AI context inside one Rust application. The result is a workspace in which tools share the same server identity and session lifecycle instead of behaving like disconnected utilities.

Aspect Bundled browser approach OxideTerm
Rendering Browser engine and web layout GPUI on a GPU surface
Terminal data flow WebSocket → JS event loop → xterm.js Rust input → TerminalState mutation → GPUI render
Connection lifecycle Split across frontend and backend layers One in-process connection and reconnect pipeline
AI context Copied through an application bridge Built from the active workspace with user approval
Plugin runtime Browser scripting environment Manifest-only, capability-scoped WASM, and trusted process runtimes
CLI Requires the desktop app running Standalone binary, direct crate linkage
Runtime boundary Desktop wrapper plus browser runtime Native process with no bundled browser runtime

Feature Overview

Category Features
Terminal & Connections Local shells, SSH, Telnet, serial, split panes, Free Type Mode, shell integration, command marks, recording, trzsz transfers, terminal graphics, advanced multi-target command sending, multi-hop routes, host-key verification, Agent forwarding, 2FA, and Grace Period reconnect
Files & Remote Editing SFTP browsing, transfer queues, speed limits, progress and ETA, bookmarks, safe writes, local file management, remote project trees, multi-tab editing, conflict handling, and workspace restore
Forwarding & Networking Local, remote, and dynamic SOCKS5 forwarding, saved rules, reconnect-aware restore, remote port detection, connection topology, and ad-hoc socket debugging
Host Operations & Remote Desktop Host monitoring, processes, services, logs, ports, tasks, disks, packages, containers, tmux, built-in RDP and VNC, clipboard, input, reconnect, and viewport-aware sizing
OxideSens & Automation BYOK providers, MCP, local RAG, Agent Skills, approved workspace actions, command policy, chat history, encrypted cloud sync, portable .oxide bundles, and a standalone CLI for automation and diagnostics
Extensions & Personalization Manifest-only, capability-scoped WASM, and process plugins, custom tabs and settings, Quick Commands, themes, background images, configurable shortcuts, and 11 interface languages


Under the Hood

OxideTerm keeps terminal, SSH, Telnet, RDP, VNC, SFTP, forwarding, editing, AI, plugins, and CLI in one Rust architecture. The implementation notes below are for readers who want the engineering details.


Run From Source

Requirements: Rust toolchain (Edition 2024), desktop environment capable of running GPUI.

# Run the app
cargo run

# If the renderer fails on your machine, try the compatibility profile
OXIDETERM_RENDER_PROFILE=compatibility cargo run
# Build the headless CLI companion
./scripts/build/build-cli.sh

# Build the optional Linux remote agent
./scripts/build/build-agent.sh

CLI artifacts land in crates/oxideterm-gpui-app/resources/cli-bin//oxideterm.


CLI

The headless oxideterm CLI works without launching the app — useful for automation, CI, and diagnostics.

cargo run -p oxideterm-cli -- doctor --strict
cargo run -p oxideterm-cli -- settings validate --strict --json
cargo run -p oxideterm-cli -- connections search prod
cargo run -p oxideterm-cli -- forwards list --format json
cargo run -p oxideterm-cli -- cloud-sync push --dry-run --json
cargo run -p oxideterm-cli -- oxide export ./profile.oxide --connection prod --password-stdin
cargo run -p oxideterm-cli -- report --bundle ./oxideterm-report.zip
cargo run -p oxideterm-cli -- completion install zsh --force

# Path/profile isolation for CI or fixture testing
cargo run -p oxideterm-cli -- --config-dir ./fixture-config doctor --strict

Tech Stack

Layer Technology Notes
UI framework GPUI (Zed) GPU-backed immediate mode, pure Rust
Runtime Tokio + DashMap Full async, lock-free concurrent maps
SSH russh (ring) No OpenSSL/libssh2 in the SSH stack; SSH Agent
Local PTY portable-pty Feature-gated, ConPTY on Windows
Terminal emulation alacritty_terminal VT100–VT500, Sixel, Kitty graphics
Editor tree-sitter (syntax), custom buffer Multi-language, SFTP-backed
Encryption ChaCha20-Poly1305 + Argon2id AEAD + memory-hard KDF (256 MB)
Plugin runtime Wasmtime/WASI, sidecar WASM, and process paths Controlled WASM host calls; process plugins are local and not OS-sandboxed
AI streaming SSE (OpenAI/Anthropic/Gemini) In-process, no IPC boundary
RAG BM25 + HNSW vector index CJK bigram tokenizer, RRF fusion
i18n oxideterm-i18n (custom) Built-in loader, 11 shipped locales

Security

Concern Implementation
Stored credentials OS keychain (macOS Keychain / Windows Credential Manager / libsecret)
Secret memory Secret-bearing Rust types and temporary buffers use zeroize / Zeroizing at supported ownership boundaries
Diagnostics Support output favors structured metadata and redacted hints over secret-bearing payloads
AI context Provider-bound messages pass through credential-pattern redaction; workspace context and actions remain user-controlled
.oxide export ChaCha20-Poly1305 + Argon2id (256 MB memory, 4 iterations)
CLI writes Dry-run plans, --yes guards, rollback backups for state-changing commands
Host keys TOFU with ~/.ssh/known_hosts, rejects unexpected changes
Plugin boundary Manifest-only, controlled WASM host API, or trusted local process

Lawful Use Notice

OxideTerm is licensed under GPL-3.0-only without additional license restrictions. When using it, access only systems, networks, and devices that you own or are explicitly authorized to access, and comply with applicable law. Do not use OxideTerm for unauthorized access, service disruption, or bypassing access controls.


Contributing

Contributions are welcome across Rust code, documentation, translations, plugins, testing, and issue reproduction. Open an issue to discuss larger changes or well-scoped fixes.

Bug reports are most useful with a redacted CLI bundle:

cargo run -p oxideterm-cli -- report --bundle ./oxideterm-report.zip

Support and Maintenance

Reproducible bug reports and regressions with redacted diagnostics are prioritized. Feature requests are reviewed based on scope, safety, and alignment with OxideTerm’s remote-server workspace direction.

If OxideTerm helps your workflow, a GitHub star, issue reproduction, translation fix, or plugin all make the project easier to keep moving.


License

GPL-3.0-only. Detailed dependency attribution is recorded in THIRD_PARTY_NOTICES.md, with additional notices in NOTICE.


Acknowledgments

russh · GPUI · alacritty_terminal · portable-pty · wasmtime · tree-sitter

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add analysedecircuit/oxideterm