Oryxis 0.9.0: Telnet and serial, files in every tab, two more clouds, and a vault that answers your 2FA
Disclosure: this release note was drafted with assistance from a LLM and edited by Wilson Glasser, the project author. The engineering decisions are mine; the LLM helped the code and turn the changelog into prose.
Oryxis is a Rust-native SSH client built on iced with a russh engine. 0.9.0 is the biggest release yet, and it pushes in every direction at once: the terminal learns to speak Telnet and serial for the gear that never learned SSH, every SSH tab can flip into a file manager over the same connection, Google Cloud and Azure join AWS and Kubernetes, and the vault picks up TOTP autofill, biometric unlock and an idle auto-lock. Around that core: per-host command history, session recordings that export to asciinema, smart tabs that tell you when a long command finished, user@host quick connect, one-click RDP/VNC through an SSH tunnel, a paste guard that reads what you're pasting, and full keyboard navigation from the dashboard down to the last toggle.
More than SSH: Telnet, serial and ZMODEM
Every network closet has one: the switch, the PDU, the ancient appliance that speaks nothing but Telnet, or only talks through a console cable. Oryxis hosts now carry a protocol selector. Telnet connects over a native Rust engine with full RFC 854/855 option negotiation (the loop-proof RFC 1143 state machine), NAWS window sizing, terminal-type and charset transcoding, plus prompt-driven credential autofill; the editor swaps to a reduced form with an honest note that the protocol is cleartext by design. Serial opens a local COM / /dev/tty* line with configurable baud, framing, flow control, line endings and local echo, for the direct console-cable case. Both host kinds ride sync and portable export like any other.
And because that same audience lives on sz / rz: run them on the remote and Oryxis auto-detects the ZMODEM transfer, takes over the byte stream and moves the file with a progress overlay, downloads into a folder you choose, uploads via a file picker. Built on a native Rust engine, working over SSH, Telnet and serial alike; a disconnect mid-transfer resumes the terminal cleanly instead of freezing it.
Your files, in the same tab
Opening SFTP used to mean a second tab and a second login. Now every SSH tab carries its file browser on the connection it already has (#61). A new Files tab in the terminal sidebar shows a per-pane browser that follows your shell's working directory as you cd, with the full operation set: upload, download, rename, delete, new file or folder, and Copy path everywhere. Follow rides shell-integration cwd reporting with a window-title fallback for stock bash, and an opt-in "Force OSC 7" setting injects the reporting into bash and zsh sessions that lack it. Navigate manually and it unpins; one click follows again.
When a sidebar isn't enough, "Open SFTP session" promotes the tab itself: the whole surface becomes the dual-pane SFTP manager, opened at the directory you were just in, while the PTY keeps running underneath. A chip on the tab (or Ctrl+Shift+F) flips between Terminal and Files, and the SFTP surface can detach into its own tab when you want both on screen. Standalone SFTP tabs are unchanged and remain the way to move files between two different servers.
Two more clouds
Cloud Accounts gains Google Cloud and Azure next to AWS and Kubernetes, both as on-demand subprocess plugins that stay out of the binary until you use them, and both driving the CLI you already authenticate with (gcloud, az) rather than bundling an SDK. Compute Engine instances and Azure VMs import as dynamic groups that resolve live on expand. GKE and AKS clusters are discovered too, and adding one wires the cluster up as a Kubernetes account (GKE runs get-credentials for you), reusing the whole kubectl pipeline that shipped in 0.8. Discovery is best-effort per service, so an API you never enabled doesn't sink the rest.
The vault levels up: 2FA, biometrics, auto-lock
Store a per-host TOTP secret (bare base32 or a full otpauth:// URI), encrypted like every other credential, and keyboard-interactive verification-code prompts are answered automatically, once per auth attempt, with a manual fallback if the server rejects the code. Two-factor hosts now connect as fast as password hosts.
The app can now be unlocked with Windows Hello, Touch ID, or the Linux system keyring. It's opt-in, offered when you set a master password; the lock screen leads with the biometric prompt under the platform's own name and keeps the password one click away. And the vault can lock itself: an idle timer zeroizes the master key and shows the lock screen while your live SSH sessions and tabs survive and greet you after unlock. The sweep also clears secret-bearing UI (editor fields, pending prompts) so nothing lingers on a locked screen.
Two more security moves in the same release: P2P sync's wire format upgraded to XChaCha20-Poly1305 with 192-bit nonces on a protocol bump (both peers must run 0.9; older peers are rejected cleanly, nothing is lost), and a new "Password prompt" auth method asks at every connection and never writes anything to the vault. RSA keys also negotiate rsa-sha2-512/256 with a SHA-1 fallback, so old servers keep accepting old keys.
The terminal remembers what you ran
Commands executed on saved hosts are captured into a per-host command history, encrypted at rest and passed through secret redaction before storage, and surfaced in a History tab in the terminal sidebar: a most-frequent shortlist over a recent list, with search, one keystroke to re-run, paste without executing, or delete. Capture rides the shell-integration marks (OSC 133) with a careful raw-input fallback; password prompts are never recorded and a leading space skips capture. History is local-only by design: never synced, never exported with the vault, wiped with the host. Two explicit plain-text escape hatches exist for offline reference: an Export button and an optional per-host live-append log.
The same marks power smart tabs: a command that ran past a threshold and finished while you were looking elsewhere earns an attention dot on its tab (green for success, red for a nonzero exit) plus a notification with the command and duration; hosts without shell integration get a quiet-period heuristic for the tail -f case. Privacy Mode strips the command line and host identity from OS notifications.
And the encrypted session logs the vault already keeps became real recordings: they now capture timing and terminal resizes, and any session exports from the History screen as an asciicast v3 .cast file with your terminal theme embedded (the asciinema player reproduces your colors as-is) or as a plain-text transcript. Typed commands are stored as their own redacted track with an input-only .txt export; the .cast and transcript stay output-only by design, so the keystroke-leak class doesn't exist.
user@host, no ceremony
Type user@host into the new-tab picker (Ctrl+K), the toolbar search or the tab jump and connect without saving a host. If the first auth attempt fails, the prompt offers every saved identity and key and reconnects in place; "Edit host" is available mid-connect in every state, editing the temporary host without writing to the vault. Quick connections behave like real tabs (splits, SFTP, port forwards) and their typed credentials are swept on vault lock.
One click to a desktop
A remote-desktop host (RDP or VNC) is now a first-class card: its address is the desktop endpoint, and it can reach the machine directly or tunnel through an SSH host you pick as a gateway, an ephemeral -L forward provisioned on demand. Clicking the card launches the OS-native client (mstsc, Microsoft Remote Desktop, FreeRDP, Remmina, or your VNC viewer); the tunnel is managed, survives fire-and-forget launchers, and closes itself once the client disconnects. Opt-in and hidden until enabled in Settings.
Keyboard everything
The navigation work that started on the dashboard now covers the app. Tab cycles the vault's focus zones with arrows moving inside each; modals, menus, Settings rows and the host editor walk with the same keys; and the terminal sidebar joined in full: Ctrl+Shift+H opens it and cycles Chat / Snippets / History / Files / Host config, Tab walks every control, Enter runs the selected snippet or history command, Shift+Enter pastes without the newline, Ctrl+F opens the tab's search, Esc hands the keyboard back to the terminal.
Around it: Ctrl+Tab switches tabs in most-recently-used order like the OS Alt+Tab, Ctrl+Shift+1..8 jump to any vault section from anywhere, and new-host / new-key / new-identity chords create without a mouse. Every chord is rebindable and the burger menu shows all the hints. On Windows, the taskbar icon grows a JumpList of recent hosts: right-click, pick, connected.
Paste like you mean it, snippets that fill themselves in
The multi-line paste confirmation shipped earlier grew content heuristics: a single-line paste with invisible or bidirectional characters, raw control sequences, a curl | sh fetch-and-execute, or mixed-alphabet look-alike words now hits the confirmation too, with one plain warning line per finding. Its own toggle, independent of the multi-line check.
Snippets learned variables: {name} and {name:default} placeholders prompt in a small dialog before the send, with shell text like ${VAR} and {print $1} deliberately left alone. They also got groups, tags and per-snippet shortcuts: grouped folder cards in the vault, a tag filter on hosts and snippets, a sidebar toggle that surfaces only snippets tagged like the focused host, and a recordable key combo that runs a snippet straight into the focused terminal.
For the PuTTY hands
The small things every PuTTY veteran expects, done properly: TCP_NODELAY on every socket the app opens; a per-host IPv4 / IPv6 preference honored on direct dials, proxy dials and jump chains; the SSH pre-authentication banner shown on the connect card and in scrollback instead of silently dropped; X11-style middle-click paste; a configurable right-click (Paste, Context menu, or xterm-style Extend selection); and scrollback reset on keypress and/or display activity. The paste path also normalizes CRLF so Windows clipboards stop doubling newlines (#60), and full-screen prompts over SSH stopped freezing because in-band terminal queries are now answered (#48).
A renderer that tells the truth
At boot Oryxis probes the GPU stack and drops to its built-in software renderer when the advertised backend is actually a software rasterizer (the WSL / llvmpipe class that misrenders), with truthful backend labels and an in-app restart to apply changes. A performance mode, a terminal geometry cache and gated cursor forwarding cut idle CPU. And when you want receipts, an opt-in performance HUD (#69) overlays frame time against the 16.7 ms budget, busy and slow-frame percentages, and a network line with live RTT and jitter measured on the SSH connection.
23 languages
Hebrew (right-to-left, joining Persian and Arabic), Traditional Chinese (Taiwan vocabulary, not a script conversion), Thai, Hindi, Czech and Greek join the UI, bringing Oryxis to 23 languages with the required fonts bundled or fetched on demand.
Also in the box
- Window size, position, monitor and maximized state are remembered across launches.
- Settings > Advanced gains an opt-in debug log and a "Copy environment info" button for bug reports.
- The per-tab AI chat routes replies to the tab that asked, carries Plan / Ask / Auto modes and a floating Stop, and applies privacy-mode redaction before terminal context reaches the model.
- Privacy Mode masks IPv6 addresses,
user@hostpairs and vault hostnames, including on the connection progress panel. - Tab rename, bottom tab bar, and pinned-tab-safe MRU cycling.
- The host-key prompt is a real modal (no more keystrokes leaking into the terminal behind it), hotkeys no longer fire behind blocking modals, and SFTP dialogs can no longer float above the lock screen.
- SFTP inline renames that don't change the name no longer touch the server, and Ctrl+A selects all in SFTP fields (#63); the keychain shows identities again when the vault has no SSH keys (#70).
Full details in the CHANGELOG.
What's Changed
- chore(deps): bump cmov from 0.5.3 to 0.5.4 by @dependabot[bot] in #58
Full Changelog: v0.8.3...v0.9.0