Repository navigation
Releases: YELrhilassi/kvmshare
Release list
kvmshare v0.8.9
Bugfix release: kills the full-core CPU spins in the GUI.
The bug: after a Wi-Fi blackout, sleep/resume, or any interface flap, kvmshare-gui burned 100% of one core indefinitely (both machines observed: 42 CPU-minutes on the PC, 96% live on the HP). Two mDNS paths kept looping on dead state:
- the mDNS browser spun on its resolver's closed entries channel (a closed channel is always ready in a select — every session transition fed the spin)
- the zeroconf responders spun on dead sockets that error instantly after the interface came back
Both now end their goroutine; the next discovery cycle rebuilds them.
Also: the GUI now self-diagnoses — if the process ever burns ~a full core for 12 seconds, it dumps every goroutine's stack to gui-cpudump.txt in the state dir, naming the culprit without a debugger.
Install from a terminal (no SmartScreen/Gatekeeper prompts):
curl -fsSL https://github.com/YELrhilassi/kvmshare/releases/download/v0.8.9/install.sh | shirm https://github.com/YELrhilassi/kvmshare/releases/download/v0.8.9/install.ps1 | iexnpx github:YELrhilassi/kvmshare
Every download is verified against SHA256SUMS (GitHub per-asset digests as fallback) before anything executes. Pin: sh install.sh v0.8.9. Uninstall: sh install.sh --uninstall.
kvmshare v0.8.8
Portable kvmshare release.
Install from a terminal (no SmartScreen/Gatekeeper prompts):
curl -fsSL https://github.com/YELrhilassi/kvmshare/releases/download/v0.8.8/install.sh | sh # Linux / macOS / WSLirm https://github.com/YELrhilassi/kvmshare/releases/download/v0.8.8/install.ps1 | iex # Windowsnpx github:YELrhilassi/kvmshare # anywhere Node 18+ runs
The bootstrap scripts verify every download against SHA256SUMS (with GitHub's per-asset digests as fallback) before executing anything, then hand off to the Go installer: archive download + verify + atomic binary apply + desktop integration (udev input access on Linux; shortcuts, elevation tasks, firewall on Windows). Pin a version: sh install.sh v0.8.8 / install.ps1 -Tag v0.8.8. Uninstall: sh install.sh --uninstall.
In this release
- Terminal bootstrap installers (sh / PowerShell / npx) — the no-clicks path for unsigned binaries
- Security hardening: UDP cursor stream bound to the TCP handshake's IP (forged beacons/crossings from another machine rejected), frame-length caps enforced before buffering, unknown frame flags rejected, strict ScreenInfo/config validation
- Reconnect: bounded connection attempts (a revived Wi-Fi link is caught in seconds, not minutes); accept-loop handshakes no longer block other clients
- GUI: idle CPU cut (config cache, tray cadence) — Task Manager shows the webview's helper processes next to kvmshare-gui; the tray icon is drawn by the GUI process, while KVM sessions survive a GUI restart
- Client injectors now log dropped unmapped keys (throttled) — 'some keys do nothing' is no longer silent
- Trust model documented honestly in docs/04-wire-protocol.md §4.7
v0.8.7 — shortcut recording fixed
Shortcut recording could silently swallow the whole keyboard: the capture bridge waited forever on the hook's pump thread while the session was already armed, so no key ever reached the page and every recording hung. The hook now installs in the background, the bridge returns instantly, and the session state machine is unit-tested (arm/disarm/replace/TTL). Held-only chords (e.g. Super pressed and released with no second key) complete cleanly instead of hanging the recording. Super+Tab records with live chip feedback and fires as an OS-override.
🤖 Generated with Codebuff
Co-Authored-By: Codebuff noreply@codebuff.com
kvmshare v0.8.6
Portable kvmshare release. Download the installer for your platform (or the full archive) and run it — it fetches and verifies everything itself.
v0.8.5 — duty-cycled discovery, fail-proof manual refresh
Discovery rebuilt: bounded sessions instead of free-running loops
- Duty cycle: announce/probe traffic now runs in bounded sessions owned by a coordinator. A role start seeks at full rate; an attached session drops to the connected rate; a session that expires without hearing anyone grounds the engine (idle) — no background churn, and the UI's new
DiscoveryStatusshows the state and failed-session count verbatim. - Manual refresh is fail-proof: it rebuilds a dead listener on the spot, clears the peer map, runs several announce+probe rounds, and reports a real error to the UI when it cannot run (previously it could silently no-op when the listener socket was down — exactly when users press Refresh).
- ProbeHost: a direct "are you a kvmshare machine?" call to any address — no broadcast, no multicast, no cached state. The manual path of last resort that works whenever IP reachability works.
- Probe sweeps now cover non-/24 subnets via directed broadcast instead of dropping them.
- Health warnings fire only while a session is actually listening; an idle engine is quiet by design.
- Frontend surfaces refresh errors as plain sentences.
Upgrade: run the installer (or kvmshare-install). After updating both machines, each shows the other's true state instantly; pressing Refresh always re-probes from scratch or tells you why it could not.
v0.8.4
Protocol version range negotiation: machines running different kvmshare releases pair as long as their wire protocols are in range, and refusals now say both versions and point at the fix (update the older machine). Wheel-daemon Windows stub no longer console-based.
v0.8.3
Hardened chord-capture lifecycle: deterministic hook/DOM ear selection, real TTL-expiry notification with DOM re-arm, serialized hook startup. Ships the v0.8.2 fixes (OS-boundary chord recording, no console flash).
v0.8.2
Shortcut recording at the OS boundary: while recording, every physical key is swallowed before the shell sees it — register Super+Tab (or any OS-bound chord) without the native action firing. Roles no longer flash a console window on Windows (windowsgui subsystem). LiveKeys panel removed.
v0.8.1
Per-role elevation tasks with an argv args-file contract: roles the GUI starts on Windows run elevated (Task Manager / installer input works). Task creation rides the install and self-heals from the GUI for admin users. Fixes the v0.8.0 elevation model, whose task XML value was rejected by schtasks (RunLevel must be HighestAvailable in XML — the /RL HIGHEST CLI equivalent), which silently degraded every elevated spawn to non-elevated.
kvmshare v0.8.0
Windows role elevation (scheduled-task spawn, standard-user fallback), cross-process config locking, id-based session matching.