Teitunnel

Install

Install Teitunnel on macOS, Windows or Linux, the command line on a server, or the Docker image.

Teitunnel is a desktop app for macOS 14 or later, Windows 10 and 11, and Linux (GNOME, KDE and other desktops with a system tray), plus a command line and a Docker image for servers. Get it from the download page, which picks the right file for your system. Every file is also on GitHub Releases, and you can verify it.

Open the disk image and drag Teitunnel to Applications. One download runs on Apple silicon and Intel Macs. It's signed by Teispace and notarized by Apple, lives in the menu bar as well as the Dock, and keeps credentials in your keychain.

To build it yourself instead, see the contributing guide.

Updates

Teitunnel checks for a new version when it opens and once a day, and downloads it in the background. Every update is signed, and the app refuses one whose signature doesn't match the key built into it. When an update is ready, the sidebar says so: choose Restart to Update, or just quit, and it installs. On Linux, .deb and .rpm installs wait for Restart to Update, because your system asks for an administrator password.

A check downloads one small file from GitHub and sends nothing about you. To check only when you ask, turn off Settings ▸ General ▸ Check for updates automatically; on macOS, Teitunnel ▸ Check for Updates… checks now.

cloudflared

Routes and Quick Shares run on cloudflared, Cloudflare's connector. On first launch Teitunnel looks for one already installed (Homebrew, winget or your package manager). If there isn't one, choose Install cloudflared and Teitunnel downloads the latest release from GitHub and checks it before use:

  • the download must match the digest GitHub publishes,
  • the binary must match the checksum in Cloudflare's release notes,
  • and, on macOS, its code signature must be Cloudflare's.

The managed copy lives in Teitunnel's own folder and is updated from Settings ▸ cloudflared. When it updates, running connectors move to the new version without dropping your routes.

Next

Edit on GitHub

On this page