Skip to content
  • MangoFly

    A self-hosted WireGuard mesh. Devices connect straight to each other; the coordination server is one binary and a SQLite file, and never sees their traffic.

    encrypted WireGuard · peer to peerLaptopbehind home NATServerin a datacentrePhoneon mobile datacoordination serverone binary · one SQLite filecontrol plane only (TLS)keys · tunnel addresses · peer lists · sealed ICE candidatesholds no private keys · carries no traffic · cannot decryptdatacontrol
  • MangoDock

    Docker management with nothing on the hosts. Reaches each daemon over an ordinary SSH session — no agent to install, no port to open.

    The MangoDock dashboard showing three host cards with container state counts, CPU and memory gauges, a usage history and recent events
  • MangoWiFi

    A Wi-Fi 6/7/8 test bench. One binary runs as Console or Agent either side of the access point under test, measuring latency under real load.

    AP under testWi-Fi 6 / 6E / 7Agentstation side · real radioLAN receiveriperf3 -sConsoleUI · orchestrates · probes
  • Blog
  • Nothing phones home

    No telemetry, no analytics, no crash reporter, no account login. Check it with a packet capture on your own network.

    Download MangoSSH
  • Project
  • Download
  • Chapter 1 of 12

    Getting Started

    MangoSSH is a single desktop application (Windows, macOS, Linux) that replaces a folder full of separate tools — SSH client, RDP/VNC viewer, SFTP browser, port-forwarding utility, password manager, and more — with one window. There is no separate server component for personal use: the app talks directly to whatever host you point it at. A server only enters the picture if you opt into Team Vault or Cloud Vault for multi-device/multi-user credential sharing (covered in their own chapter). This guide is organized as a series of use cases — for every feature, you'll find what it's for , exactly how to do it inside the app, how to test that it actually worked, and what to do if something's wrong .

    Installing & Launching MangoSSH

    Purpose

    • Get the app running for the first time on a new machine.
    • saved connect You the desktop app hosts.json encrypted at rest, on this machine Target server SSH / RDP / etc. MangoSSH never routes your traffic through a third-party server — every connection you save is stored locally (encrypted at rest by Personal Vault, on by default — see the next chapter), and every session goes straight from your machine to the target.

    How to do it

    1. Download and run the MangoSSH installer for your OS (Windows MSI/EXE, macOS DMG, or Linux AppImage/deb, depending on what's been built for your platform).
    2. Launch MangoSSH.
      • On first launch it creates its local data directory (host list, keys, settings) under your OS's standard app-data location — nothing to configure manually.
    3. The app opens on the Dashboard view (formerly "Sessions") — your list of saved connections, empty on a fresh install.

    How to verify

    1. Look at the toolbar across the very top of the window.
      • Expect to see, left to right: Dashboard , SSH , RDP , VNC , SFTP , a More dropdown, a Scripts dropdown, a Hosts toggle, and Settings at the far right.
    2. If any of those is missing, or the whole window is white/blank with no toolbar at all, stop here and see the troubleshooting note below — don't proceed to the next use case on a broken launch.
    3. Click Settings , then click About MangoSSH at the bottom of the left rail (the info-icon row, below Documentation and Report an issue).
      • Expect a modal titled "About MangoSSH" to open showing a version number — note it down, you'll want it later if you ever need to report a bug.
    4. Click the × in the modal's top-right corner (or press Esc) to close it and return to Settings.

    Troubleshooting

    • Window opens but every page is blank — this has historically been caused by a front-end HTML/CSS regression after an update; restart the app once (a full quit, not just closing the window) and if it recurs, check for an update.
    • App won't launch at all on Windows — right-click the executable → Properties → unblock, if Windows flagged the download as from an untrusted publisher (expected for a non-Store-signed build).
    • macOS says the app is damaged / from an unidentified developer — right-click → Open the first time (bypasses Gatekeeper's quarantine flag for an unsigned/ad-hoc build).

    Creating Your First SSH Connection

    Purpose

    Save a reusable connection so you don't retype host/user/credentials every time.

    How to do it

    1. Click SSH in the toolbar, then + Add SSH Host .
    2. Fill in a Name (a friendly label — this is what shows in the sidebar, not the hostname), the Host (IP or DNS name) and Port (22 by default), and a Username .
    3. Pick an authentication method from the pill row (Password, Key only, Key + Password, Key + Interactive, MFA/Interactive, SSH Agent, PKCS#11, Windows Hello, or one of the external-secret-manager options: pass, Bitwarden, AWS SSM, Doppler, 1Password) — the full breakdown of every method is its own chapter.
    4. Optionally assign a Group (for organizing the sidebar and, if configured, for inheriting a shared bastion/credential — see the Groups use case) and pick an Avatar icon.
    5. Click Add host at the bottom of the modal.
      • This only saves the host and closes the modal — it does not connect by itself; connecting is a separate click on the new sidebar entry (next step).

    How to verify

    1. Immediately after clicking Add host , expect the modal to close and the new entry to appear in the left sidebar under the group you chose (or "Default" if you left it blank) — its status dot should be gray/idle, not yet green.
    2. Click the new sidebar entry once.
      • Expect the status dot to change color while it connects, then turn green, and a terminal pane to open on the right with a live shell prompt from the remote host (e.g. user@hostname:~$ ).
    3. Type whoami and press Enter.
      • Expect the output to match the username you configured (or whatever the server maps it to, e.g. for certificate-based principals).
    4. Close the session (toolbar's disconnect icon, or the sidebar context menu's Disconnect ) and confirm the status dot returns to gray — this proves disconnect state is tracked correctly, not just that connect worked once.

    Troubleshooting

    • "Connection refused" — nothing is listening on that host/port; confirm the SSH daemon is running and the port/firewall is correct.
    • "Connection timed out" — a network path or firewall issue, not an MangoSSH/auth issue; test with a raw TCP check from the same machine (e.g. Test-NetConnection host -Port 22 on Windows) before troubleshooting further inside the app.
    • "Authentication failed" immediately — double-check the auth method actually matches what the server accepts (e.g. it's set to password auth but the server has PasswordAuthentication no ).
    • Host key changed / trust prompt appears unexpectedly — see the Host Key Trust & TOFU use case in the SSH chapter before accepting a changed key blindly.

    Editing, Duplicating, and Deleting a Connection

    Purpose

    Maintain your saved connection list as servers change — rename, re-point, clone for a similar host, or remove one that's gone.

    How to do it

    1. Edit : right-click a host in the sidebar → .
      • Edit , change any field, click the save button.
      • Changes only apply the next time you open a session on that host — an already-open session is never affected.
    2. Duplicate : right-click → Duplicate .
      • The copy is created immediately (no confirmation dialog) with " (copy)" appended to its name — e.g. "prod-db1" becomes "prod-db1 (copy)".
      • Any saved password/passphrase is deliberately NOT carried over, even if the original had one saved.
    3. Delete : right-click → 5 Delete .
      • A confirmation reads exactly: "Delete host \" < name > \"?
      • This can't be undone." — click the confirm button to proceed or Cancel to back out.
      • If the host is shared via Team Vault instead, a different 3-button dialog appears asking whether to delete your local copy only or also remove it from the Team Vault for everyone.

    How to verify

    1. Right-click a test host → Edit, change its Port to a deliberately wrong value (e.g. 2222), save, then click the host and confirm the connect attempt fails/times out at that wrong port — proving the edit actually took effect.
      • Edit it back to the correct port and confirm it connects normally again.
    2. Right-click the same host → Duplicate.
      • Expect a new sidebar entry named " < original name > (copy)" to appear immediately, right below or near the original.
      • Open the copy in Edit and confirm the password field is empty even if the original has a saved password (check its "saved" indicator).
    3. Right-click the copy → Delete.
      • Expect the exact confirmation text "Delete host \" < name > (copy)\"?
      • This can't be undone." Click confirm and immediately verify the entry disappears from the sidebar without needing to reopen the app.

    Troubleshooting

    • Deleted a host by mistake — there's no undo; if Cloud Sync or a vault backup is configured, a prior sync snapshot may still have it (check Settings → Cloud Sync / the relevant vault tier's history if available).
      • Otherwise it must be re-added by hand.

    Using Profiles for Isolated Environments

    Purpose

    • Keep entirely separate sets of hosts, keys, and settings — for example, a "Work" profile and a "Personal" profile, or one profile per client if you do contract IT work — without them ever mixing.
    • Each profile gets its own data directory: its own hosts.json , keys, vault config, and settings.
    • Switching profiles is a full context switch, not a filter — a host saved in one profile is invisible from another.

    How to do it

    1. Open Settings → Profiles.
    2. Type a name into the "New profile name" field (e.g. "Client-A"), leave "Copy hosts & vault from the current profile into the new one" checked if you want a starting point (it's checked by default) or uncheck it to start completely empty, then click Create .
    3. The new profile appears in the list, but you are NOT switched to it automatically — this is deliberate (an earlier version auto-switched and caused "I lost all my hosts" confusion when the new profile turned out empty).
      • Click Switch next to it yourself when you're ready.
    4. Confirm the dialog that reads "Switch to profile ' < name > '? … Any open sessions will close." — clicking through it triggers an app restart to load the new profile's data.

    How to verify

    1. On Profile A, add a test host named something distinctive (e.g. "PROFILE-A-TEST").
    2. Go to Settings → Profiles, click Switch next to Profile B, confirm the restart dialog, and wait for MangoSSH to relaunch.
    3. Open the SSH view and confirm "PROFILE-A-TEST" is nowhere in the sidebar — not grayed out, not filtered, genuinely absent.
      • This is what proves real storage isolation rather than a display filter.
    4. Go back to Settings → Profiles, Switch back to Profile A, confirm the restart, and confirm "PROFILE-A-TEST" reappears exactly as you left it.

    Troubleshooting

    • Added a host but it "disappeared" — almost always means you're now on a different profile than the one you added it under; check the active profile in Settings → Profiles before assuming data loss.