KTailctl v0.22.0
This is a major release built on top of a near-complete rewrite of the codebase.
The backend was reimplemented from scratch around a generic property-based list model, the C++/QML integration was modernized, and the build, testing and CI infrastructure were overhauled.
On the surface, the peer list, exit node page, settings page and tray menu were redesigned, multi-account switching was reimplemented and many smaller features and bugfixes were added.
Features & Enhancements
Peer list & peer details:
- Redesign the peer list and make it load noticeably faster
- Filter peers by DNS name (case-insensitive) and by online/Mullvad status
- Sort peers by DNS name and highlight the current node
- Show tags on the peer list (optional) and on the peer info page
- Show peer details in a separate column when enough space is available
- Show location and country flag, primary routes, public key, and "last seen"/"created" timestamps
- Add descriptions and copy buttons for the individual peer details
- Add links to the Tailscale admin panel
Exit nodes:
- Redesign the exit node page to match the new peer list
- Set and unset exit nodes from the UI and the tray menu
- Group Mullvad exit nodes by country with flags and use the location for descriptions/tooltips
- Manage self-hosted exit nodes
- Toggle exit node "allow LAN access" from the exit node and settings pages
- Suggest an exit node and allow switching back to the last used one
- Filter exit nodes by DNS name, country and city
Tray menu & icon:
- Reworked tray menu with dedicated submenus for self, peers, exit nodes and accounts
- Indicate exit node usage in the tray icon
- Add a tooltip showing Tailscale status, IP and current exit node
- Add node icons (smartphone or computer) and a Mullvad icon for submenus
- Toggle Tailscale on/off and switch the tray icon theme
- Show country flags for Mullvad exit nodes grouped by country
Accounts:
- Reimplement multi-account support including switching
- Edit and refresh account names
Settings & configuration:
- New settings page wired up to Tailscale preferences (SSH server, operator, exit node LAN access, ...)
- Integrate KConfig and automatically save the application configuration
- Add a login profiles page showing detailed information about each profile
Status & error handling:
- Show an inline message when Tailscale needs to be authenticated
- Show an inline message when the user is not the Tailscale operator
- Show an inline message when
tailscaledis not running
Fixes
- Fix refreshing of the Tailscale status while the window is hidden
- Fix self-hosted exit node integration
- Work around a Qt 6.10 double free with a custom string filter model
- Force the Breeze/Breeze-dark icon theme and make sure Breeze icons are used (Flatpak)
- Give the Flatpak network access so user avatars can be fetched
- Fix and homogenize the exit node list entries
- Fix the tray icon not updating on theme or backend state changes
- Many smaller UI fixes (copy buttons, filter icon, page highlighting, settings toggles, ...)
Chores
This release rewrites large parts of the project. The most relevant internal changes:
C++/QML:
- Reimplement the backend around a generic
PropertyListModeland regenerated Tailscale status objects - Use modern QML registration macros and bump the C++ standard to 23
- Enable KDE compiler settings and make the codebase comply with them
Go:
- Update
tailscale.com,golang.org/x/netand the rest of the Go dependency chain - Bump Go to the latest version supported by the Flatpak SDK extension (incl. several security fixes)
- Make
golang.org/x/netan indirect dependency
Build system:
- Add infrastructure for and a large number of unit tests
- Optionally fetch and vendor the required Go version via CMake
- Dynamically discover and register country flag icons and generate themed tray icon variants
CI & tooling:
- Modularize the CI using scripts and add a native build
- Integrate clang-tidy, clazy, cppcheck, include-what-you-use, CodeQL, govulncheck, Google's OSV scanner, shellcheck and actionlint
- Run pre-commit hooks via
prekand add hooks for Go, Python, QML, CMake, YAML and shell - Switch dependency updates from Renovate to Dependabot and remove the Nix flake/devshell
- Support creating beta releases
Documentation
- Add a new README with updated screenshots
- Update the Fedora dependency scripts (including debug dependencies)