- C++ 42.7%
- C 27.8%
- QML 24.4%
- Python 2.4%
- Shell 2.3%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Build aarch64 rpm / build (push) Successful in 4m57s
Onboarding renovate |
||
| .forgejo/workflows | ||
| .opencode/skill/sailfish-sdk-build | ||
| .openrepos | ||
| app | ||
| daemon | ||
| rpm | ||
| scripts | ||
| .gitignore | ||
| AGENTS.md | ||
| BUILD.md | ||
| CONTRIBUTING.md | ||
| harbour-tailscale52.pro | ||
| LICENSE | ||
| README.md | ||
| renovate.json | ||
| THIRD_PARTY_NOTICES.md | ||
finnscale (harbour-tailscale52)
A native Tailscale client for Sailfish OS 5.2 ("Finlayson" / Jolla Phone JP2026) and later. Written from scratch — no Android layer, no setuid binaries in the app. Unofficial, community-built, open source (MIT).
Naming trivia. The project was first nicknamed sailfin (Sailfish + Tailscale — a fish has fins), but that name was already taken by a Jellyfin client. The rename to finnscale keeps the fish (fin), keeps Tailscale (scale), and tips its hat to Finland — home of Jolla and the Sailfish community, and of some of the nicest colleagues the author has worked with. Hyvää päivää!
The rpm/app id remains
harbour-tailscale52for upgrade continuity.
What it does
- Connect / disconnect the VPN, with live status (backend state, your Tailscale IPs, device list split into Personal / Tagged sections)
- Log in with a choice of browser link, copyable link, or QR code
- Exit nodes: browse by country, drill into cities, pick a node, or star favorite countries and let Quick connect probe three random online nodes and select the lowest-latency one
- Public exit verification: shows the exit node's real public IP and city (looked up through the tunnel via ifconfig.co) so geo-spoofing surprises are visible at a glance
- Toggles: Tailscale DNS (MagicDNS) and local-network access while an exit node is active
- Diagnostics: parseable status block, rolling operation log,
tailscaled journal,
tailscale netcheck, one-tap copy for bug reports - Peer details: every address (IPv4/IPv6/FQDN), tap-to-copy, and
tailscale pingwith a Direct / Relayed-via-DERP verdict
Architecture
The UI app runs fully sandboxed (sailjail) and talks over DBus to a
small privileged daemon that wraps whitelisted tailscale/systemctl
operations. It ships the official static Tailscale release binaries
(vendored from pkgs.tailscale.com) and manages the tailscaled systemd
service. See AGENTS.md for the full design notes.
Built the OSS way
Proudly built on Fedora Linux with podman (no docker anywhere on the dev machine), using the official Tailscale release binaries, developed with OpenCode and the GLM 5.2 model — because open source wins.
Requirements
- Sailfish OS 5.2 or newer (aarch64 rpm for JP2026 — the only built and supported target)
- Developer mode (to install the rpm and enable
tailscaled)
Build
See BUILD.md — Fedora + podman instructions, including the rootless UID-mapping setup. TL;DR:
podman pull docker.io/coderus/sailfishos-platform-sdk:5.2.0.15
# one build command, see BUILD.md
Install
scp RPMS/harbour-tailscale52-<version>.aarch64.rpm defaultuser@<phone>:~
ssh defaultuser@<phone> devel-su pkcon install-local -y harbour-tailscale52-<version>.aarch64.rpm
The package restarts its control daemon and heals its sandbox permissions automatically; then launch Tailscale from the app grid and log in.
Disclaimers
harbour-tailscale52 is an unofficial, community-built open-source client. It is not built, maintained or endorsed by Tailscale. Not compatible with headscale coordination servers. Public IP/location lookup for exit nodes uses ifconfig.co (disclosed in the app's About page).
License
MIT — see LICENSE. Vendored components: Nayuki QR-Code generator
(MIT); Tailscale binaries redistributed unmodified from official
release artifacts (their upstream licenses apply).