A modern Windows 11 utility that spotlights the pointer, visualizes clicks, and displays keyboard shortcuts.
Download latest release · Español · Changelog
- Pointer spotlight with adjustable diameter up to 800 px and edge feathering.
- Smooth multi-monitor transitions.
- Custom overlay color and opacity.
- Mouse click visualization and optional click sound.
- Keystroke visualization with a shortcuts-only mode and password-field protection.
- Global shortcuts for spotlight, clicks, keystrokes, spotlight size, and overlay opacity.
- Native WinUI 3 settings experience with Mica and Windows 11 controls.
- Starts with Windows in the system tray without opening the settings window.
- Built-in update checker backed by GitHub Releases.
- Spanish and English interface.
| Action | Shortcut |
|---|---|
| Toggle spotlight | Ctrl+Space |
| Toggle clicks | Ctrl+Alt+C |
| Toggle keystrokes | Ctrl+Alt+K |
| Increase spotlight size | Ctrl+Alt+Up |
| Decrease spotlight size | Ctrl+Alt+Down |
| Decrease overlay opacity | Ctrl+Alt+Left |
| Increase overlay opacity | Ctrl+Alt+Right |
- Windows 10 version 1809 or later; Windows 11 is recommended.
- 64-bit Windows.
The single Rust installer bundles the .NET and Windows App SDK runtimes. No separate runtime download, Inno Setup, or administrator account is required.
- Open the latest release.
- Download
FocusPocus-Setup-<version>.exe. - Run the installer and launch FocusPocus.
Installation is per-user in %LOCALAPPDATA%\Programs\FocusPocus. Remove it from Windows Settings or run Uninstall.exe. Your settings are preserved.
Windows SmartScreen may display a warning because community builds are not code-signed yet. Verify that the installer comes from this repository's Releases page.
FocusPocus uses two cooperating processes:
FocusPocus.exe: the native WinUI 3 settings interface.FocusPocus.Engine.exe: the native Rust engine, with Direct2D/DirectComposition graphics, input hooks, global shortcuts, and system tray.
FocusPocus-Setup-<version>.exe and Uninstall.exe are also written in Rust. Settings changes use file notifications and a shared named mutex with field-level merging; input hooks run on their own thread. The engine schedules frames only when the pointer moves or effects animate. Shared icons and the Rust Windows manifest live in assets/; the retired WPF implementation has been removed.
This split lets Windows startup launch only the engine in the tray while the settings window stays closed.
flowchart LR
User([User])
Input[Windows pointer<br/>and keyboard input]
Startup[Windows startup]
Releases[(GitHub Releases API)]
subgraph FocusPocus
UI[FocusPocus.exe<br/>WinUI 3 settings]
Settings[(%APPDATA%\FocusPocus<br/>settings.json)]
subgraph Engine[FocusPocus.Engine.exe]
Controller[App controller and<br/>settings synchronization]
Tray[System tray and<br/>global shortcuts]
Hooks[Low-level<br/>input hooks]
Overlay[Rust Direct2D spotlight and<br/>input effects overlay]
end
end
User --> UI
UI <--> Settings
UI -. Check for updates .-> Releases
Settings --> Controller
Startup --> Controller
User --> Tray
Input --> Hooks
Tray --> Controller
Hooks --> Controller
Controller --> Overlay
Prerequisites:
- Rust stable with the
x86_64-pc-windows-msvctoolchain - Visual Studio C++ Build Tools and Windows SDK
- .NET 8 SDK (for the WinUI settings interface)
git clone https://github.com/ezenwa/FocusPocus.git
cd FocusPocus
dotnet build .\src\FocusPocus.UI\FocusPocus.UI.csproj -c Release
cargo build --release -p focuspocus-engineTo create the installer:
.\scripts\build.ps1The complete single-file installer and SHA-256 checksum are written to dist. scripts/build.ps1 runs Rust and C# tests and bundles the runtimes automatically; it does not use an external installer compiler. The uncompressed application folder is generated in publish/FocusPocus-<version>-win-x64.
Verify isolated install, upgrade, and uninstall behavior with ./scripts/verify-package.ps1. Add -RenderTest on an interactive Windows desktop to exercise the GPU overlay briefly. See migration notes for architecture and validation details.
Successful package checks remove their temporary files. Use -KeepArtifacts when debugging; failed checks retain their evidence directory.
crates/
engine/ Rust engine crate: src/ modules and unit tests
setup/ Rust installer library and executable
src/bin/uninstall.rs Uninstaller entry point
src/FocusPocus.UI/ C# and XAML for the WinUI settings interface
tests/ C# integration checks
assets/
icons/ Shared SVG source, PNG and ICO application icons
windows/ Windows manifest shared by the Rust binaries
docs/images/ Documentation screenshots, banner and demo
scripts/ Build and package verification scripts
dist/ Generated installer and checksum
.cargo/ Cargo platform configuration
.github/ CI, release workflows and issue templates
Add Rust functionality to the relevant crate under src/, with unit tests beside the module; use a crate's tests/ directory for future Rust integration tests. Add WinUI types and XAML to src/FocusPocus.UI, and C# integration checks to tests/FocusPocus.Settings.Tests. Keep reusable application artwork in assets/icons, documentation media in docs/images, guides in docs, and automation in scripts.
Keep workspace manifests, the lockfile, toolchain configuration and Visual Studio solution at the repository root. target/, project bin/ and obj/, publish/, and dist/ are generated and ignored by Git. publish/ contains packaging intermediates; dist/ contains deliverables. Do not place captures, logs, backups or repository exports in the source tree.
FocusPocus processes pointer and keyboard events locally. It does not transmit captured input. Keystrokes are not displayed while a standard Windows password field has focus. The update checker only requests public release metadata from the GitHub API when the user presses the update button.
See CONTRIBUTING.md. Security issues should follow SECURITY.md.
FocusPocus is available under the MIT License.






