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
  • Advanced

    Notifications

    Being told when something unattended fails, which is the only time a message is worth sending.

    Notifications fire when a scheduled job or a GitOps sync fails. Those are the two systems that run with nobody watching, which is exactly when a failure can sit unnoticed.

    Channels

    ChannelNotes
    smtpReal email, over a real SMTP implementation — TLS, STARTTLS and authentication have enough subtleties that hand-rolling them would have been a mistake.
    slackA stable JSON payload to an incoming webhook.
    discordThe same, in Discord's shape.
    webhookA generic JSON POST, for anything the three above do not cover.

    Each channel has a test endpoint, so you can find out whether it is configured correctly at the moment you configure it rather than the first time something breaks.

    The channel list is deliberately short. The obvious way to cover every service at once would have pulled a Python runtime into a codebase that has avoided one everywhere else; the popular subset beyond email is three simple, stable payloads instead.

    Air-gapped

    • An internal SMTP relay or an internal webhook receiver works normally. Slack and Discord need egress to reach their own services.