Tailscale's client joins one tailnet at a time. tailmux joins them all and sends each connection to the tailnet that owns it.

brew install growlyx/tap/tailmux

tailmux setup # add tailnets, log in

sudo brew services start tailmux # every app can now reach every tailnetssh db.home, curl http://grafana.work, psql -h db.corp.internal: names

and subnets from every tailnet work side by side, even when two tailnets use the same IPs.

- Install: Homebrew, service modes, without Homebrew

- Setup and config: the tailmux setupTUI and every config key

- Routing: how tailmux picks a tailnet, and what happens on conflicts

- TUN mode: proxy-free, for every app

- Proxy mode: SOCKS5, HTTP, PAC, ssh, kubectl

- Menu bar app: switches, throughput, local API

- Updates: automatic, and how to turn that off

- Development: the in-process test lab, CI, releases