The project's README from github.com/since2006/shell-rs. As one markdown file: README.md.
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.
English | 简体中文
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.
Hosts
none auth, then the SSH agent, then the default keys in ~/.ssh); or a saved credential.Terminal
alacritty_terminal); full-screen programs like vim and htop work as expected.Right sidebar tools
~/.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.SFTP
.filepart first, dropped connections are retried after 1, 3 and 10 seconds, and after a restart ShellRS offers to resume the same transfer.Opening from a bastion host
ssh:// link opens a terminal, an sftp:// link an SFTP tab.-url and -newtab and WinSCP's /sessionname=. When ShellRS is already running, the link opens there.Port forwarding
-L), remote (-R) and dynamic (-D, SOCKS5 / SOCKS4) forwards.Credentials
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.shellrs into your PATH and an Agent Skill for Claude Code, Codex, OpenCode or WorkBuddy from the settings page.Security and updates
known_hosts, never in ~/.ssh.

Dock splits: a remote terminal and SFTP stacked in one window

Right sidebar tools: Monitor, Processes, Services, Docker and Network

WinSCP-style SFTP: highlight selection and a transfer queue with progress, speed and time left

Port forwarding: the diagram shows where each connection goes
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" |
| Linux x64 | ShellRS-<version>-linux-x86_64.AppImage |
chmod +x and run. Needs glibc 2.35 or newer (Ubuntu 22.04, Debian 12 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, or on Linux when it isn't run as the AppImage.
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.
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.
Apart from the user manual, the documentation is in Chinese for now:
Not implemented yet:
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
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.