Install
The installer needs Administrator and installs to
%ProgramFiles%\Wira Desk. It offers no per-user location, and that is a decision rather
than an omission: auto-start runs the daemon elevated at every logon with no prompt, so a directory
only administrators can write is the whole thing protecting it.
The installer
Download WiraDesk-<version>-x64-setup.exe from the
releases page (mirrored on
SourceForge) and run
it. Verify it against the published SHA256SUMS first:
Get-FileHash .\WiraDesk-0.3.0-x64-setup.exe -Algorithm SHA256
winget
Coming soon. A current version is in review; until it is accepted, use the installer or Scoop.
Scoop
scoop bucket add wiradesk https://github.com/wiradeltaid/scoop-wiradesk scoop install wiradesk
Portable, without an installer
A portable zip is published beside the installer, so the program runs without one:
Unzip both executables into one folder
WiraDesk-<version>-x64-portable.zipholdswiradesk.exeandwiradesk-settings.exe. Put them in a folder only administrators can write.Run
wiradesk.exeas AdministratorThe daemon re-queries its own token at startup and refuses to run unelevated, so there is no half-working mode to get stuck in.
What Windows will say
The binaries are not code-signed yet. SmartScreen will warn on first run, and the UAC prompt will show an unverified publisher. That is expected for an unsigned build, and it is also why the full source is published: building it yourself is the strongest verification available today. On a machine with Smart App Control enforcing, the daemon will not start at all, and no setting in Wira Desk changes that.
First run
Starting the daemon for the first time does three things, and nothing else:
Writes one config file
%APPDATA%\WiraDesk\config.toml, holding the shipped defaults. Nothing is sent anywhere.Shows a tray icon
Right-click for Settings…, View Logs, Auto-Start, About and Exit. The Auto-Start checkmark follows the actual scheduled task, not a stored flag.
Runs a short first-run tutorial
The Settings window opens on an onboarding pass that shows the two things most people change first: the cycling shortcut, and auto-start.
Tray icon indicators
The system tray icon uses three visual states to communicate background daemon health without interrupting your workflow:
- Normal (clean Wira Desk icon): The background daemon and low-level keyboard and mouse hooks are healthy and listening for shortcuts.
- Warning (red dot at bottom-right): A non-fatal warning occurred. The most common trigger is enabling Auto-Start from an unprivileged folder (such as running directly from a developer workspace instead of
%ProgramFiles%), or an unreadable configuration file during reload. Right-click the tray icon and choose View Logs to inspect the exact entry inwiradesk.log. Once resolved, restarting Wira Desk restores the clean normal icon. - Critical (red cross covering the icon): The low-level Windows keyboard hook stopped responding and could not be recovered automatically by the background health check. When this happens, window switching is paused. Right-click the tray icon and choose Exit, then relaunch Wira Desk to restore keyboard interception.
If a chord does nothing
Settings → Shortcuts has a pinned Key Check band at the bottom. Press the combination and it tells you which of three things happened: the daemon saw it, another program swallowed it first, or the daemon is not running. Those need different fixes, which is why they are reported as three answers rather than one.
Update
Settings → About has Check for updates automatically (on by default) and a manual check beside it. When a newer release exists, the tray menu grows an Update to <version>… item at the top, and only then.
Choosing it downloads the release installer, verifies it against the published SHA-256 digest, and runs it with your permission. Wira Desk closes, Windows asks, and your settings are kept. You can equally download the newer setup executable yourself and run it over the old install.
Uninstall and Reset
Uninstall from Add/Remove Programs. That removes the program and the auto-start
scheduled task. An ONLOGON task with /RL HIGHEST outliving the
executable it names is the worst thing an uninstaller could leave behind.
It leaves %APPDATA%\WiraDesk\ alone. Delete that folder by hand if you want your
settings and log gone.
config.toml. Deleting the whole %APPDATA%\WiraDesk\ folder also restores the defaults, and deletes the log as well.Frequently asked
Does it collect anything?
No analytics, no crash reporting, no account, no device ID. Two things use the network: the
update check, which goes to our server at wiradelta.com with the product name, the Wira
Desk version, the Windows version and the architecture, and the installer download from GitHub,
which happens only when you ask for it. See Privacy.
Why does it need Administrator?
To activate and move windows owned by higher-integrity processes, which Windows (UIPI) blocks
otherwise, and to install the keyboard hook. It is not used to read another process’s memory:
the daemon opens processes with PROCESS_QUERY_LIMITED_INFORMATION, never
PROCESS_VM_READ. See Security.
Does it log my keystrokes?
No. The hook reads virtual-key codes and an injected-input flag to match your configured shortcuts, and records none of it. No logging call in the codebase takes a key value as an argument.
How much does it run?
One process. wiradesk.exe is under 1 MB on disk (< 850 KB) and runs within a strict < 5 MB private memory budget (~4.0 MB idle). Settings is a separate executable that only runs while the window is
open.
Does it work on Windows 10?
Untested. It is built and used on Windows 11. Nothing in it is documented as Windows-11-only, but nobody has run it on 10, so it is not claimed.
Windows on ARM?
The installer accepts ARM64 machines and Windows runs the x64 binary under its own emulation. There is no native ARM64 build and it has never been tested there. It is offered, not promised.
It clashes with a shortcut I already use.
Two ways out. Rebind it in Settings → Shortcuts, or switch that one action off, which drops its chord from the hook entirely, so the combination reaches your other app unchanged. The stored chord is untouched either way, so turning it back on needs no re-entry.
What do the red dot or red cross on the tray icon mean?
The tray icon reflects the operational health of the background daemon:
- Red dot (Warning): A non-fatal warning occurred. For example, if Auto-Start is switched on while the executable resides in a folder that non-administrators can overwrite, Wira Desk logs an advisory security warning (accessible via right-click → View Logs). Once the condition is fixed (or Auto-Start turned off), restarting the daemon clears the dot.
- Red cross (Critical): The global keyboard hook was disconnected by Windows (e.g. after sleep/hibernation or third-party interference) and failed auto-recovery after 3 heartbeat retries. Exiting and restarting Wira Desk re-registers the hook.
I use a VM or Remote Desktop.
Five process names and one window class ship in the passthrough list already, so keystrokes reach the guest unintercepted. The list, and how to add to it.