A native SSH client for macOS and Windows. Built with Tauri 2 and Rust. No Electron.
Screenshots coming soon.
Noverterm puts SSH sessions, SFTP, port forwarding, keys, and snippets in one fast window. A built-in MCP server lets AI agents such as Claude Code and Cursor run commands on your hosts, each one approved by you. It uses about 50MB of memory, compared to 500MB+ for Electron-based SSH clients. All data stays in a local SQLite database. No account, no cloud sync.
- Lightweight — Tauri 2 + Rust, ~50MB memory footprint
- Tabs for everything — many SSH sessions, plus a local terminal, side by side
- TUI-ready — Kitty keyboard protocol, IME input, and paste handling for vim, tmux, and htop
- Dual-pane SFTP — local or any saved host on each side, drag and drop between them
- MCP server for AI agents — Claude Code, Cursor, VS Code, and Claude Desktop can run commands, edit files, open tunnels, and read terminal tabs on your hosts, with your approval
- Local-first — connections, keys, and snippets never leave your machine
- Multiple SSH sessions in tabs; duplicate a session or open a local terminal instantly
- Password and SSH key authentication
- Host fingerprint verification and a known hosts manager
- Dropped connections reconnect when you switch back to the tab
- Immediate output on idle sessions, bounded binary streaming, ordered input with visible write failures
- Negotiated Kitty keyboard protocol with modifier, repeat, and release events
- In-terminal search
- Dual-pane browser: local or any host in each pane
- Drag and drop, multi-select, recursive folder transfer
- Transfer progress and conflict resolution
- Create, rename, and delete files and folders
- Local SSH tunnels saved as presets
- Several ports per preset
- Save frequent commands and run them in active sessions
- Pin snippets to the sidebar as one-click launchers with a custom icon
- Organize connections into folders
- Reach private servers through jump hosts (like
ssh -J), chained up to five hops; terminal, SFTP, and port forwarding all tunnel through them - Import and manage SSH keys
- Turn on the built-in MCP server, then paste the ready-made command into Claude Code, Cursor, VS Code, or Claude Desktop
- Tools:
- Commands:
list_hosts,run_command, andrun_command_multito run one command on several hosts at once - Long-running and interactive commands:
start_command, thenread_command,write_command(stdin), andstop_command - Files:
list_dir,read_file, andwrite_filefor text files;upload_fileanddownload_filecopy files and folders over SFTP - Snippets:
list_snippetsandrun_snippet - Port forwarding:
list_port_forwards,start_port_forward(listens on 127.0.0.1), andstop_port_forwardfor tunnels the agent opened - Terminal tabs:
list_terminalsandread_terminalreturn a tab's recent output as plain text
- Commands:
- Everything that touches a host or a terminal tab needs your approval, including input sent to a running command: allow once, always allow a host until the app restarts, or deny; unanswered requests are denied after two minutes
- Listens on 127.0.0.1 only, behind a token kept in the system keychain
- Passwords and keys stay in Noverterm; the agent sees host names, never credentials
- Hosts must pass their fingerprint check, and jump hosts work as they do in the terminal
- Built-in updater from GitHub Releases
- Dark theme, keyboard shortcuts, context menus
| Platform | Package |
|---|---|
| macOS (Apple Silicon) | .dmg |
| Windows | .exe installer |
Get the latest version from Releases. Noverterm checks for updates on its own after install.
On macOS, install from the terminal (builds are not notarized, so this avoids the Gatekeeper prompt):
curl -fsSL https://raw.githubusercontent.com/noverwork/noverterm/main/install.sh | shIf you install the .dmg instead, macOS blocks the first launch. Open System Settings → Privacy & Security and click Open Anyway, or run xattr -dr com.apple.quarantine /Applications/noverterm.app.
- Open Noverterm and click New connection.
- Enter the host, port, and user. Choose password or SSH key authentication.
- Connect. On first connect, verify the host fingerprint.
- Open more sessions in tabs, or open a Local Terminal.
- Use the sidebar for SFTP, port forwards, SSH keys, and snippets.
- Save the bastion as a normal connection.
- Create a connection for the private server. Enter its address as the bastion sees it, such as
10.0.1.5. - Under Jump host, select the bastion and save.
Connecting asks you to verify the bastion's fingerprint first, then the target's. Each host signs in with its own saved credentials, and your private keys stay on your machine. To chain more hops, give the bastion a jump host of its own. The bastion's SSH server must allow TCP forwarding (AllowTcpForwarding yes, the OpenSSH default).
On Windows, use Ctrl in place of Cmd.
| Action | Shortcut |
|---|---|
| Jump to tab 1–9 | Cmd+1 … Cmd+9 |
| Next / previous tab | Cmd+Shift+] / Cmd+Shift+[, Ctrl+Tab / Ctrl+Shift+Tab |
| Search in terminal | Cmd+F |
| Next / previous match (macOS) | Cmd+G / Cmd+Shift+G |
| Copy selection | Cmd+C (only with a selection, else sent to the shell) |
| Paste | Cmd+V, Ctrl+Shift+V, Shift+Insert |
| Close tab (macOS) | Cmd+W |
Keyboard encoding uses the layout information from the WebView. On WebKit, shifted punctuation on non-US layouts may lack its unshifted key value the first time it is typed. The browser-reported key and physical alternate stay available.
- All data is stored in a local SQLite database in the app data folder.
- No account, telemetry, or cloud sync.
- The only network traffic besides your SSH connections is the update check against GitHub Releases.
- Linux support
- Screenshots
Prerequisites: Node.js 22+, Rust stable, cargo-make.
cargo make frontend:install
cargo make tauri:buildThe bundled app is in target/release/bundle/.
cargo make frontend:install # install UI dependencies
cargo make tauri:dev # run the app in dev mode
cargo make ci # clippy, format check, tests, Svelte check| Layer | Technology |
|---|---|
| UI | Svelte 5, Vite, TailwindCSS |
| Desktop | Tauri 2 |
| SSH | Russh (pure Rust) |
| Async runtime | Tokio |
| Database | SQLite + Diesel |
noverterm/
├── packages/
│ ├── desktop/ # Tauri app (Rust + Svelte UI), owns the SQLite database
│ ├── shared/ # Types shared between Rust commands and the UI
│ └── orm/ # Diesel models and schema
├── Cargo.toml # Rust workspace
└── Makefile.toml # cargo-make tasks
Contributions are welcome. Fork it, hack on it, and send a pull request.
- Bug reports and ideas: open an issue.
- Pull requests: welcome. Run
cargo make cibefore you open one. - Security issues: report privately. Do not open a public issue.
Noverterm is released under the MIT License.
Noverterm — Because your SSH client shouldn't need its own memory allocator.