github keithvassallomt/ClusterCut v0.4.0

6 hours ago

Release v0.4.0

Fixed

  • Devices in a provisioned cluster now share one PIN as intended. Previously each device kept its own (often auto-generated) PIN, so a device that joined couldn't be paired with using the admin's cluster PIN. A device that joins a provisioned cluster now automatically switches to Provisioned mode and adopts the cluster's shared PIN (which it already entered to pair), so every device converges on the same value. The PIN is not sent over the network — the joiner reuses the one it typed.
  • Fixed a pairing failure ("server cert fingerprint mismatch") that could stop a device from joining when the local peer list held more than one stale entry for the target's IP (e.g. leftover records from earlier test rounds). The mTLS client now accepts the peer's cert if it matches any fingerprint pinned for that address, instead of an arbitrary first match that could be a stale one.
  • Joining a cluster now works with the PIN of any of its online devices. Previously "Join" tried a single, arbitrarily-chosen member, so the correct PIN was rejected unless it happened to belong to that one device. Join now tries the entered PIN against each online member until one accepts it.
  • Leaving a cluster now reliably removes the departing device from the other members. The "I'm leaving" broadcast was sent as a background task and then immediately raced by the local reset that wiped the very keys needed to send it, so peers usually never got the message and kept the device pinned in their cluster (a stale entry that survived restarts and spawned "Unidentified" re-probe ghosts). The departure is now sent and confirmed before the reset. The same race is fixed for kicking a device.
  • After a device leaves and re-appears under its new cluster name, already-running peers now see the new cluster without needing an app restart. The long-lived mDNS browse caches resolved services and wouldn't re-resolve a device that re-registered under a new cluster, so the new cluster stayed invisible until a restart (which starts a fresh browse). Now, when a peer is seen leaving, the app runs a fresh short-lived mDNS scan (empty cache, like a restart) that picks up the leaver's new cluster and refreshes the rest. A leaving device also takes a fresh device id so it re-appears as a brand-new service, and its mDNS de-registration is flushed before re-registering.

Changed

  • Device identifiers are now UUIDs, making it effectively impossible for two devices to independently generate the same id (the old 32-bit value could collide, especially on VMs provisioned from a shared template with correlated startup entropy).
  • Pairing now prunes stale local peer records that share the newly-paired device's IP on the local network (old device-ids from before a reset, manual-<ip> placeholders), so the peer list doesn't accumulate cruft. Remote/NATed addresses are left alone since they can host several devices.
  • Joining a cluster now tries at most 9 of its online devices; if none accept the PIN it asks you to try the PIN from a different device, keeping well under each device's pairing lockout threshold.
  • Leaving/resetting a cluster now also resets the shared cluster-name history to this device, so the fresh cluster's name converges correctly once other devices join it (previously it kept the previous cluster's name-version origin, which pointed at a device no longer present).

📦 Installation

Linux
If you're on a modern Linux distribution (i.e. with Wayland and Flatpak support), the recommended method of installing ClusterCut is via FriendlyHub.

Tip

If you need X11 support, or don't have Wayland/Flatpak support, use the RPM or DEB files from the assets in this release.

macOS
Download the DMG file from the assets of this release.

Windows
Download the EXE file from the assets of this release.


Full Changelog: https://github.com/keithvassallomt/ClusterCut/blob/main/CHANGELOG.md

Don't miss a new ClusterCut release

NewReleases is sending notifications on new releases.