Back to browse
GitHub Repository

A Tailscale coordination server profile manager for Windows. Switch between self-hosted coordination servers without touching config files.

2 starsGo

Ganoid – Switch Tailscale coordination servers without re-auth

by yashau·Mar 31, 2026·2 points·0 comments

AI Analysis

●●SolidNiche GemSolve My Problem

Switch Tailscale coordination servers without re-auth by preserving state directories.

Strengths
  • Parses base64-encoded server-state.conf to verify profile ownership before restore.
  • Two-component architecture: privileged service plus system tray client.
  • Self-recovers if daemon restarts, rebuilds tray menu live from API.
Weaknesses
  • Windows-only, no macOS or Linux support despite Tailscale being cross-platform.
  • Extremely narrow audience: only matters if you run multiple coordination servers.
Target Audience

Windows users running both Tailscale and Headscale

Similar To

Tailscale · Headscale

Post Description

I self-host Headscale[0] and also use the official Tailscale server. Switching between them means setting the login server again and re-authenticating every time because your session for that server is gone.

Ganoid solves this by treating each coordination server as a named profile and saving/restoring the full Tailscale state directory per profile. The private node key is part of that state, so when you switch back to a server you've used before, Tailscale picks up where it left off with no login prompt.

It runs as a Windows service (ganoidd) with an embedded web UI and REST API. A system tray app (ganoid) sits in the notification area, shows the current connection status, and lets you switch profiles with one click.

The tricky part was figuring out the state file format. server-state.conf is a JSON file where every value is base64-encoded. The ControlURL is embedded in the profile entries, so before backing up or restoring, Ganoid verifies the state actually belongs to the profile being switched. This prevents corrupting a backup by writing the wrong server's state into it.

Only tested on Windows. Linux/macOS stubs compile but do nothing useful. The platform layer is abstracted so it should be straightforward to implement for other OSes.

This was vibe coded, but I have been running it myself and it does what I need it to do. Putting it out there in case someone else finds it useful. Ideas for improvement or PRs are always welcome.

The name comes from ganoid scales, the hard interlocking scales found on primitive fish like gars and sturgeons. Tailscale has scale in the name, so it felt fitting.

GitHub: https://github.com/yashau/ganoid

[0]: https://github.com/juanfont/headscale

Similar Projects

Docker setup for Headscale (self-hosted Tailscale control server)

Convenience wrapper for Headscale when the official Docker image already exists.

CozyShip It
hwdsl2
122mo ago

AppSwitcher – Bringing rmmd-style app switching to Windows

Yet another Windows launcher competing with PowerToys Run and Flow Launcher.

Solve My ProblemNiche Gem
ipatalas
102mo ago