Help us shape the future of Go! Take the 2026 Go Developer Survey

taillaunch

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 8, 2026 License: MIT

README

TailLaunch

Open private tailnet web apps in their own lightweight browser window.

TailLaunch opens the official Tailscale sign-in page in your normal browser when needed, then opens the app in a dedicated Chromium-family app window. Closing that window ends the session. By default, session data is temporary and removed when TailLaunch exits; saved identity and browser data are opt-in with --persist.

One binary. No system VPN or TUN adapter. No admin/root access required by TailLaunch.

TailLaunch is an independent community project and is not affiliated with Tailscale Inc.

Quick start

taillaunch https://my-server.my-tailnet.ts.net

TailLaunch finds an installed Microsoft Edge, Google Chrome, Brave, or Chromium browser and opens the target in a minimal app window with its own browser profile. If sign-in is needed, Tailscale's official page opens in your normal system browser. Finish sign-in there and TailLaunch opens the app automatically. TailLaunch never asks for your Tailscale password or writes the short-lived sign-in link to its logs.

Each launch uses temporary private connection state and a temporary browser profile. Closing the app window ends TailLaunch and removes both. A URL with an http or https scheme and a host is required; pass the URL as the first argument or with --url.

TailLaunch checks for a supported browser before starting sign-in. If none is installed, install Edge, Chrome, Brave, or Chromium and try again. On a connection error, check your internet connection and that your Tailscale account can access the app.

Use --persist to reuse a saved node identity and browser profile across launches:

taillaunch --persist https://my-server.my-tailnet.ts.net

Later persistent launches reconnect without asking you to authorize again while that identity remains valid.

Portable mode
taillaunch --persist --portable https://my-server.my-tailnet.ts.net

With --persist, this keeps both the Tailscale node state and the dedicated browser profile under taillaunch-data/ next to the executable. --portable alone does not make session data persistent.

Low-memory mode

For older or low-RAM PCs:

taillaunch --persist --portable --low-memory https://my-server.my-tailnet.ts.net

This asks Chromium to use fewer renderer processes and smaller caches. It intentionally does not disable TLS, site isolation globally, or certificate validation.

Browser window option
taillaunch --app=false https://my-server.my-tailnet.ts.net

By default, the target opens in Chromium's minimal app window. Use --app=false only if you want a full browser window with its normal controls.

Proxy-only mode
taillaunch --proxy-only

TailLaunch connects to the tailnet and prints the local proxy address without launching a browser. This is useful for scripts or other applications that support HTTP proxies.

Headscale / alternate control server
taillaunch --control-url https://headscale.example.com https://nas

How it works

TailLaunch keeps private app access scoped to the session and does not modify system networking.

Dedicated Edge / Chrome / Chromium / Brave app window
                  |
                  | HTTP proxy (loopback only)
                  v
          127.0.0.1:<random>
                  |
        +---------+---------+
        | routing policy    |
        +---------+---------+
          |               |
   tailnet host       public host
          |               |
       tsnet           direct TCP
          |               |
       tailnet           Internet

HTTPS is not intercepted. For HTTPS, the browser establishes a normal CONNECT tunnel through TailLaunch and performs TLS end-to-end with the destination.

What gets routed through Tailscale?

TailLaunch sends these destinations through tsnet:

  • Tailscale IPv4 (100.64.0.0/10) and IPv6 (fd7a:115c:a1e0::/48) addresses
  • the current tailnet's MagicDNS suffix
  • known peer hostnames
  • single-label MagicDNS-style names such as nas
  • subnet routes learned from current tailnet peers
  • *.ts.net

Everything else is dialed directly through the machine's normal network connection.

Supported targets

Release builds are produced for:

  • Windows: amd64, arm64
  • Linux: amd64, arm64
  • macOS: amd64, arm64

The embedded networking layer is pure userspace Go. Browser launching currently targets Chromium-family browsers because they support a per-process --proxy-server flag without changing OS proxy settings.

Security model

  • TailLaunch binds its proxy only to loopback (127.0.0.1).
  • Your browser still validates HTTPS certificates normally; TailLaunch does not MITM TLS.
  • The embedded node receives only the permissions granted to that Tailscale identity by your tailnet policy.
  • With --persist, the state directory contains a persistent Tailscale node identity. Treat it like a credential. Do not commit or share it.
  • Public Internet traffic is sent directly unless it matches TailLaunch's tailnet routing policy.
  • Closing TailLaunch shuts down the embedded tsnet node and local proxy. Session-only state and profile data are removed; persistent data remains for the next launch when --persist is used.

Building

TailLaunch currently tracks Tailscale v1.102.5 (the current stable client line as of October 2026) and uses Go 1.26+.

go build -trimpath -o taillaunch ./cmd/taillaunch

For local development without downloading/building Tailscale, the repository includes a stub backend used only with the stub build tag:

go test -tags stub ./...

Project status

Early MVP. The core architecture is intentionally small:

  • embedded tsnet node
  • first-run Tailscale sign-in through the normal browser
  • opt-in persistent node state
  • loopback HTTP/HTTPS CONNECT proxy
  • split tailnet/direct routing
  • Chromium-family browser launcher
  • Windows/Linux/macOS + amd64/arm64 release matrix
  • optional low-memory browser mode
  • Firefox profile support
  • small native tray/status UI
  • automatic self-update
  • signed/notarized release binaries
  • richer service picker / tailnet peer discovery UI

TailLaunch is inspired by the same general idea explored by:

  • Tailscale's experimental aperture-plus embedded userspace browser
  • Tailscale's experimental ts-browser-ext
  • OpenMinis/tsproxy
  • kljensen/tailgate

TailLaunch's focus is different: a portable, cross-platform, one-click browser session with split routing and no system VPN installation.

License

MIT. See LICENSE and THIRD_PARTY_NOTICES.md.

Directories

Path Synopsis
cmd
taillaunch command
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL