MCPcopy Index your code
hub / github.com/DeedleFake/trayscale

github.com/DeedleFake/trayscale @v0.18.9

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.18.9 ↗ · + Follow
252 symbols 721 edges 24 files 42 documented · 17% updated 2mo agov0.18.9 · 2026-04-29★ 97853 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Trayscale

Go Report Card

Trayscale is an unofficial GUI interface for the Tailscale daemon particularly for use on Linux, as no official Linux GUI client exists. It provides a basic system tray icon and a fairly comprehensive UI with support for many of Tailscale's features.

Disclaimer: This project is in a beta state. There may still be undiscovered bugs or compatibility issues. Use at your own risk.

screenshot

Tailscale Config

Trayscale interfaces with the Tailscale daemon, tailscaled, to perform many of its operations. In order for this to work, the daemon must have been configured with the current user as the "operator". To do this, run sudo tailscale set --operator=$USER from the command-line at least once manually.

Installation

Download on Flathub

Note that the above config note about the current user being designated as an "operator" still applies to the Flatpak version of this app. However, the tailscale client is bundled into the Flatpak and thus does not need to be in your $PATH.

AUR

If you are on Arch Linux or a derivative, Trayscale is available from the AUR.

Manual

First, make sure that you have dependencies installed:

  • Go >= 1.24
  • GTK >= 4.0
  • Libadwaita >= 1.6

The main Trayscale binary can be installed with go install:

$ go install deedles.dev/trayscale/cmd/trayscale@latest

If you would like, you can also copy the .desktop file, the icon, and other pieces of extra metadata into the places that they need to be put to function properly:

  • dev.deedles-trayscale.desktop -> $HOME/.local/share/applications/
  • dev.deedles.Trayscale.png -> $HOME/.local/share/icons/hicolor/256x256/apps/

Note that without copying both of these files into the correct locations, notifications will likely not function correctly in GNOME. Also keep in mind that if the trayscale binary is not in your $PATH in a way that the desktop environment can locate then the .desktop file will not be considered valid. If this is an issue, modify the file manually and change the Exec= line to point directly to the binary with an absolute path.

macOS

First of all, please note that macOS support is not maintained or tested by the primary developer of Trayscale. Also note that the tray icon will not work in macOS.

The simplest way to install Trayscale on macOS is via Nixpkgs' unstable channel. Note that it will need to be built from source if a binary cache is unavailable and the build can take some time.

To build it locally without Nix, first make sure that you have installed the Go compiler, as well as necessary dependencies. The dependencies are available as the following Homebrew packages: * libadwaita * gtk4 * gobject-introspection * harfbuzz

Then, run the following in the root of the repository:

$ ./dist.sh build
$ ./dist.sh install-macos

Donate

Buy Me A Coffee

Extension points exported contracts — how you extend this code

Page (Interface)
Page represents the UI for a single page of the app. This usually corresponds to information about a specific peer in th [4 …
internal/ui/ui.go
Status (Interface)
(no doc) [3 implementers]
internal/tsutil/poller.go
WidgetParent (Interface)
WidgetParent is any type that has child widgets. Gererally speaking, this is every Gtk widget.
internal/gutil/gutil.go
Classy (Interface)
Classy wraps the CSS-related methods of a gtk.Widget.
internal/gutil/gutil.go
Caster (Interface)
Caster wraps the [glib.Object.Cast] method.
internal/gutil/gutil.go

Core symbols most depended-on inside this repo

SetTitle
called by 25
internal/ui/ui.go
Cast
called by 11
internal/gutil/gutil.go
Online
called by 11
internal/tsutil/poller.go
Close
called by 9
internal/tray/tray.go
GetIPN
called by 9
internal/tsutil/poller.go
Toast
called by 9
internal/ui/mainwindow.go
AddCSSClass
called by 8
internal/gutil/gutil.go
window
called by 8
internal/ui/dialogs.go

Shape

Method 127
Function 87
Struct 28
Interface 10

Languages

Go100%

Modules by API surface

internal/tsutil/poller.go29 symbols
internal/tsutil/client.go22 symbols
internal/gutil/gutil.go22 symbols
internal/ui/ui.go19 symbols
internal/ui/rowmanager.go18 symbols
internal/ui/app.go15 symbols
internal/listmodels/listmodels.go14 symbols
internal/giofs/giofs.go14 symbols
internal/ui/mullvadpage.go13 symbols
internal/tray/tray.go13 symbols
internal/ui/dialogs.go11 symbols
internal/ui/peerpage.go10 symbols

For agents

$ claude mcp add trayscale \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact