Open-source project
AnalyseDeCircuit/oxideterm avatar
AnalyseDeCircuit/oxideterm

OxideTerm: a GPUI-based terminal workspace that keeps SSH, SFTP, forwarding and AI in one Rust process

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

1,557 stars116 forksRustGPL-3.0

At a glance

What is it?
OxideTerm is a GPL-3.0, Rust 2024 edition desktop workspace that renders with GPUI instead of a bundled browser runtime and ships a pure-Rust SSH stack built on russh and ring. The interesting question is not the feature list but what the single-process architecture buys you, and what it costs.
Who is it for?
Adopt OxideTerm if you want a single native process holding terminal, SFTP, forwarding and remote desktop state, you are willing to build from source or trust the release artefacts, and you accept GPL-3.0 terms for any redistribution. Do not adopt it if you need a scripting plugin API, a long-lived stability record, or a client you can embed in proprietary software.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem OxideTerm targets: one server, many disconnected tools

Most remote work is split across a terminal emulator, a separate SFTP client, a forwarding tool, and a remote desktop viewer. Each of those holds its own view of the same host. The README states the intent directly: OxideTerm keeps "terminal rendering, connection state, reconnect orchestration, files, forwarding, automation, and AI context inside one Rust application," so that tools "share the same server identity and session lifecycle instead of behaving like disconnected utilities." That is the pitch. The audience is engineers who spend the day on remote machines and are tired of re-entering credentials and re-establishing tunnels when they switch panes. It is not aimed at people who want a minimal terminal. The feature table lists local shells, SSH, Mosh, Telnet, serial, split panes, tmux -CC control mode, SFTP with transfer queues, local/remote/dynamic SOCKS5 forwarding, RDP and VNC, host monitoring, and an AI layer. That is a workstation, not a terminal.

How the GPUI rendering path differs from a browser-based terminal

The README contrasts two data flows. In a bundled-browser client, terminal bytes travel WebSocket to a JavaScript event loop and then into xterm.js. OxideTerm describes its path as "Rust input to TerminalState mutation to GPUI render." GPUI is the GPU-accelerated UI framework from the Zed project, and the README says it draws "directly on a GPU surface, without shipping a browser runtime." The practical consequence is that the same process owns the byte stream, the terminal state, and the drawing. There is no serialisation boundary between the SSH reader and the widget that paints the cell grid, and no second runtime to keep in sync. The README also notes the CLI is a "standalone binary, direct crate linkage," which means the command-line surface is not a client of a running desktop app. Whether that architecture produces lower latency than an xterm.js client is not something the supplied material quantifies, and I have not measured it. What can be said is that the design removes a class of failure modes that come from having two runtimes with separate lifecycles.

Grace Period reconnect and what a 30 second probe actually constrains

The reconnect mechanism is the most concrete design decision in the README. Instead of tearing down a dead connection and opening a new one, OxideTerm "probes the old connection for 30s before replacing it, so TUI apps can survive short network drops." The reason this matters is that full-screen terminal applications hold state on the server side tied to a session. A blunt reconnect often means the application sees a fresh client and redraws from scratch, or the session is lost entirely. A probe window gives the transport a chance to recover before the workspace commits to a replacement. The constraint is the number: 30 seconds is the documented window. Anything longer than that, a laptop suspend, a long tunnel change, a VPN renegotiation, will still trigger a replacement. The README does not describe what happens to in-flight SFTP transfers or forwarding rules during that window, though it does list "reconnect-aware restore" for forwarding rules as a separate feature, which suggests those are handled by a different path than the terminal session.

Building and configuring OxideTerm from the repository

The supplied material does not include build commands, so I will not invent them. What it does establish is the toolchain you need to expect: Rust 2024 edition, GPUI for the interface, and russh plus ring for SSH. The README states the SSH stack uses "russh + ring without OpenSSL/libssh2," which means a build does not need system OpenSSL headers or libssh2 development packages. On the storage side, credentials go to the OS keychain, and portable ".oxide" bundles are encrypted with ChaCha20-Poly1305 plus Argon2id for key derivation. OxideSens is configured with your own provider, and the README names OpenAI, Anthropic, Gemini, Ollama, and OpenAI-compatible endpoints. The AI layer supports MCP, local RAG, and "approved workspace actions," and there is a command policy setting governing what the agent may execute. The exact config file name and the CLI binary name are not given in the material provided. Anyone evaluating this should read the repository's own build section rather than rely on this article for the command line.

Where OxideTerm is the wrong choice

Three cases stand out. First, if you need to extend the client with your own code, the plugin model is deliberately narrow: the README describes it as "manifest-only, capability-scoped WASM, and trusted process runtimes." That is a security posture, and it means there is no equivalent of a general scripting environment where you can reach into the UI. Second, if you need a stability record, the release cadence visible here is fast. v2.0.26, v2.0.27 and v2.0.28 landed within roughly ten days of each other in September 2026. Frequent point releases are not inherently bad, but they do mean the surface is still moving, and the README gives no deprecation or long-term support policy. Third, GPL-3.0 is a copyleft licence. If your organisation's plan involves bundling this client into a proprietary product or shipping a modified binary without source, that is a conversation with your legal team, not something this article can settle. For ordinary internal use by engineers, the licence is unlikely to be the blocker.

How it compares with a tmux plus OpenSSH workflow

The obvious alternative for many readers is not another GUI client but the combination they already have: OpenSSH for transport, tmux for session persistence, and scp or rsync for files. The difference in approach is where session continuity lives. With tmux, the server holds the session, and the client is disposable. Kill the client, reconnect, and the session is exactly where you left it, with no probe window and no 30 second boundary. OxideTerm puts continuity in the client, using the Grace Period probe to keep the connection object alive. That is a weaker guarantee, but it extends to things tmux does not cover: SFTP transfer queues, forwarding rules, and RDP or VNC viewports. If your work is pure shell, tmux plus OpenSSH is simpler and has no GUI dependency. If your work spans file transfer, tunnels, and remote desktops against the same host, the single-workspace model is the reason to look at OxideTerm at all. Note that OxideTerm also ships "native tmux -CC control mode," so the two are not mutually exclusive.

Maintenance, licence and what to verify before adopting

Maintenance cost here is mostly build and dependency cost. The pure-Rust SSH stack removes OpenSSL and libssh2 from the equation, which is a real reduction in system-level packaging work, but GPUI is a young framework and the README pins the project to Rust 2024 edition, so your toolchain needs to be current. The GPL-3.0 licence governs distribution: you can use the software freely, and if you distribute modified versions you take on the corresponding source obligations. That is a summary of the licence label, not legal advice, and the LICENSE file in the repository is the authoritative text. Before adopting, verify three things in the repository itself: the actual build and run instructions, the name and packaging of the standalone CLI, and the OxideSens provider configuration format. The README also claims "zero telemetry," which is a statement you can check by reading the network-facing code rather than by trusting the badge.

Editorial conclusion

Adopt OxideTerm if you want a single native process holding terminal, SFTP, forwarding and remote desktop state, you are willing to build from source or trust the release artefacts, and you accept GPL-3.0 terms for any redistribution. Do not adopt it if you need a scripting plugin API, a long-lived stability record, or a client you can embed in proprietary software. Before committing, check the repository for the actual build instructions and the CLI crate name, read the LICENSE file in full, and confirm whether the OxideSens provider configuration path matches the providers you actually use.

Official sources

  1. AnalyseDeCircuit/oxideterm on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes