An SSH client built around my daily workflow: dashboard, terminals, SFTP and automations in one window.
Why this exists • Features • Screenshots • Install • Feedback • Development
I built this SSH client for myself, to support my workflow at work. It's based on OmnySSH by Tim Hartmann.
I don't follow the idea that everything has to be as tiny and lightweight as possible. For me this is a tool, and it should simply work. If it needs a few hundred MB more RAM for that, that's fine by me. So I did exactly what goes against OmnySSH's core idea: I had it rebuilt in Electron by Claude, in plain TypeScript with SvelteKit for everything.
The tool isn't finished yet, but it already has a few new features. See the list below for what works, what's in progress, and what's still planned.
| Feature | What it does | |
|---|---|---|
| ✅ | Live dashboard | A card per server with CPU, RAM, disk, uptime, OS and top processes. Detects running services (Docker, nginx, Node.js, PostgreSQL, Redis). Appliances without a shell can be watched with a plain TCP port check. Cards sort into folders you can collapse (make one with New folder, drag a card to move it), under a section with the shells on this computer. |
| ✅ | Terminals | Real PTY sessions in tabs, GPU-rendered with xterm.js. Copy on select, Ctrl+Shift+C/V, configurable right-click (menu or PuTTY-style paste). |
| ✅ | Local terminals | Shells on your own computer in the same tabs, no SSH needed: PowerShell, Command Prompt, Git Bash and every WSL distribution on Windows, your login shell and the other installed ones on macOS and Linux. |
| ✅ | Two-panel SFTP | Local and remote side by side, drag & drop (also from your file manager), parallel transfers, smooth even in folders with thousands of files. |
| ✅ | In-place file editor | Double-click a text file to edit it with Monaco, the editor from VS Code, local or remote. |
| ✅ | One-click SSH key setup | Generates an Ed25519 key, installs it, verifies it, and optionally turns off password login, with automatic rollback if anything fails. |
| ✅ | ProxyJump | Hosts behind one or more bastions work everywhere: dashboard, terminal, SFTP. |
| ✅ | Encrypted passwords | Stored passwords are encrypted with the OS keystore (DPAPI, Keychain, libsecret). |
| ✅ | 1Password | Read the address, port, user, domain or password of a host or a remote desktop connection from 1Password when connecting instead of storing it, and use SSH keys from the 1Password SSH agent. How |
| ✅ | Light & dark theme | |
| 🚧 | Snippets & automations (in progress) | Save commands as snippets and chain them into automations on a canvas, run locally, in WSL or on a host, with parameters and the output of earlier steps, plus an upload step that copies a file from this computer to the host. Usable, but still changing. |
| 🚧 | Remote desktop (RDP) (in progress) | RDP sessions as tabs inside the app, next to your terminals (IronRDP, no extra window), or in the OS's own client (Remote Desktop on Windows, FreeRDP on Linux and macOS), signed in automatically either way. Drag files onto the session to copy them there, and save files copied on the remote desktop. Can tunnel through any SSH host, so machines behind a bastion work without exposing port 3389. Display, monitor, clipboard, drive and sound settings per profile. |
| 💡 | AI integration (maybe in the future) | Help with commands, explain output or errors, right in the terminal. |
| 💡 | Plugin system (maybe in the future) | Extend the app with your own features without touching the core. |
✅ done · 🚧 in progress · 📋 planned · 💡 maybe in the future
| Terminal | SFTP |
|---|---|
![]() |
![]() |
| Automations | Remote desktop |
![]() |
![]() |
Download the file for your system from the latest release:
| System | File |
|---|---|
| Windows | BetterSshClient-<version>-setup.exe (installer) or -portable.exe (no install) |
| macOS | BetterSshClient-<version>-mac-<arch>.dmg |
| Linux | .AppImage, .deb or .rpm |
Note
Since it's an Electron app, it should in theory run on every system, but so far I've only tested it on Windows. macOS and Linux builds are produced automatically but are untested. If something breaks there, please open an issue.
The builds aren't code-signed, so your OS asks once on first launch:
- Windows: SmartScreen shows "Windows protected your PC". Click More info → Run anyway.
- macOS: right-click the app → Open → Open.
- Linux AppImage:
chmod +x BetterSshClient-*.AppImage, then run it.
Updates: the app tells you when a new release is out. The Windows installer version and the Linux AppImage update themselves with one click ("Update now", then restart). The other builds link to the release page to download it.
The app reads the hosts from your ~/.ssh/config (it never writes to it) and stores its
own data in %APPDATA%\better-ssh-client\ (Windows), ~/Library/Application Support/better-ssh-client/
(macOS) or ~/.config/better-ssh-client/ (Linux).
Addresses, ports, users, domains, passwords: install the 1Password CLI
(on Windows: winget install AgileBits.1Password.CLI) and turn on Settings → Developer →
Integrate with 1Password CLI in the 1Password app. Then, in a host's or a remote desktop
connection's settings, click 1Password next to the hostname, port, user, password, domain (remote desktop) or default path (SSH), and
put the item's secret reference into that field (in 1Password: right-click the field → Copy
Secret Reference, e.g. op://Servers/web-1/password). The app reads them when it connects —
1Password may ask for Windows Hello or Touch ID — keeps them in memory for 10 minutes, and never
writes the values to disk.
SSH keys: turn on Settings → Developer → Use the SSH agent in the 1Password app. The app asks the SSH agent for keys before anything else, so your 1Password keys just work. On Windows, stop and disable the OpenSSH Authentication Agent service first, since 1Password's agent takes over its place.
Found a bug or have an idea? Open an issue and describe it there. Feedback on macOS and Linux is especially welcome.
If you've fixed something yourself, feel free to open a pull request. I'll look at it and merge it when I have time. CONTRIBUTING.md explains the setup and conventions. For security issues, please see SECURITY.md instead of opening a public issue.
You need Node.js 22+ and npm. Docker is optional (for the integration tests).
git clone https://github.com/Sniphs98/BetterSshClient.git
cd BetterSshClient
npm ci
npm run dev:electron # build and start the app| Command | What it does |
|---|---|
npm run dev |
UI only, in the browser, for fast iteration on screens |
npm run check |
Type checks for both packages |
npm test |
Unit tests |
npm run test:e2e |
End-to-end UI tests (Playwright) |
npm run test:integration |
Tests against a real SSH server (docker compose up -d --build first) |
npm run package:dir |
An unpacked app for your system, in release/ |
To try Remote Desktop against a real Windows, there is an optional Windows 11 test machine in a container: see docker/windows-rdp-target.
packages/electron Electron main process: SSH/SFTP engine, config, IPC
packages/ui SvelteKit UI: dashboard, terminal, SFTP, automations, settings
Releases are automatic: every merge to main runs all tests and, if it contains a
feat, fix or perf commit, publishes a new release for all platforms. The details
are in CONTRIBUTING.md.
Built on OmnySSH by Tim Hartmann. The dashboard, the SSH and SFTP engine, the key setup and the terminal all started as his work. Thanks for building it!
The SFTP file icons are from vscode-icons (MIT, © Roberto Huertas).
Apache 2.0, like OmnySSH. Copyright in the original work remains with the OmnySSH contributors.



