{"adoption": {"forks": 36, "observed_at": "2026-09-03T02:15:05.482448+00:00", "stars": 1016}, "canonical_url": "https://ross.abutalabs.com/products/trayscale", "card": {"archived": false, "artifact_type": "application", "description": "An unofficial GUI wrapper around the Tailscale CLI client.", "domain": ["networking", "privacy", "security", "self-hosted"], "enriched": true, "function": ["gui", "vpn", "networking"], "health_score": 100, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["DeedleFake/trayscale"], "name": "DeedleFake/trayscale", "platform": ["go"], "pushed_at": "2026-09-02T22:49:37+00:00", "repo": "DeedleFake/trayscale", "stars": 1016, "tags": ["tailscale", "gtk4", "libadwaita", "flatpak", "system-tray", "mesh-vpn", "wireguard", "desktop-client", "aur", "linux", "desktop", "macos"], "topics": ["tailscale", "golang", "hacktoberfest", "linux", "gtk4", "libadwaita"], "urls": [], "use_cases": ["manage tailscale through a gui on linux", "tailscale system tray icon for gnome or other desktops", "graphical client for my tailscale vpn instead of the cli", "toggle tailscale exit nodes without typing commands", "control tailscaled from a linux desktop app", "unofficial tailscale client with a settings ui"], "what_it_is": "Trayscale is an unofficial GTK4/libadwaita GUI for the Tailscale daemon, built primarily for Linux desktops where no official graphical client exists. It provides a system tray icon and a comprehensive UI that wraps the tailscale CLI and tailscaled daemon to manage connections and most Tailscale features.", "when_to_avoid": ["You need an officially supported client with vendor backing and guarantees", "You need a working tray icon on macOS, which is untested and unsupported by the developer", "You are comfortable with the tailscale CLI and don't need a graphical interface", "You need a mobile or Windows client, for which official Tailscale apps exist"], "when_to_choose": ["You run Tailscale on a Linux desktop and want a GUI and tray icon rather than CLI commands", "You use a GTK/libadwaita desktop like GNOME and want a native-feeling client", "You want easy installation via Flathub, the AUR, or Nixpkgs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/trayscale", "repo": "DeedleFake/trayscale", "role": "main", "score": 100}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:05.482448+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:11:54.410176+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8b3ed208543cc097eb390fd5159024a96179c010d0b01384f92e89dbd28f9864", "fetched_at": "2026-09-03T02:15:05.482448+00:00", "kind": "readme", "missing": false, "url": "https://github.com/DeedleFake/trayscale"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 100}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1619, "days_push": 0, "days_rel": 2, "gap_med": 4, "n_releases_24m": 30}, "score": 100, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}