A modern, async SSH terminal client built with Rust and Ratatui. TermiRs provides a fast, secure, and user-friendly terminal interface for managing SSH connections with advanced features like secure file transfers and encrypted configuration storage.

russh for high-performance, non-blocking SSH operations~/.ssh/config file with Ctrl+LDownload the latest binary from the releases page
# Clone the repository
git clone https://github.com/caelansar/termirs.git
cd termirs
# Build the project
cargo build --release --locked
# Run the application
./target/release/termirs
./termirs or cargo run --releasen to create a new SSH connectionCtrl+L to import from your ~/.ssh/config fileEnter to connect, connection will be saved in connection listEnter to connect| Key | Action |
|---|---|
↑/↓ or j/k |
Navigate connections |
Enter |
Connect to selected connection |
n |
Create new connection |
e |
Edit selected connection |
d |
Delete selected connection |
i |
Open file explorer |
p |
Open port forwarding management |
/ |
Search connections |
q |
Quit application |
| Key | Action |
|---|---|
Tab/Shift+Tab |
Navigate between fields |
Ctrl+L |
Load connection details from ~/.ssh/config (enter hostname first) |
Enter |
Save and connect |
Esc |
Cancel and return to connection list |
| Key | Action |
|---|---|
Page Up/Down or Ctrl+b/Ctrl+f |
Scroll terminal history |
Ctrl+S |
Search terminal history |
Esc |
Disconnect and return to connection list |
n |
Navigate next matched item (in search mode) |
p |
Navigate previous matched item (in search mode) |
| Key | Action |
|---|---|
Tab |
Swap active pane between local and remote directories |
j/k or ↓/↑ |
Move selection within the active pane |
Enter or l |
Enter directories |
Backspace or h |
Go up one directory level |
H |
Toggle whether hidden files should be shown |
c |
Copy highlighted file or folder into the transfer clipboard |
v |
Paste into the destination pane to start an async transfer |
o |
Open file in editor, or open terminal on remote directory |
r |
Refresh the current pane listing |
Esc |
Cancel file explorer and return to connection list |
| Key | Action |
|---|---|
↑/↓ or j/k |
Navigate port forwarding rules |
n |
Create new port forwarding rule |
e |
Edit selected port forwarding rule |
d |
Delete selected port forwarding rule |
Enter |
Start/stop selected port forwarding rule |
/ |
Search port forwarding rules |
Esc |
Return to connection list |
Host: example.com
Port: 22
Username: user
Password: [encrypted and stored securely]
Host: example.com
Port: 22
Username: user
Private Key: ~/.ssh/id_rsa
TermiRs can import connection details from your existing ~/.ssh/config file:
n to create a new connectionCtrl+L to automatically load:The SSH config parser supports Include directives, allowing you to organize your SSH configurations across multiple files.
Automatically handled when the server requires interactive authentication.
Forward a remote service (e.g., PostgreSQL on a server) to your local machine: - Forward Type: Local - Local Address: 127.0.0.1 - Local Port: 8080 (on your computer) - Service Host: remote.host (e.g., database VM) - Service Port: 5432 (PostgreSQL default)
When started, connections to localhost:8080 on your computer are securely forwarded through SSH to remote.host:5432 on the remote server.
Expose a local web server running on port 3000 to the remote server's port 8080: - Forward Type: Remote - Local Port: 8080 (port on remote server) - Remote Bind Address: 0.0.0.0 (listen on all interfaces) or 127.0.0.1 (localhost only) - Service Host: localhost - Service Port: 3000
When started, anyone connecting to remote_server:8080 will be forwarded to your local localhost:3000.
Create a SOCKS5 proxy on port 1080: - Forward Type: Dynamic - Local Address: 127.0.0.1 - Local Port: 1080
Configure your browser or applications to use 127.0.0.1:1080 as SOCKS5 proxy. All traffic will be tunneled through the SSH connection.
TermiRs lets you edit files directly from the file explorer using your preferred editor. Press e on any file to open it.
VISUAL or EDITOR environment variable (falls back to a system default)
bash
export EDITOR=vim # for Vim
export EDITOR='cursor --wait' # for Cursor (--wait wait for the files to be closed before returning)TermiRs stores configuration in ~/.config/termirs/config.toml. The file includes:
- Saved SSH connections (with encrypted passwords)
- Port forwarding rules and their associated connections
- Server public keys for host verification
- Application settings
When have_nerd_font is enabled, the file explorer displays file type icons using Nerd Font glyphs:

Example configuration structure:
[settings]
default_port = 22
connection_timeout = 20
have_nerd_font = true # enables file type icons in the file explorer (requires a Nerd Font)
[[connections]]
id = "uuid-string"
display_name = "My Server"
host = "example.com"
port = 22
username = "user"
created_at = "2023-01-01T00:00:00Z"
public_key = "ssh-rsa AAAAB3NzaC1yc2E..."
[connections.auth_method]
password = "encrypted-password-data"
[[port_forwards]]
id = "port-forward-uuid"
connection_id = "uuid-string"
forward_type = "Local"
display_name = "Local Web Server"
local_addr = "127.0.0.1"
local_port = 8080
service_host = "localhost"
service_port = 3000
created_at = "2023-01-01T00:00:00Z"
TermiRs is built with a fully asynchronous architecture:
$ claude mcp add termirs \
-- python -m otcore.mcp_server <graph>