Oxidal: every session in one window. SSH, SFTP, telnet, serial and local shells in a single native app.
MobaXterm nailed the idea of one window for every remote session, but it only runs on Windows and you cannot read a line of its source. Oxidal takes the same layout and rebuilds it as an open, native app that behaves the same on Windows, macOS and Linux.
Your sessions live in a plain JSON file you can read, diff and back up yourself. Passwords go to your operating system's credential vault, not to that file. There is no Electron runtime underneath, just a Rust binary drawing through the GPU.
|
|
|
|
| Feature | What it does |
|---|---|
| Tabbed sessions | SSH, SFTP, telnet, serial and local shells open side by side in one window, organized into folders in the sidebar. |
| SSH with a file browser attached | Opening an SSH session docks an SFTP panel next to the terminal, the way MobaXterm does it. Each side runs over its own connection, so a slow file transfer never blocks your shell. Resizable, with size, modified date and permissions columns, an editable path bar, and per-session dotfile visibility. Double clicking a remote file downloads it to a private folder and opens it with whatever your OS uses for that extension, except for the file types the OS would execute rather than display — those you download and open deliberately. |
| A real terminal emulator | Built directly on vte rather than shelling out to one. Handles 256 color and truecolor, scroll regions, line and character insert or delete, and the alternate screen buffer, so vim, htop and less all behave. |
| Live remote monitoring | SSH sessions get a status strip with CPU, memory, network and disk usage, sampled over the same connection. Hovering the disk segment breaks it down per filesystem. |
| A session dialog that helps | Session kinds as tiles across the top, a Test Connection button that actually authenticates, a private key picker that finds the keys in your ~/.ssh, and a dropdown of the serial ports currently plugged in, with the device names next to them. |
| SFTP as a two sided file manager | An SFTP session opens your own machine on the left and the server on the right, in a resizable split. Drag a file or folder from either side onto the other to transfer it, or select something and use the arrow buttons. Folders go across whole, recursively, under a single progress bar. Both sides browse, rename, delete and create folders the same way. |
| Serial console | Pick a detected port from the list, any baud rate, defaulting to 115200. |
| Telnet | A real NVT rather than a raw socket: it negotiates options, reports the window size as you resize the pane and the terminal type as xterm-256color, and echoes locally when the far end will not, which is what network gear and other bare telnet daemons need to feel like a terminal. |
| Keys or passwords | Point an SSH or SFTP session at a private key and it gets tried first, with password auth as the fallback. Encrypted keys are handled too: pick a key and a passphrase field appears, stored in the same credential vault as your passwords. Connections send keepalives, so an idle shell or file browser stays up. |
| Make it yours | Light and dark themes, a searchable picker over every font your system has, and a window opacity slider if you like your terminal glassy. |
| Small in memory | Every terminal cell is packed into 12 bytes, so screen buffers stay cheap even with a stack of tabs open. |
Rust 1.85 or newer, since the crate is on edition 2024. Oxidal pulls GPUI straight from the Zed repository, so the first build compiles a large dependency tree and takes a while. Grab a coffee. If you are on Linux and the build complains about missing system libraries, Zed's Linux dependency list covers what GPUI needs; serial port support wants libudev and password storage wants the D-Bus development headers (libdbus-1-dev on Debian-likes) on top of that.
git clone https://github.com/sh4den/Oxidal.git
cd Oxidal
cargo run --releaseThe debug profile works too, but the terminal feels noticeably better on --release.
- Hit New Session in the sidebar and pick a kind from the tiles: SSH, SFTP, Telnet, RDP, Serial or Local.
- Fill in what that kind needs. Host, username and port for SSH and SFTP, just a host and port for telnet, or a port and baud rate for serial. Local needs nothing. Test Connection tells you whether the details work before you save them.
- Double click the session to connect, or use the connect button on its row. Single click just selects it.
- SSH sessions open with the file browser on the left and the shell on the right. Drag the divider to taste.
- SFTP sessions open as a two sided file manager: your home folder on the left, the server on the right. Drag between the sides to transfer, or pick an entry and use the arrows in the header.
Font, size, light or dark mode and window opacity live in the Settings tab.
Sessions and preferences are written as JSON under a per user config directory:
| Platform | Location |
|---|---|
| Windows | %APPDATA%\Oxidal\ |
| macOS | ~/Library/Application Support/Oxidal/ |
| Linux | ~/.config/Oxidal/ |
sessions.json holds your saved connections, folders.json the sidebar folders and settings.json the appearance settings. All plain text, so version them or sync them however you like. Passwords are deliberately absent from all three; see below.
Worth being straight with you about where this stands.
Passwords go to your OS credential vault. Windows Credential Manager, the macOS Keychain, or the Secret Service on Linux, keyed by the session's id, with private key passphrases stored beside them under their own entry. Neither is ever written to sessions.json, and deleting a session deletes both. Private keys themselves are read from the path you configure and never copied anywhere.
SSH, SFTP, telnet, serial and local shells all work. RDP shows up in the session list because the groundwork is there, but it has no backend behind it yet and will tell you so.
Telnet is unencrypted, credentials and all, which is the protocol and not something Oxidal can fix. Use it on a management network or a console server, and reach for SSH anywhere else.
This is early software. Expect rough edges.
Issues and pull requests are welcome. Bug reports with the escape sequences or the session kind that triggered them are especially useful, since terminal emulation has a long tail of edge cases and the fastest way to fix one is to reproduce it.
- GPUI for the GPU accelerated UI framework
- gpui-component for the widget set
- russh and russh-sftp for SSH and SFTP
- vte for the escape sequence parser
- portable-pty for local shells across platforms
- serialport-rs for the serial backend
- keyring-rs for talking to the platform credential stores
- Rust, for making all of the above worth writing
Built for people who don't want to run a whole browser for a terminal




