I built OpenSesh, an open-source MobaXterm/Termius alternative in Rust and Qt 6
---
title: I built OpenSesh, an open-source MobaXterm/Termius alternative in Rust and Qt 6
published: true
description: One native app for terminals, SSH, SFTP, S3, tunnels, serial, containers and RDP/VNC. Free, GPL-3.0, zero telemetry.
tags: rust, opensource, showdev, linux
cover_image: opensesh.cc
---
If you work with servers, you probably have a pile of tools open at once: a terminal, an SSH client, something for SFTP, something for tunnels, maybe an RDP client too. The all-in-one apps that exist are usually closed source, Windows-only, subscription-based or built on Electron.
So I built OpenSesh: a free, open-source and native remote connections client for Windows and Linux. Version 1.0 just came out. 🎉
👉 GitHub: caixax/opensesh
👉 Website: opensesh.cc
What it does
- Terminals: a GPU-rendered terminal for every shell you have (PowerShell, cmd, Git Bash, WSL, /etc/shells), with tabs that split into panes, move between windows and broadcast input.
- SSH: a built-in client with jump hosts, proxies, agents, one-time codes, certificates and auto-reconnect. X11 forwarding and Waypipe let you run remote GUI programs.
- Files: SFTP and S3 (AWS, MinIO, RustFS) in a two-pane view, and a side panel that follows your terminal's current folder.
- Tunnels: local, remote and SOCKS forwarding that reconnects by itself.
- More protocols: telnet, serial ports (with a hex view), mosh, Docker/Podman containers, Kubernetes pods, and RDP and VNC remote desktops in tabs.
- Snippets and macros with {{variables}} and secrets from the vault, session recording, and paste protection that warns you before a curl | sudo bash runs.
- Server monitor: CPU, RAM, network and disk of the server in the status bar, with no agent installed. It's just a small shell loop on a separate SSH channel.
How it's built
- Rust for the core, with the UI in Qt 6 / QML through cxx-qt. No Electron and no webviews.
- Secrets live in a vault encrypted with XChaCha20-Poly1305. Its key is held by the system keyring or an Argon2id master password.
- Settings are plain TOML files. You can sync them between computers with Git or Syncthing, and conflicts are merged record by record instead of overwritten.
- Security: every parser of untrusted input (quick connect, pastes, ~/.ssh/config, the importers, the sync merge) is fuzzed weekly, and the repo includes a written threat model and security review.
- Releases: each package is installed and launched on a clean Debian, Ubuntu, Fedora, Arch and Windows system in CI before it's published.
Try it
On Linux:
curl -fsSL raw.githubusercontent.com | bash
On Windows there's an installer (no admin needed), a portable zip and Scoop. You can download them from the releases page.
It imports your hosts from ~/.ssh/config, MobaXterm, PuTTY, Remmina or CSV, so you can try it in a couple of minutes.
What's next
A macOS version, winget and AUR packages, and signed Windows builds.
If you give it a try, I'd love to hear what works, what breaks and what's missing. Issues and PRs are welcome! ⭐
Mentions
I built OpenSesh, an open-source MobaXterm/Termius alternative in Rust and Qt 6 --- title: I built OpenSesh, an open-source MobaXterm/Termius alternative in Rust and Qt 6 published: true description: One native app for terminals, SSH, SFTP, S3, tunnels, serial, containers and RDP/VNC. Free, GPL-3.0, zero telemetry. tags: rust, opensource, showdev, linux cover_image: opensesh.cc --- If you work with servers, you probably have a pile of tools open at once: a terminal, an SSH client, something for SFTP, something for tunnels, maybe an RDP client too. The all-in-one apps that exist are usually closed source, Windows-only, subscription-based or built on Electron. So I built OpenSesh: a free, open-source and native remote connections client for Windows and Linux. Version 1.0 just came out. 🎉 👉 GitHub: caixax/opensesh 👉 Website: opensesh.cc What it does - Terminals: a GPU-rendered terminal for every shell you have (PowerShell, cmd, Git Bash, WSL, /etc/shells), with tabs that split into panes, move between windows and broadcast input. - SSH: a built-in client with jump hosts, proxies, agents, one-time codes, certificates and auto-reconnect. X11 forwarding and Waypipe let you run remote GUI programs. - Files: SFTP and S3 (AWS, MinIO, RustFS) in a two-pane view, and a side panel that follows your terminal's current folder. - Tunnels: local, remote and SOCKS forwarding that reconnects by itself. - More protocols: telnet, serial ports (with a hex view), mosh, Docker/Podman containers, Kubernetes pods, and RDP and VNC remote desktops in tabs. - Snippets and macros with {{variables}} and secrets from the vault, session recording, and paste protection that warns you before a curl | sudo bash runs. - Server monitor: CPU, RAM, network and disk of the server in the status bar, with no agent installed. It's just a small shell loop on a separate SSH channel. How it's built - Rust for the core, with the UI in Qt 6 / QML through cxx-qt. No Electron and no webviews. - Secrets live in a vault encrypted with XChaCha20-Poly1305. Its key is held by the system keyring or an Argon2id master password. - Settings are plain TOML files. You can sync them between computers with Git or Syncthing, and conflicts are merged record by record instead of overwritten. - Security: every parser of untrusted input (quick connect, pastes, ~/.ssh/config, the importers, the sync merge) is fuzzed weekly, and the repo includes a written threat model and security review. - Releases: each package is installed and launched on a clean Debian, Ubuntu, Fedora, Arch and Windows system in CI before it's published. Try it On Linux: curl -fsSL raw.githubusercontent.com | bash On Windows there's an installer (no admin needed), a portable zip and Scoop. You can download them from the releases page. It imports your hosts from ~/.ssh/config, MobaXterm, PuTTY, Remmina or CSV, so you can try it in a couple of minutes. What's next A macOS version, winget and AUR packages, and signed Windows builds. If you give it a try, I'd love to hear what works, what breaks and what's missing. Issues and PRs are welcome! ⭐
Bridges Rust is based on cxx-qt. Bridges intentionally hides its internal API - if you want lower level access, cxx-qt is there and the recommended option. KDAB/cxx-qt It _does_ go through a C API eventually, but only the way CXX generated it, it's not for human consumption.