Repository navigation
Releases
v2.1.0 - Peer status and packages
Hanuchi now shows who is online, ships as .deb and .rpm, and has a new icon.
Added
- Peer status. Every member shows whether it is online, offline or unreachable, and whether the link is direct or through a relay. The sidebar shows "N of M online" for each network.
- Auto refresh. State is re-read every 10 seconds. The page is only rebuilt when something changed, and the scroll position is kept.
- Separate IPv4 and IPv6. Your own address is split into two rows, each with its own copy button. The client ID is shown and copyable too.
- .deb and .rpm packages are attached to this release, built by CI in Debian 13 and Fedora containers.
- Keyboard shortcuts: Ctrl+R / F5 refresh, Ctrl+J join, Ctrl+N create, Ctrl+, settings, Ctrl+Q quit.
- New icon and new screenshots in stock Adwaita.
Changed
- Compact network page. Name, ID, capacity, status and owner fit in one header, so the member list starts right away instead of below the fold.
- Leave and Delete ask first. Deleting a network used to happen on one click.
- Errors are shown. Join, create, leave, delete and going online/offline now report hamachi's reason in a toast (for example "invalid password") instead of failing silently.
- Hamachi not running now shows a proper status page with a start button, and the power button is hidden until the daemon is up.
- Settings use
Adw.PreferencesDialogwith combo rows. The join/create dialog has proper entry rows: Enter confirms, Esc closes. - Network statuses and your own status are translated instead of showing hamachi's English strings.
Fixed
- The network password was visible in
psand in the log. It is now passed to hamachi on stdin. - Copying your IP also copied the IPv6 address after it.
- The window grew when a network was opened and stayed that size after going back home. Pages now scroll inside the fixed-size window.
- Going home did not stick: the next refresh re-opened the last network.
- Overlapping refreshes could apply out of order. Only the newest result is used now.
Install
- Arch:
yay -S hanuchi - Debian 13 / Ubuntu 24.04+:
sudo apt install ./hanuchi_2.1.0_all.deb - Fedora:
sudo dnf install ./hanuchi-2.1.0-1.*.noarch.rpm
Hamachi itself (logmein-hamachi) is not in the Debian or Fedora repos, so install it from vpn.net first.
v2.0.1 - Moderation fixes
Bug-fix release on top of 2.0.0.
Fixed
- Kick/Ban sent a bogus client id. Peer lines in
hamachi listare prefixed with a status marker, so the parser took*as the client id and the command silently did nothing. The id is now located by its shape (123-456-789), and the moderation buttons only appear once it parsed cleanly. - Ban did not ban.
hamachi rejectonly declines pending join requests, so it was a no-op against an already joined peer. Ban now evicts the member and locks the network to manual approval; the confirmation text matches what actually happens. - Crash on libadwaita < 1.5.
Adw.AboutDialogandAdw.AlertDialogrequire 1.5, which Debian 12, Ubuntu 22.04 and Fedora 39 do not ship. The app now falls back toAdw.AboutWindow/Adw.MessageDialog; the documented minimum is libadwaita 1.2. - Silent failures. Kick and Ban now report success or the daemon's error in a toast.
hamachiexits 0 even when it refuses a command, so its output is inspected as well as the exit code. - Runaway refresh loop. The background-action idle handler returned a truthy value, making GLib re-run it forever after every action.
Changed
- The version is now injected by Meson at build time instead of being hardcoded in the script.
v2.0.0
A big quality-of-life release that pulls everything together into a more polished app.
✨ Highlights
- Member moderation: network owners can now Kick (
hamachi evict) and Ban (hamachi reject) peers directly from a network's member list, each with a confirmation dialog. - Light / Dark theme: a Theme selector (System / Light / Dark) in Settings, applied instantly and remembered across launches.
- Instant language switching: changing the language now applies immediately — no restart required.
- About dialog: added to the menu, with links to the source repository and advnirr.org.
- Zero-config setup: auto-starts the daemon and registers your node with Hamachi on first launch.
🏗️ Under the hood
- Built with the Meson build system and a standard GNOME layout (AppStream metainfo, desktop file validation).
- Network refresh runs off the UI thread, so a slow daemon can't freeze the window.
- Fixed peer-list parsing (real nicknames/IDs), owner detection, and language persistence.
📦 Install
- Arch: `yay -S hanuchi` (AUR) or `cd pkg/ && makepkg -si`
- Other: `meson setup build --prefix=/usr && ninja -C build && sudo ninja -C build install`
🤖 Generated with Claude Code
v1.3.0 - Meson build system
🏗️ Build System
Hanuchi now uses the Meson build system with a standard GNOME project layout.
meson.buildinstalls the app, desktop file, icon, license and a new AppStreammetainfo.xml;gnome.post_install()refreshes the icon cache and desktop database.- Restructured into
src/anddata/. install.sh/uninstall.shreplaced bymeson/ninja.- Desktop file and AppStream metainfo are validated via
meson test.
Install (non-Arch)
meson setup build --prefix=/usr
ninja -C build
sudo ninja -C build installArch users: yay -S hanuchi or cd pkg/ && makepkg -si.
📝 Notes
This release contains no application behaviour changes over v1.2.0 — it is a packaging/structure migration. Flatpak was ruled out (Hamachi needs kernel-level TUN/TAP interfaces that can't run in the sandbox). Closes #1.
🤖 Generated with Claude Code
v1.2.0 - Zero-config Setup
✨ New Features
- Automatic registration: On first launch, Hanuchi now auto-starts the
logmein-hamachidaemon and registers your node viahamachi login— no terminal needed. Each step runs once per session, so there's no retry loop.
🔒 Security
Code now passes a bandit scan with 0 issues:
pkexec/systemctlare resolved withshutil.whichinstead of partial paths (B607).subprocesscalls are documented with scoped# nosec(B404/B603) — they only ever use fixed argument lists, nevershell=True.- False-positive "password" warnings on translated UI labels suppressed (B105).
🐛 Bug Fixes
- Peer list showed the IP instead of the name: members are now parsed as
<member id> <nickname> <ip>, so real nicknames and member IDs are displayed. - Owned vs joined networks: ownership is now detected via "This computer" instead of the bare word "owner", so joined networks are no longer mislabelled as Hosted (correct Leave/Delete action).
- UI no longer freezes: the status/network fetch now runs on a worker thread instead of the GTK main thread, so a slow or hung daemon can't lock up the window. All subprocess calls also have timeouts.
- Language setting: switching away and back to the original language in one session now persists correctly (previously it silently kept the intermediate language).
- Open network view persisted across refreshes: a refresh (e.g. after a power toggle) no longer kicks you back to the dashboard.
- Untranslated "Password" label in the join/create dialog is now localized.
- Fixed an import-time crash on the config error path, replaced deprecated
locale.getdefaultlocale()(removed in Python 3.12+) withLANG/LC_*detection, and replaced silentexcept: passblocks with logged, specific handling.
🤖 Generated with Claude Code
v1.1.0 - Stable Release
Merge branch 'main' of https://github.com/Inklare/hanuchi