oxideterm is a free, open source frameworks & platforms project written in Rust and released under GPL-3.0. It has 1,631 GitHub stars, 130 forks and 35 open issues, and was last pushed 19 hours ago. On this registry it ranks #82 of 103 tracked projects in Frameworks & Platforms, with 5 head-to-head comparisons available.

What is oxideterm?

OxideTerm is a free, native SSH client and remote-operations workspace with a bring-your-own-key AI assistant, written in Rust for developers and sysadmins who work across local shells and remote machines.

What it is

OxideTerm is a GPU-rendered, native desktop application written in Rust that consolidates terminal access, file transfer, forwarding, editing, remote desktop, host monitoring, and an AI assistant into a single workspace per server. It supports local shells alongside SSH, Mosh, Telnet, Serial, and RDP/VNC, with SFTP, port forwarding, and a built-in editor attaching to the same node over a shared SSH connection by default. It runs on macOS, Windows, and Linux, ships no Electron or Webview, embeds no OpenSSL, and collects no telemetry.

The concrete problem it solves is tool sprawl: instead of switching between a terminal emulator, an SFTP client, a port-forwarding utility, a text editor, and a monitoring dashboard for the same host, everything attaches to one node in one app. Alongside that, it replaces manually typed command sequences with an AI layer — OxideSens — that runs on keys you supply yourself, through MCP, local RAG, Agent Skills, and tool-calling, with approved workspace actions rather than unrestricted execution.

Key capabilities

  • Native tmux -CC control mode with pane layouts and draggable dividers, plus named broadcast groups and a multi-target command sender for scheduled, repeatable input.
  • Grace Period reconnect that keeps TUI applications alive through short network drops and then restores forwards, transfers, and open editor files.
  • SFTP dual-pane manager with transfer queues that show speed limits and ETA, bookmarks, and a built-in remote editor with safe writes and conflict handling.
  • Local, remote, and dynamic SOCKS5 port forwarding with saved rules, remote port detection, and connection topology views.
  • BYOK OxideSens supporting OpenAI, Anthropic, Gemini, Ollama, and OpenAI-compatible endpoints, together with MCP, local RAG, Agent Skills, and a standalone CLI.
  • Terminal output handling for Sixel and Kitty graphics, trzsz transfers, X11 forwarding, SSH agent forwarding, 2FA/TOTP credentials, and host key checks against ~/.ssh/known_hosts.
  • Optional Notification & Audit workspace and encrypted session recordings, both disabled by default, plus encrypted cloud sync and portable .oxide bundles.

Who uses it and how

  • Developers who already keep a populated ~/.ssh/config import their existing hosts into the Session Manager and open a terminal, SFTP view, forwarding rules, and editor on the same node.
  • Administrators managing many machines use the host operations view for processes, services, logs, ports, tasks, disks, packages, containers, and tmux on the current target.
  • Operators running repeatable fleet commands use broadcast groups and the multi-target command sender instead of retyping input per session.
  • Engineers debugging remote services use dynamic SOCKS5 forwarding and ad-hoc socket debugging without leaving the workspace, and RDP/VNC for hosts needing a graphical desktop.
  • Teams that must record or audit access turn on the Notification & Audit workspace and encrypted session recordings explicitly.

Getting started

Install OxideTerm by grabbing a package from the latest release on GitHub, then open the Session Manager, create an SSH connection or import hosts from ~/.ssh/config, and optionally add your own API key or Ollama endpoint in Settings to enable OxideSens.

How it compares

The facts supplied for this entry name no comparable terminal or SSH client tools, so OxideTerm stands alone in this registry.

When to use it — and when not

It suits someone who wants a local-first, subscription-free client and is willing to supply their own AI credentials — either a hosted API key or a local Ollama endpoint — since no assistant capability is included by default. Because the project is GPL-3.0 and runs natively, there is no hosted option or self-hosted server to operate, but it does carry 35 open issues at time of writing, and its optional audit, recording, and cloud-sync features are off by default and must be configured deliberately. Someone who only needs a bare terminal emulator, or who requires a Webview-based or Electron tool, is outside its target audience.

project readme (upstream, from github) — read inline

⚡ OxideTerm

A free, native SSH client and remote operations workspace with a bring-your-own-key AI assistant.

SSH · Mosh · Telnet · Serial · RDP/VNC · SFTP · port forwarding · built-in editor, all in one GPU-rendered app. No account. No subscription. No telemetry. No Electron.

Latest release Platforms License Stars

Download · Documentation · Changelog · Report an issue

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


Quick start

  1. Install OxideTerm. Grab a package from the latest release; platform notes are in Install below.
  2. Add a server. Open the Session Manager and create an SSH connection, or import hosts from your ~/.ssh/config.
  3. Connect. Open a terminal. Host keys are checked against ~/.ssh/known_hosts.
  4. Use the rest of the workspace. Open SFTP, port forwarding, or the built-in editor on the same node. By default they share one SSH connection.
  5. Optional: turn on AI. In Settings, add your own OpenAI, Anthropic, Gemini, Ollama, or OpenAI-compatible endpoint to enable OxideSens.

For a guided tour, see the documentation.


What you get

Terminals and protocols Local shells, SSH, Mosh, Telnet, Serial, split panes, multi-hop routes, SSH agent and agent forwarding, 2FA and TOTP credentials, X11 forwarding, shell integration, command marks, configurable session logs, recording, Sixel and Kitty graphics, trzsz transfers
tmux and broadcast Native tmux -CC control mode with pane layouts and draggable dividers, named broadcast groups, and an advanced multi-target command sender for scheduled, repeatable input
Reliability Grace Period reconnect keeps TUI apps alive through short network drops, then restores forwards, transfers, and open editor files
Files and editing SFTP dual-pane manager, transfer queues with speed limits and ETA, bookmarks, a built-in remote editor with safe writes, conflict handling, and workspace restore
Networking Local, remote, and dynamic SOCKS5 forwarding, saved rules, remote port detection, connection topology, ad-hoc socket debugging
Remote desktop Built-in RDP and VNC with clipboard and input support
Host operations Monitoring for processes, services, logs, ports, tasks, disks, packages, containers, and tmux
AI and automation BYOK OxideSens, MCP, local RAG, Agent Skills, approved workspace actions, a standalone CLI
Review and audit Optional Notification & Audit workspace and encrypted session recordings (both off by default)
Sync and portability Encrypted cloud sync, portable .oxide bundles
Personalization Themes, background images, configurable shortcuts, Quick Commands, 11 interface languages

Why OxideTerm

  • Free and local-first. No account, no subscription, no telemetry. Your connections and operational data stay under your control.
  • One workspace per server. Terminal, SFTP, forwarding, RDP/VNC, editor, monitoring, and AI attach to the same node instead of behaving like disconnected utilities.
  • Native, not a browser in disguise. The interface is drawn directly on the GPU with GPUI. There is no Electron and no bundled WebView.
  • AI on your terms. OxideSens uses your own provider and key, and acts only on actions you approve.
  • Resilient connections. Grace Period reconnect probes the old connection for 30 seconds before replacing it, so TUI apps can survive short network drops.
  • Pure-Rust SSH. The SSH stack uses russh with ring, without OpenSSL or libssh2.

Memory usage

The native rewrite cut idle memory to about a quarter of the old version on macOS and about an eighth on Windows. These are the maintainer's recorded observations from the move from Tauri 1.x to native GPUI 2.0:

Platform Tauri 1.x (idle) Native 2.0 (idle) Reduction
macOS 318.7 MB 81.3 MB About 74%
Windows 182.4 MB 23.5 MB About 87%

The old version's total includes OxideTerm and its associated WebView processes. The native version no longer needs those browser processes.

Idle memory comparison with system process screenshots: Tauri 1.x versus native 2.0


Screenshots

SSH terminal with OxideSens SFTP file manager
SSH terminal with OxideSens AI SFTP dual-pane file manager with transfer queue
Built-in IDE Smart port forwarding
Built-in IDE mode Smart port forwarding with auto-detection
Watch OxideSens open a terminal from a plain-language request

OxideSens AI

OxideSens is an optional assistant that can inspect your live sessions and perform workspace actions only after you approve them.

  • Bring your own key. Works with OpenAI, Anthropic (Claude), Google Gemini, Ollama, and any OpenAI-compatible endpoint, with provider-aware reasoning controls. There are no platform credits.
  • MCP and Agent Skills. Connect MCP servers (stdio and SSE) and load bounded Agent Skills.
  • Local knowledge base (RAG). BM25 full-text search plus a vector index.
  • You control the context. You choose which workspace context and actions are approved, and command policy rules apply.
  • Credential redaction. Messages sent to a provider pass through credential-pattern redaction.
  • Keys stay in your OS keychain and are kept out of structured logs.

Plugins

OxideTerm supports three plugin paths:

Type How it runs Boundary
Manifest-only Declarative extensions, no code No executable code
WASM Wasmtime/WASI or a sidecar Controlled host calls, capability-scoped
Process An ordinary local process Trusted local code, not OS-sandboxed

Legacy Tauri (1.x) ESM plugins may be listed but are not executed by the native 2.x app. Only install process plugins from sources you trust.


Security and privacy

Topic How it works
Stored credentials OS keychain (macOS Keychain, Windows Credential Manager, libsecret)
Secrets in memory Secret-bearing types and temporary buffers use zeroize at supported ownership boundaries
Host keys Trust on first use against ~/.ssh/known_hosts; unexpected changes are rejected
Portable exports .oxide bundles use ChaCha20-Poly1305 with Argon2id (256 MB memory, 4 iterations)
AI context Credential-pattern redaction before anything reaches a provider; you approve context and actions
Session recordings Off by default; stored encrypted on your device and excluded from cloud sync; keyboard input is not captured
Audit Off by default; data stays on your device with sensitive details encrypted
CLI changes Dry-run plans, --yes guards, and rollback backups for state-changing commands
Plugins See Plugins
Telemetry None

Lawful use. OxideTerm is licensed under GPL-3.0-only without additional restrictions. Access only systems, networks, and devices 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.


Current limits

We would rather you know before installing:

  • Desktop only (macOS, Windows, Linux). There is no mobile app.
  • The project moves quickly, with frequent releases. See the changelog and open issues.
  • Auditing and session recording are opt-in, and only reflect what OxideTerm itself can observe.
  • Process plugins are not sandboxed by the OS.
  • If the renderer fails on your machine, try the compatibility profile: OXIDETERM_RENDER_PROFILE=compatibility.

For developers

Run from source

Requirements: Rust toolchain (edition 2024) and a desktop environment capable of running GPUI.

# Run the app
cargo run

# If the renderer fails on your machine
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

With Nix: nix build .#oxideterm, nix run .#oxideterm, or nix develop.

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

Command-line interface

The headless oxideterm CLI works without launching the app, which is useful for automation, CI, and diagnostics. It covers settings, connections, forwards, plugins, quick commands, secrets, portable bundles, diagnostics, reports, batch plans, backups, and cloud sync.

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 and profile isolation for CI or fixtures
cargo run -p oxideterm-cli -- --config-dir ./fixture-config doctor --strict
Architecture

The UI and the terminal/SSH backend share one Rust process; optional remote agents and platform helpers sit outside that boundary. Terminal bytes mutate TerminalState directly, and GPUI renders from that state, with no JSON, WebSocket, Base64, or xterm.js parsing step.

┌─────────────────────────────────────────────────┐
│               GPUI Render Loop                  │
│   WorkspaceApp  ·  Tab surfaces  ·  GPUI views  │
└──────────────────────┬──────────────────────────┘
                       │  in-process Arc<> / async
┌──────────────────────▼──────────────────────────┐
│             Domain Crates (Rust async)          │
│  NodeRouter → SshConnectionRegistry             │
│  TerminalState ← SSH PTY channel (russh)        │
│  SftpSession · ForwardingRuntime · IdeWorkspace │
│  Ai/ACP Entities · CloudSync · Plugin Runtimes  │
└─────────────────────────────────────────────────┘
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 → GPUI render
Connection lifecycle Split across frontend and backend One in-process connection and reconnect pipeline
AI context Copied through an application bridge Built from the active workspace with user approval
CLI Needs the desktop app running Standalone binary, direct crate linkage

Connection pool. SshConnectionRegistry is backed by DashMap and used through NodeRouter. Terminal panes, SFTP, port forwards, and the editor can share one physical SSH connection per node, and a terminal policy can opt into a dedicated connection instead. Each connection follows connecting → active → idle → link_down → reconnecting. A jump-host failure marks downstream nodes link_down. AI and plugins use capability handles and host snapshots rather than registering as connection consumers.

Grace Period reconnect.

  1. Detect a keepalive timeout.
  2. Snapshot terminal panes, SFTP transfers, forwards, and editor files.
  3. Probe the old connection for 30 s so TUI apps can survive short network drops.
  4. Open a new connection, restore forwards, resume transfers, and reopen editor files.

SFTP sessions carry a connection generation: after a reconnect, an eligible session is reacquired, but an operation from an old generation is never silently moved to the new connection.

Port forwarding. A standalone crate supporting -L, -R, and -D (SOCKS5). A single ssh_io task owns each SSH channel, so there is no shared mutex on the hot path.

Pure-Rust SSH. russh with ring: full SSH2, ChaCha20-Poly1305 and AES-GCM, Ed25519/RSA/ECDSA keys, SSH agent on Unix (SSH_AUTH_SOCK) and Windows (\\.\pipe\openssh-ssh-agent), and multi-hop chains with independent auth per hop.

Tech stack

Layer Technology
UI GPUI (Zed's GPU-backed UI framework)
Runtime Tokio, DashMap
SSH russh with ring (no OpenSSL or libssh2)
Local PTY portable-pty (ConPTY on Windows)
Terminal emulation alacritty_terminal (VT100–VT500, Sixel, Kitty graphics)
Editor tree-sitter syntax highlighting, custom buffer
Encryption ChaCha20-Poly1305, Argon2id
Plugins Wasmtime/WASI, sidecar WASM, and process paths
AI streaming SSE (OpenAI, Anthropic, Gemini), in-process
RAG BM25 + HNSW vector index with rank fusion, CJK bigram tokenizer
i18n oxideterm-i18n (11 locales)

Install

Download the latest release

OS x64 ARM64
macOS DMG (Intel) DMG (Apple Silicon)
Windows Installer (.exe) Installer (.exe)
Linux AppImage · .deb · .rpm AppImage · .deb · .rpm

Verify your download with the sha256sums.txt asset on the release page. Portable archives and signatures are listed there too.

macOS

If Gatekeeper blocks the app, remove the quarantine flag:

xattr -cr /Applications/OxideTerm.app

Windows

If SmartScreen shows a warning, choose More info → Run anyway.

Linux

# AppImage
chmod +x OxideTerm_*_linux_*.AppImage && ./OxideTerm_*_linux_*.AppImage

# Debian / Ubuntu
sudo dpkg -i OxideTerm_*_linux_*.deb && sudo apt-get install -f

# Fedora / RHEL-compatible
sudo dnf install ./OxideTerm_*_linux_*.rpm

# Nix; updates are managed by Nix
nix run github:AnalyseDeCircuit/oxideterm

Prefer to build it yourself? See Run from source under For developers.


Contributing

Contributions are welcome: Rust code, documentation, translations, plugins, testing, and issue reproduction. Open an issue first to discuss larger changes.

Bug reports are most useful with a redacted diagnostic bundle:

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

Reproducible bugs and regressions are prioritized. Feature requests are reviewed for scope, safety, and fit with OxideTerm's remote-server workspace direction. If OxideTerm helps your work, a GitHub star, a reproducible bug report, a translation fix, or a plugin all help keep it moving.

Contributors

Thanks to everyone who helps make OxideTerm better.

OxideTerm contributors


License

GPL-3.0-only. Dependency attributions are in THIRD_PARTY_NOTICES.md, with additional notices in NOTICE.

Built with: russh · GPUI · alacritty_terminal · portable-pty · wasmtime · tree-sitter

Frequently asked questions

Is oxideterm free to use?

oxideterm is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does oxideterm do?

AI-native workspace for local shells and remote machines.Zero Webview, zero OpenSSL, zero telemetry, and no app subscription.

What is oxideterm written in?

oxideterm is primarily written in Rust. Its source is publicly available at https://github.com/AnalyseDeCircuit/oxideterm, and it has 1,631 GitHub stars.