Skip to content
since2006Public

About

High-performance native SSH client in Rust, GPU-rendered with GPUI: host manager, terminal, WinSCP-style SFTP and port forwarding. Rust 编写、GPU 渲染的原生 SSH 客户端。

Topics

Resources

Stars

438 stars

Watchers

0 watching

Forks

Repository files navigation

ShellRS

ShellRS

A high-performance, native, cross-platform SSH client written in Rust, with a GPU-rendered interface: Xshell-style host management, WinSCP-style SFTP and port forwarding, all in one window.

Release License: GPL-3.0 Platform: macOS | Windows | Linux Rust 1.98 Sponsor on GitHub LINUX DO

English | 简体中文

ShellRS main window: a grouped host tree on the left, htop running in a remote terminal on the right, connection latency in the tab bar

About

ShellRS brings Xshell-style host management and tabbed terminals, a WinSCP-style dual-pane SFTP browser and SSH port forwarding together in one cross-platform app, which bastion hosts such as JumpServer can launch the way they launch Xshell and WinSCP. It is written in Rust, and its UI is built on GPUI, the GPU-accelerated UI framework of the Zed editor (through gpui-kit). There is no Electron and no JVM.

Hosts, groups, credentials and forwarding rules live in a local SQLite database. Passwords and key passphrases go only into the system keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service); the database never holds a secret. ShellRS also ships a shellrs command that lets AI agents such as Claude Code or Codex run commands and transfer files on your saved hosts without ever seeing a password.

Features

Hosts

  • Groups nest to any depth; drag to rearrange, type to search.
  • The remote OS is detected on connect and shown as a badge in the host tree and on tabs (Linux distributions, the BSDs, macOS, Windows).
  • Three ways to log in: password; no password (the server's none auth, then the SSH agent, then the default keys in ~/.ssh); or a saved credential.
  • Three ways to connect: directly, through a chain of SSH jump hosts, or through an HTTP or SOCKS5 proxy. Terminals, SFTP, port forwards and the CLI all follow it.
  • "Test connection" performs a real login and explains any failure.
  • Besides SSH: Telnet hosts for switches, console servers and lab devices, with automatic login at the device's prompts and the same jump hosts and proxies; and serial ports of this computer, for console cables and debug ports.

Terminal

  • Tabbed remote and local terminals (built on alacritty_terminal); full-screen programs like vim and htop work as expected.
  • Each tab shows the SSH round-trip latency live.
  • Find (smart case) and local clear; configurable font, size and line height.
  • ZMODEM: rz and sz upload and download files right in the terminal, over SSH, Telnet or a serial line; drop files on a terminal to upload them.
  • Drag tabs into side-by-side or stacked splits to watch a terminal and SFTP together.

Right sidebar tools

  • They follow the current remote terminal and read and run on that terminal's own connection, with no second login. ⌘⌥B (Ctrl+Alt+B elsewhere) shows or hides them.
  • System monitor: system details, CPU (per core too), memory, network rates and disk use, refreshed every 2 seconds.
  • Network connections, processes and services: search and filter, process details, ending processes, starting, stopping and restarting systemd services, switching them on at boot, and their logs. These three and the monitor are for Linux only.
  • Docker: containers grouped by compose project, with start, stop, restart, details and logs, plus volumes, images and networks. When not root, passwordless sudo is used (for services as well).
  • Kubernetes: select a cluster from the host's kubeconfig, filter resources by namespace, inspect workloads and services, browse related pods, search container logs and copy kubectl commands. Off by default; turn it on in the settings. See the user manual.
  • Command history reads ~/.bash_history on the host, and snippets, shared by every host, can be sorted into categories; click one to type it into the terminal, or run it straight away.
  • tmux: the host's tmux sessions, with the one the terminal is in marked; start one, attach the terminal to one or detach it, rename and end them.
  • Files: a single remote file list beside the terminal, on an SFTP channel of the terminal's own connection, following the terminal's current folder. Browse, edit and preview, drop files in to upload, and download to your Downloads folder.
  • GPU/NPU: an AI host's NVIDIA GPUs and Huawei Ascend NPUs, laid out for eight: totals, each device's utilization, memory, temperature, power and health, and the compute processes, which you can end. Off by default; turn it on in the settings, where the other tools can be hidden too.

SFTP

  • A dual-pane browser modeled on WinSCP Commander: symmetric local and remote panes with WinSCP's columns, path labels, bookmarks and shortcuts (F5, F2, F7, F8…).
  • Upload and download by dragging or by shortcut, recursively. Start new transfers while one runs; they wait in a per-tab transfer queue.
  • Resumable transfers: data goes to a .filepart first, dropped connections are retried after 1, 3 and 10 seconds, and after a restart ShellRS offers to resume the same transfer.
  • Delete (local items go to the Trash), rename, create, and change permissions (a 3×3 grid plus octal, optionally recursive).
  • Built-in editor: double-click a text file to edit it, ⌘S writes it back in place, after checking nobody else changed it; syntax highlighting for common formats. Images and Markdown can be previewed.
  • Each SFTP tab has its own connection and asks only for the SFTP subsystem, so no shell is needed on the server.

Opening from a bastion host

  • Launched the way Xshell and WinSCP are: in the client of a bastion host such as JumpServer, set ShellRS as the SSH or SFTP client. An ssh:// link opens a terminal, an sftp:// link an SFTP tab.
  • Understands Xshell's -url and -newtab and WinSCP's /sessionname=. When ShellRS is already running, the link opens there.
  • What opens is an unsaved external connection: it stays out of the host list, keeps the link's password in memory only and goes away with its tabs. Each connection uses a single channel, so bastion hosts that allow no more still work. See the user manual.

Port forwarding

  • Local (-L), remote (-R) and dynamic (-D, SOCKS5 / SOCKS4) forwards.
  • The rule dialog draws a live diagram and a one-line explanation of where connections enter and where they go.
  • Every rule keeps its own SSH connection and reconnects three times after a drop; rules can start with ShellRS.

Credentials

  • Password, key and SSH agent credentials that many hosts can share. Change a credential and every host using it follows.
  • Keys can reference a file on disk, be pasted in, or be generated on the spot (Ed25519 or RSA 4096), with the public key one click away.

A CLI for AI agents

  • shellrs hosts / credentials / exec / upload / download / sync: manage hosts and credentials, run commands, move and sync files. The running ShellRS logs in on the command's behalf, so the command itself never reads a password or private key.
  • Install shellrs into your PATH and an Agent Skill for Claude Code, Codex, OpenCode or WorkBuddy from the settings page.

Security and updates

  • Secrets stay in the system keychain. Host keys are recorded in ShellRS's own known_hosts, never in ~/.ssh.
  • In-app updates: the update manifest is minisign-signed and each package is checked against its SHA-256. Updates download in the background and install on restart or quit. There are stable and beta channels, and an update check sends only the version, OS and CPU architecture.
  • Anonymous usage statistics: sent to Aptabase with only the version, OS, CPU architecture and how often each feature is used, never hosts, credentials, commands or any identifier. Turn them off in Settings › About.

Screenshots

A split view: a remote terminal on top and SFTP for the same host below
Dock splits: a remote terminal and SFTP stacked in one window

Five right sidebar tools side by side: Monitor, Processes, Services, Docker and Network
Right sidebar tools: Monitor, Processes, Services, Docker and Network

Dual-pane SFTP: three local items selected on the left, remote /etc on the right, and a transfer queue with one batch uploading and one waiting
WinSCP-style SFTP: highlight selection and a transfer queue with progress, speed and time left

Edit port forward dialog with the diagram and explanation of a local forward, and two running rules in the forward list
Port forwarding: the diagram shows where each connection goes

Download

Download from shellrs.com/download, which offers the package for your system, or from GitHub Releases. Betas are marked Pre-release there; to get new features early, switch the update channel to Beta in Settings › About.

System Package Notes
macOS 11+ (Apple Silicon) ShellRS-<version>-macos-aarch64.dmg Signed and notarized. Open the DMG and drag ShellRS into Applications
macOS 11+ (Intel) ShellRS-<version>-macos-x86_64.dmg Signed and notarized. Open the DMG and drag ShellRS into Applications
Windows x64 ShellRS-<version>-windows-x86_64-setup.exe Installs per user, no administrator rights needed. The installer is not signed yet; if SmartScreen stops it, choose "More info › Run anyway"
Windows x64 (portable) ShellRS-<version>-windows-x86_64-portable.zip Unzip into a folder you can write to and run shellrs.exe; its data stays in the data folder beside it. See Windows portable
Linux x64 ShellRS-<version>-linux-x86_64.AppImage chmod +x and run. Needs glibc 2.31 or newer (Ubuntu 20.04, Debian 11 and later)

Every package comes with a minisign signature (.minisig), and each release has a SHA256SUMS file.

Once installed, ShellRS keeps itself up to date: it checks, downloads and verifies new versions in the background, then shows an icon in the top-right corner of the title bar; click it and choose "Restart to update", or just quit and the update is installed on the way out. Automatic updates are unavailable when ShellRS runs from inside the DMG or outside the Applications folder, on Linux when it isn't run as the AppImage, or when the Windows portable copy's folder can't be written to.

Getting started

  1. Click "New host…" in the title bar (⌘N, or Ctrl+N on Windows and Linux) and fill in the address, port and login. Passwords go into the system keychain.
  2. Double-click a host to open a terminal. On the first connection you're asked to confirm the host key.
  3. Right-click a host and choose "Open SFTP", or click "SFTP" at the right of the terminal's tab bar. Drag files between the two panes to transfer them.
  4. The three icons after "ShellRS" in the title bar switch the sidebar between hosts, port forwards and credentials.
  5. ⌘T (Ctrl+T) opens a local terminal. Drag a tab to the top, bottom, left or right edge of the tab area to split it.

For AI agents

In Settings › External CLI, turn on Enable external CLI, then install the shellrs command and the Agent Skills. Your agent can then use the hosts you have saved:

shellrs hosts list -q web                          # list hosts and their IDs
shellrs exec <ID> "uptime && df -h"                # run a command; the exit code is the remote one
shellrs upload <ID> ./dist/app.tar.gz /opt/app/    # upload
shellrs download <ID> /var/log/syslog ./logs/      # download
shellrs sync <ID> ./dist /opt/app --delete         # sync a folder, skipping unchanged files

The command hands each request to the running ShellRS, which logs in with the saved settings and keychain. An unknown host or a missing password fails right away with a stable error code instead of a prompt that would hang the agent. See the user manual for details.

Building from source

Install rustup. The repository's rust-toolchain.toml pins Rust 1.98.1, which rustup installs on the first build.

git clone https://github.com/since2006/shell-rs.git
cd shell-rs
cargo run

The first build compiles the whole GPUI stack and takes a while. See development notes (in Chinese) for the Linux system packages and how to run the tests.

Documentation

Apart from the user manual and the changelog, the documentation is in Chinese for now:

Roadmap

Not implemented yet:

  • Directory sync, filtering, file search and a directory tree in SFTP
  • Keeping the Dock layout across restarts
  • Combining a jump host chain with a proxy, and HTTPS proxies
  • Managing port forwards and credentials through the external CLI
  • Code signing for the Windows installer

Contributing

Issues and pull requests are welcome on GitHub. Architecture notes and code conventions are in CLAUDE.md (in Chinese). Before sending a change, make sure these pass:

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test

Support ShellRS

If ShellRS is useful to you, consider sponsoring its development on GitHub. Your support helps sustain ongoing maintenance, bug fixes and new features. Thank you for supporting ShellRS!

Acknowledgements

License

ShellRS is licensed under the GNU General Public License v3.0. You may use, modify and redistribute it, commercially or not, but any modified version you distribute must come with its complete source code under the GPL-3.0 as well. The sync core in crates/shellrs-sync is licensed under the MIT License.

About

High-performance native SSH client in Rust, GPU-rendered with GPUI: host manager, terminal, WinSCP-style SFTP and port forwarding. Rust 编写、GPU 渲染的原生 SSH 客户端。

Topics

Resources

Stars

438 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages