Skip to content

mogglemoss/lazytailscale

Repository files navigation

lazytailscale

License: MIT Go Built with Charm

A terminal dashboard for your Tailscale network. Two-pane keyboard-driven TUI: peer list on the left, selected-peer detail on the right. Runs entirely from your local Tailscale socket — no API key, no cloud, no opinions about your network topology.


lazytailscale


Features

Peer list

  • All nodes on your tailnet, sorted online-first then alphabetically
  • Status dots: green (online) · amber (seen < 5 min) · red (offline)
  • Exit node and subnet router indicators
  • Live node count with filter-aware paginator

Per-peer detail

  • Tailscale IP and MagicDNS name
  • Connection type: ◈ direct (peer-to-peer) or ◌ relayed (via DERP relay)
  • OS, last contact, last WireGuard handshake
  • Exit node status with one-key toggle (e)
  • Advertised subnet routes
  • ACL tags
  • Key expiry warning when ≤ 14 days remaining

Latency

  • Pings the selected peer every 10 seconds via TSMP
  • Sparkline of last 8 results with avg / min / max and trend arrow (↓ improving · ↑ degrading)
  • Color-coded: green < 10ms · amber < 50ms · red ≥ 50ms · for failed

Connect

  • enter on a peer opens a centered connection picker modal
  • SSHenter fast-paths directly if credentials are saved for that host; s opens the form to review or edit username and port; suspends the TUI and hands off the terminal cleanly, resuming with a welcome-back message on exit; connection failures surface a dismissable error panel rather than a silent flash
  • RDP — opens the platform RDP client (open rdp:// on macOS, xfreerdp/remmina on Linux, mstsc on Windows)
  • VNC — opens the platform VNC viewer (open vnc:// on macOS, vncviewer/xdg-open on Linux); credentials handled by the viewer app

SSH server mode

  • --serve runs lazytailscale as a Wish SSH server — no client install needed
  • ssh yourhost -p 23234 gives any user on your tailnet the full interactive dashboard
  • Each connection gets its own isolated session; the dashboard talks to the local tailscaled socket
  • --port and --host flags control the bind address (defaults: 0.0.0.0:23234)

Connection control

  • Connect and disconnect Tailscale from within the TUI (u)
  • Status bar reflects current node state: NODE NOMINAL · NODE UNREACHABLE · DISCONNECTED

Notifications

  • Status bar briefly notes when a peer connects or disconnects between polls
  • Exit node flash: pulses in the status bar when an exit node is activated or deactivated
  • Refresh heartbeat: appears in the status bar after each successful peer fetch

Filter

  • / activates the peer list filter; matches against hostname, Tailscale IP, OS, and MagicDNS name
  • Scroll indicators (▲ / ▼) appear when the list is taller than the viewport

Theming

  • Built-in Charm Native palette (hot pink · mint · soft purple)
  • Automatically adopts your Omarchy theme when detected — reads ~/.config/omarchy/themes/current/colors.toml, no configuration required
  • AdaptiveColor throughout for correct rendering in both light and dark terminals

Demo mode

  • --demo runs with a fictional tailnet — no Tailscale installation required
  • Useful for screenshots, testing, or trying it out before committing

Installation

Homebrew (macOS / Linux)

brew install mogglemoss/tap/lazytailscale

AUR (Arch Linux / Omarchy)

yay -S lazytailscale-bin # or paru -S lazytailscale-bin

go install

go install github.com/mogglemoss/lazytailscale@latest

From source

git clone https://github.com/mogglemoss/lazytailscale cd lazytailscale go build -o lazytailscale . ./lazytailscale

Requires tailscaled running locally. On Linux the process must have access to /var/run/tailscale/tailscaled.sock — run as the user who owns the Tailscale session, or with appropriate permissions.


Key Bindings

Key Action
/ k Previous node
/ j Next node
enter Open connection picker for selected node
e Toggle exit node on / off
u Connect / disconnect Tailscale
p Ping selected node now
r Toggle subnet routes expanded view
c Copy address to clipboard (MagicDNS preferred)
/ Filter peer list (hostname · IP · OS · DNS)
R Refresh peer list
? Toggle full help
q / ctrl+c Quit

Inside the connection picker:

Key Action
enter / s SSH (fast-path if credentials saved; s always shows form)
r RDP
v VNC
esc Cancel

Mouse: click to select · scroll wheel to navigate list or scroll detail pane.


Technical Specifications

Parameter Value
Data source tailscaled LocalClient · no API key · no external requests
Poll interval 5s peers · 10s ping
Ping type TSMP
Ping history 8 samples per node, ring buffer
SSH tea.ExecProcess · clean terminal handoff · no pty management
RDP open rdp:// / xfreerdp / remmina / mstsc · detected at runtime
VNC open vnc:// / vncviewer / xdg-open · detected at runtime
SSH server Wish · --serve --port 23234
Clipboard pbcopy / xclip / wl-copy · detected at runtime
Theming Omarchy auto-detected · built-in Charm Native fallback
Runtime dependencies None

Not Affiliated

lazytailscale is not affiliated with or endorsed by Tailscale Inc. It reads from the local socket and means no harm.


License

MIT. See LICENSE.

About

A terminal dashboard for your Tailscale network. Two-pane keyboard-driven TUI: peer list on the left, selected-peer detail on the right. Runs entirely from your local Tailscale socket — no API key, no cloud, no opinions about your network topology.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors