SSH and SFTP client
Hosts and keys, sealed before they leave the device.
Grem is an SSH and SFTP client with a vault that syncs across Linux, macOS, Windows, Android, and iOS. Hosts, passwords, SSH keys, and pinned host keys are encrypted on the device. The sync server stores the sealed bytes and cannot open them.
One password, two keys that cannot reach each other
The master password is stretched once with Argon2id. Two independent keys come off that result through different HKDF labels. One of them signs in. The other unseals the vault and never leaves the device.
masterKey = Argon2id(masterPassword, salt, 64 MiB, t=3, p=4)
authKey = HKDF(masterKey, "grem-auth-v1") sent to the server
wrapKey = HKDF(masterKey, "grem-wrap-v1") never sent anywhere
A server that logged every byte it received would
hold authKey and still have no route to
wrapKey. That is what makes the claim on this page
structural rather than a promise.
What it does
A real terminal, and two panes for moving files
Full xterm surface with scrollback, resize, and reconnect. Sessions keep running while you use other screens. The file browser puts this machine on the left and the host on the right; drag a file between panes to transfer it, or drop one in from the desktop. Transfers stream, so a large file never has to fit in memory, and progress is measured rather than guessed.
On a phone the local pane is dropped and transfers go through the system picker.
Jump hosts
The inner session runs inside the outer one's encrypted tunnel, so the jump host never sees its plaintext.
Host key pinning
Pinned on first use and synced across devices. A changed key stops the connection and shows both fingerprints side by side.
Credentials where you need them
Type a password or paste a key straight into the add-host form. Promote it to the vault afterwards if another host should reuse it.
Operating system detection
Saving a host probes it once in the background, so the list carries a distro mark rather than four identical server glyphs.
Offline first
The vault opens and edits with no network. Changes queue on disk and push on the next sync.
Master password rotation
Changing it rewraps the vault key. Not one item is re-encrypted, so the change is a single small write.
What the server actually knows
This is the honest accounting, not a summary of it. Metadata is visible. Contents are not.
| Stored in the clear | Never stored, never sent |
|---|---|
| The account's email address | The master password |
| KDF parameters and salt | The master key, the wrapping key, the vault key |
| How many items an account has | Any item's type, name, or hostname |
| When each item changed, to the millisecond | Any username, password, or private key |
| The size of each sealed blob | Any tag, folder, or note |
| Device names and last-seen times | Anything a host key is attached to |
There is no password recovery
This is the direct cost of the design on this page, and the account creation screen says so before anyone commits to it. A password manager, or a written note kept somewhere safe, both work.
Start
The app creates the account, because the master password and the keys under it are generated on the device. The pages here manage the account around it: devices, sessions, and deletion.