Unofficial tailscale application for Sailfish OS
  • C++ 42.7%
  • C 27.8%
  • QML 24.4%
  • Python 2.4%
  • Shell 2.3%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Renovate Bot 27144622c3
All checks were successful
Build aarch64 rpm / build (push) Successful in 4m57s
chore: Configure Renovate (#3)
Onboarding renovate
2026-10-02 20:57:17 +00:00
.forgejo/workflows openrepos: prep workflow (bundles rpm+checksums+descriptions+screenshots for manual upload — OpenRepos has no API); dual SHA256+SHA512 checksums; screenshots scaffolding; updated publish procedure docs 2026-08-24 08:57:22 +01:00
.opencode/skill/sailfish-sdk-build v0.4.0: favorite countries with latency-based quick connect (pingOnce probing), netcheck diagnostics; add BUILD.md (Fedora/podman), AGENTS.md (conventions + platform landmines), project build skill, README with OSS credits 2026-08-23 14:59:02 +01:00
.openrepos openrepos: prep workflow (bundles rpm+checksums+descriptions+screenshots for manual upload — OpenRepos has no API); dual SHA256+SHA512 checksums; screenshots scaffolding; updated publish procedure docs 2026-08-24 08:57:22 +01:00
app refactor: replace deprecated qsrand/qrand with std::rand, QRegExp with QRegularExpression (#1) 2026-09-08 19:55:33 +00:00
daemon refactor: replace deprecated qsrand/qrand with std::rand, QRegExp with QRegularExpression (#1) 2026-09-08 19:55:33 +00:00
rpm v0.4.3-rc1: rc-aware version gate (base must match, -suffix flows into rpm Release), unified suffix handling; 0.4.3 version bump 2026-08-23 21:41:23 +01:00
scripts scripts: OCR-based screenshot blur tool — detects IPs (v4/v6/100.x), tailnet domains, emails, DERP relays; blurs only those regions; logs every action for verification 2026-08-24 09:19:39 +01:00
.gitignore v0.3.0: sandboxed app + privileged DBus daemon; login (browser/copy/QR), logout, ping verdicts, exit-node browser by country, Tailscale DNS toggle preserving prefs, This-device page, diagnostics with journal, polling transport (sandbox-safe) 2026-08-23 10:49:58 +01:00
AGENTS.md docs: project name is finnscale (sailfin taken by a Jellyfin client) — naming trivia in README; repo rename deferred to public release 2026-08-23 21:06:51 +01:00
BUILD.md docs: public URL forgejo.ikigai.free/ews-network/finnscale; CI docs now describe workflows-on-main 2026-08-24 08:15:16 +01:00
CONTRIBUTING.md docs: public URL forgejo.ikigai.free/ews-network/finnscale; CI docs now describe workflows-on-main 2026-08-24 08:15:16 +01:00
harbour-tailscale52.pro v0.3.0: sandboxed app + privileged DBus daemon; login (browser/copy/QR), logout, ping verdicts, exit-node browser by country, Tailscale DNS toggle preserving prefs, This-device page, diagnostics with journal, polling transport (sandbox-safe) 2026-08-23 10:49:58 +01:00
LICENSE license: add actual MIT text (was only declared, never committed) + THIRD_PARTY_NOTICES for redistributed Tailscale binaries (BSD-3) and vendored qrcodegen (MIT) 2026-08-23 21:13:37 +01:00
README.md docs: point repo URLs at finnscale (rename staged for public release); README trivia note updated 2026-08-24 08:04:38 +01:00
renovate.json chore: Configure Renovate (#3) 2026-10-02 20:57:17 +00:00
THIRD_PARTY_NOTICES.md license: add actual MIT text (was only declared, never committed) + THIRD_PARTY_NOTICES for redistributed Tailscale binaries (BSD-3) and vendored qrcodegen (MIT) 2026-08-23 21:13:37 +01:00

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-tailscale52 for 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 ping with 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).