Developer documentation for MorphGate: the SSH client with a per-host VPN and an end-to-end encrypted vault that syncs through MorphGate's hosted service or any vault-sync/v1 server (Rust, Tauri v2, React and TypeScript). These docs describe the app from its code; paths in them are relative to the repository root.
Start with Architecture, then the feature you're working on. Development covers building and testing, RELEASING.md releases, and CONTRIBUTING.md how changes come in.
| Doc | What it covers |
|---|---|
| Sync and crypto spec | The protocol's design: threat model, key hierarchy, wire formats, sync, sharing, the self-hosting contract |
| Architecture | Crates and layers, Tauri commands and events, data on disk and the SQLite schema, item kinds, how a connection and a sync run, trust boundaries |
| Development | Building and running, the workspace, unit, live, e2e and conformance tests, CI, versions and releases |
| Vault | |
| Vault and unlock | The local vault file, first run, master password rules, unlock, lock and auto-lock, recovery key, password change, export, reset |
| Keychain and biometric unlock | The device key in the OS keychain, Touch ID, Windows Hello and polkit, Android Keystore, iOS |
| Vault cryptography | Key hierarchy, KDF minimums, envelopes, signing and padding, recovery codes, sealed vault keys, blobs, the rollback guard |
| Connections | |
| Hosts, groups and identities | Item kinds and fields, group defaults, identities, attachments, lists and bulk changes, moving items between vaults |
| SSH connections | How a connection is made, sign-in order, host keys and host CAs, jump hosts, proxy commands, keepalive and reconnect |
| SSH keys and agents | Generating and importing keys, certificates and their renewal, SSH agents (1Password, Bitwarden, Secretive, Pageant), agent forwarding |
| Per-host VPN | How a host uses a VPN, tunnel lifetime and sharing, prompts, the in-app TCP/IP stack, DNS |
| VPN protocols | WireGuard, OpenVPN and openconnect in detail: what is parsed, refused and asked for |
| Terminal and snippets | The terminal, tabs, split panes and broadcast, the route bar, snippets, tmux sessions |
| Port forwarding | Local, remote and SOCKS tunnels |
| SFTP | The file browser, transfers, conflicts |
| Session logs | Recording sessions, sealed chunks, uploading and playback |
| Importing | Hosts from OpenSSH, PuTTY, CSV and Royal TS; snippets from CSV |
| Cloud sources | Hosts from Vallic Cloud, AWS, Google Cloud, Azure, Hetzner Cloud and DigitalOcean, and hosts and snippets from a feed |
| Sync and teams | |
| Sync | Choosing a server, signing up and in, two-step verification, the push and pull cycle, conflicts, plans and limits |
| Account and devices | The device list, signing devices out, erasing a revoked device, disconnecting, deleting the account, the website account page, device approval, single sign-on |
| Teams | Creating and joining teams, verifying members, roles, shared vaults and key rotation, policies, the member key directory |
| Offboarding | What a leaving member could read, removing their keys from servers, replacing a shared key |
| The app | |
| Platforms and mobile | Linux, macOS, Windows, Android and iOS: packages, data folders, the phone layout, what differs |
| Updates | The signed updater, release notes, About and open-source licenses |
| Deep links | morphgate:// links and what each opens |
| Appearance | App themes, terminal color schemes, fonts |
| Reference server | vault-sync-server: what it implements, configuration, running it |
| Where | What |
|---|---|
spec/openapi.yaml |
The vault-sync/v1 API: the contract servers and the app follow |
server/README.md, tools/vault-conform/README.md |
Running the reference server; checking a server against the spec |
apps/desktop/e2e/README.md |
The end-to-end suite that drives the packaged app |
| ROADMAP.md, CHANGELOG.md | What's done and open; what each release changed |
| morphgate.com/docs | The user docs, which say the same things for people using the app |