The SSH client that
feels native.
Tabs, split panes, SFTP, port forwarding and an encrypted vault that syncs between your devices, in a GPU-rendered terminal built with Rust and Zig. Your local shell lives in it too.
Native, all the way down.
No Electron, no web view. shellwing is a Rust app on a GPU UI framework, around the terminal core of Ghostty. It starts like a native app because it is one.
The window, tabs, panes and every panel, drawn on the GPU by the framework the Zed editor is built on.
The terminal itself: Ghostty's emulator core, built from source with Zig, parsing output on its own thread.
SSH the way OpenSSH does it, in pure Rust: no OpenSSL to install, nothing to shell out to.
Full refresh rate
Smooth at your display's rate, even under a flood of output.
Off the UI thread
Parsing runs on its own thread, so a busy pane never stalls the window.
Sharp at any scale
Text stays crisp on every HiDPI scale factor, on every platform.
IME at the cursor
Input methods show the text being composed right at the cursor.
Everything you expect.
Nothing to migrate.
shellwing reads the same files OpenSSH does and signs in the same ways, so your hosts are there the first time you open it.
Your ~/.ssh/config, as is
Aliases, ProxyJump, forwards, identity files, known_hosts, agent keys, certificates and two-factor prompts. Nothing to import.
Tabs and split panes
Split a tab to the same host, drag tabs to reorder them, and type into every pane at once, like tmux synchronize-panes.
Files over SFTP
Browse, upload and download with drag and drop, rename and delete, and edit remote files in your own editor.
Port forwarding
Local, remote and SOCKS (-L, -R, -D) from the command line, a saved host, or the palette while connected.
Saved hosts
Groups, colors, favorites, tags, jump hosts and a command to run after connecting, in a plain hosts.toml.
Reconnects on its own
A dropped connection is retried with a back-off, and its port forwards come back with it.
Palette and find
One keystroke to any host, snippet, environment or note; find in the terminal and its history.
Session logs
Keep what a session printed, to read later or to attach to a ticket.
One app for your machine and your servers.
A local terminal opens in a tab beside the SSH ones, with the same speed, themes and shortcuts. Leave your old terminal app closed: shellwing does both.
- Your own shell.
$SHELL(a login shell on macOS), PowerShell 7 on Windows, or any other withlocal_shell: fish, nu, zsh with your config. - The same tools as over SSH. Split panes, find, snippets and typing into every pane work the same on this computer.
- A real terminal. Truecolor,
xterm-256colorand Ghostty's emulator: vim, htop and tmux look as they should. - From the command line.
shellwing --localopens straight into a shell;shellwing user@hostinto a host.
The commands, secrets and notes your servers need.
Snippets, environments, config files and notes live in the encrypted vault, sync to your other devices, and are one palette search away in any pane.
Ready commands for the whole stack.
The system, systemd, the network, Docker, Kubernetes, web servers, a dozen databases, backups and clouds. Pick the ones you want, set their options and sudo, run them on the host or in a container. Anything that changes things is typed, not run, until you press Enter; passwords come from an environment, never the command.
Your commands, with blanks to fill.
{{values}} are asked when it runs. Give a snippet the environments it needs and it runs in a subshell that has them, then drops them.
Secrets in the shell, only when you say.
Named sets of variables, pasted from a .env. Load one into a pane from the palette: the echo goes off, the command stays out of your history, and a badge's ✕ unsets it.
Runbooks next to the servers they're about.
Markdown that renders as you type: headings, tables, task lists, code blocks. Tie a note to its hosts and the palette lists it first there. A code block's Insert types it straight into the pane; mark a note sensitive and it shows only once you confirm it's you.
apidb-replicaPut a kubeconfig on a host, until the tab closes.
Keep ~/.kube/config, ~/.aws/credentials or ~/.npmrc in the vault and place it from the palette. Close the tab and it's gone; the file that was there comes back. Written whole, with its permissions from the start, and cleaned up on the next connect if the link dropped.
All of it, encrypted.
Every snippet, environment, file and note is a record in the vault, encrypted on your device and synced end to end. Values stay masked until you prove it's you.
How the vault works →Your hosts and secrets on every device. Your storage, your keys.
Passwords, SSH keys, snippets, environments, config files and notes are kept in one encrypted vault. It syncs through storage you already have, encrypted end to end: the storage only ever sees ciphertext.
- Unlock the way your system does. The keychain, Windows Hello, Touch ID or a passphrase, and it can lock itself when you step away.
- No account, no limits. Syncing through a folder, WebDAV, S3 or Git is free, for as many hosts as you have.
- A new device joins safely. Approve it from one that already syncs, or type the recovery key that always opens the vault.
- Keys in the vault. Generate or import SSH keys, sign in with them on every device without a passphrase prompt, and export them as OpenSSH files when another tool needs one.
69 themes. 10 languages.
Light and dark, following your desktop, with a theme for each. 20 of them are gradients. Give a host or a group its own theme so production never looks like staging, and use shellwing in your own language.
Pick a theme the whole page follows
Pick a language as the app shows it
- Shortcuts are yours: rebind any of them in Settings › Keyboard.
- Themes are files: drop a TOML in the themes folder and it shows under Your themes.
- Fonts and sizes apply as you change them, with no restart.
The speed of a terminal.
The tools of an SSH client.
A terminal app with OpenSSH is fast but bare; an Electron client has the tools but runs in a browser engine. shellwing is both, natively.
| Feature | shellwing | Terminal app + ssh | Electron SSH clients |
|---|---|---|---|
| Native app, GPU-renderedElectron draws through Chromium | Yes | Some | No |
| Reads ~/.ssh/config as is | Yes | Yes | Some |
| Your local shell in the same window | Yes | Yes | Some |
| Saved hosts with groups, tags and colors | Yes | No | Yes |
| SFTP browser and port forwards built in | Yes | No | Yes |
| Snippets, and a library of ~250 ready commands | Yes | No | Some |
| Environments loaded into a shell on demand | Yes | No | No |
| Config files placed until the tab closes | Yes | No | No |
| Markdown notes tied to hosts | Yes | No | Some |
| End-to-end encrypted sync through your own storage | Yes | No | Some |
| Open source | Yes | Some | Some |
Some: depends on the app. Electron clients and terminal apps differ a lot from one to the next; this is what's common among them, not any one product.
Questions, answered.
Is shellwing free?
Yes. shellwing is free software under the GPL-3.0. Every feature on this page works without an account, and syncing through storage of your own (a synced folder, WebDAV, S3 or a Git repository) is free and has no limits.
How do I install it, and how does it update?
Download it for your system above: a .dmg for macOS, an installer for Windows, an AppImage or a .deb for Linux. The app tells you when a newer version is out, and the .dmg app, the Windows installer and the AppImage update themselves when you say so. The releases are not signed with an Apple or Windows certificate yet, so the first launch asks you to allow it once.
Why Rust and Zig?
The app is Rust, drawn with GPUI, the GPU UI framework Zed is built on. The terminal itself is libghostty-vt, the core of the Ghostty terminal, written in Zig: it parses on its own thread, so heavy output never stalls the window. No browser engine, no Electron.
Can it replace my terminal app?
Yes. A local terminal opens beside the SSH tabs with your own shell ($SHELL, or PowerShell on Windows), or set local_shell to fish or anything else. Splitting, find, snippets and typing into every pane work the same as over SSH.
Do I have to move my hosts over?
No. shellwing reads ~/.ssh/config as OpenSSH does: aliases, ProxyJump, forwards, identity files, known_hosts, the agent and certificates. Saved hosts in hosts.toml add groups, colors, tags and more on top.
Where are my passwords and keys kept?
In the vault, an encrypted file on your device, unlocked through the system keychain, Windows Hello, Touch ID or a passphrase. When it syncs, it is encrypted end to end before it leaves the device: the storage it syncs through sees only ciphertext. A recovery key always opens it.
Are environments safe to load on a server?
Nothing is loaded unless you choose it. Values are sent with the terminal echo off and the command kept out of the shell history, and a snippet that needs an environment runs in a subshell that drops it when done. While loaded, root on that server can read them, so load them on servers you trust and unload them when done.
Is there a mobile app?
Not yet. The core of shellwing has no UI and already builds for iOS and Android, so mobile apps can follow; the desktop app comes first.
Get shellwing 0.1.0
Free and open source, for macOS, Windows and Linux. It tells you when a new version is out and installs it when you say so.
Install
- Open the .dmg.
- Drag shellwing into Applications.
- Open it from Applications or Spotlight.
Install
- Run the installer: it installs for you, without admin rights.
- Start shellwing from the Start menu.
- Updates install themselves when you say so.
Linux
glibc 2.35+ (Ubuntu 22.04, Debian 12 or newer), Wayland or X11
Install
- AppImage: make it executable and run it. It updates itself.
- Debian or Ubuntu: install the .deb with apt.
# AppImage chmod +x shellwing_0.1.0_linux_x86_64.AppImage ./shellwing_0.1.0_linux_x86_64.AppImage # Debian / Ubuntu curl -LO https://github.com/hivepaas/shellwing/releases/download/v0.1.0/shellwing_0.1.0_amd64.deb sudo apt install ./shellwing_0.1.0_amd64.deb
Like it? Star shellwing on GitHub to follow what comes next.