Fast like the wind, a WINdows DMENU-like launcher
compressed-screencast.mp4
- Fast application launcher via hotkey (Win+Space is default)
- Vim-like navigation (hjkl) alongside arrow keys
- Scans Windows Start Menu shortcuts automatically
- Supports custom commands via configuration
- Key combination commands - trigger keyboard shortcuts from the menu
- Background daemon with named pipe communication
- Configurable appearance and behavior (thanks to JerwuQu's work on the original version of wlines)
iex "& {$(irm https://raw.githubusercontent.com/gicrisf/windmenu/main/install.ps1)}"This downloads the latest release to $HOME\.windmenu, optionally adds it to your PATH, and prints next steps. No admin required.
Note: Windows Defender may flag
iex(Invoke-Expression) as suspicious. If that happens, you can download and reviewinstall.ps1manually before running it.
scoop bucket add gicrisf https://github.com/gicrisf/bucket
scoop install windmenu
Download windmenu-portable.zip from the latest release, extract it, and run .\windmenu.exe daemon all start.
Press Win+Space to launch.
To have windmenu start automatically when you log in:
windmenu daemon all enable taskFor Scoop installs, use task or user-folder methods to avoid a brief terminal flash caused by the Scoop shim. See all available methods with windmenu daemon all enable --help.
To customize the hotkey or add your own commands, edit windmenu.toml in the same directory as the executable:
# Change the hotkey
hotkey = ["WIN", "SPACE"] # Default
# If you use multiple keyboard layouts, try one of these instead:
# hotkey = ["WIN", "R"]
# hotkey = ["ALT", "SPACE"]
# hotkey = ["CTRL", "SPACE"]Note on the default hotkey: Win+Space is Windows' language switcher shortcut. If you only use one keyboard layout (like US English), this won't matter - the conflict is harmless. But if you switch between multiple languages, you'll want to change the hotkey to something else.
For full configuration options, check the example windmenu.toml in the repository.
The menu is populated from three sources:
Windmenu scans for .lnk files in the Windows Start Menu directories (%APPDATA% and %ProgramData%). This is how it finds your installed applications. The scanning happens once at startup, so the menu appears instantly when you press the hotkey.
You can add your own commands in two forms:
PowerShell invocations:
[[commands]]
name = "Terminal"
args = ["wt"]Key combinations:
[[commands]]
name = "Show Desktop"
keys = ["WIN", "D"]The key combination support turned out to be more useful than expected. Want to switch virtual desktops? ["WIN", "CTRL", "RIGHT"]. Toggle between windows? ["ALT", "TAB"]. These are first-class commands in the menu, no different from launching applications.
Implementation uses Windows SendInput API with proper key sequencing (press all keys down in order, release in reverse). There's special handling for toggle keys like Caps Lock, which Windows treats differently.
These are built-in commands that are always available, primarily useful for edge cases. For example, the Caps Lock toggle command is handy if you've remapped your physical Caps Lock key to something else but occasionally need to actually toggle caps lock state.
WindMenu supports executing key combinations as commands!
Add them to your windmenu.toml:
[[commands]]
name = "alt+x key combo"
keys = ["ALT", "X"]
[[commands]]
name = "win+d show desktop"
keys = ["WIN", "D"]
[[commands]]
name = "switch virtual desktop"
keys = ["WIN", "CTRL", "RIGHT"]ALT- Alt keyCTRLorCONTROL- Control keySHIFT- Shift keyWINorWINDOWS- Windows key
TAB- Tab keyESCorESCAPE- Escape keySPACE- Space barENTER- Enter/Return key
F1,F2,F3, ...,F12- Function keys
LEFT,UP,RIGHT,DOWN- Arrow keys
0,1,2, ...,9- Number keys
COMMAor,- Comma keyPERIODor.- Period keySEMICOLONor;- Semicolon keySLASHor/- Forward slash keyBACKSLASHor\- Backslash keyQUOTEor'- Single quote keyBACKTICKor`- Backtick keyMINUSor-- Minus/hyphen keyEQUALSor=- Equals keyLBRACKETor[- Left bracket keyRBRACKETor]- Right bracket key
A,B,C, ...,Z- Letter keys (case insensitive)
When you select a key combination command from the menu, WindMenu will:
- Press all the specified keys down in order
- Release all the keys in reverse order
- This simulates the key combination being pressed
You can mix regular commands and key combinations in the same configuration:
# Regular command
[[commands]]
name = "open terminal"
args = ["wt"]
# Key combination command
[[commands]]
name = "switch to desktop 1"
keys = ["WIN", "CTRL", "1"]The menu will display both types of commands and execute them appropriately based on their configuration.
Build all components:
cargo build --releaseFirst, stop the daemons and remove auto-startup entries, otherwise the system will try to launch something that no longer exists at the next startup:
windmenu daemon all stop
windmenu daemon all disableCheck the situation with
windmenu daemon all statusIf no instance is running and no startup configuration is still enabled, proceed by removing the binaries. If installed via Scoop:
scoop uninstall windmenuFor other installations, delete the installation directory ($HOME\.windmenu if you used the script). The application is fully portable (all binaries and configuration reside within it, so no traces are left elsewhere).
The task method uses schtasks.exe, which may fail if your account lacks permission to create scheduled tasks. If you get an access denied error, try user-folder instead:
windmenu daemon all enable user-folderThis places a VBS wrapper in your Startup folder and requires no special privileges.
If you installed via Scoop and enabled auto-startup with the registry method, you may see a console window flash briefly when Windows launches the Scoop shim. Switch to task or user-folder to avoid this:
windmenu daemon all disable
windmenu daemon all enable user-folderIf windmenu doesn't seem to pick up your configuration changes, it may be reading windmenu.toml from a different location than you expect. Run windmenu test config to see which config file is being loaded and what values it contains.
Windmenu discovers Windows Store apps by detecting reparse points in the Start Menu directories. If some apps are missing, run windmenu test reparse-points to verify that reparse point detection is working correctly on your system.
WindMenu wouldn't be possible without the contributions of others:
- wlines - The excellent menu rendering engine that powers WindMenu's interface. Special thanks to JerwuQu for the original implementation.
- dmenu - The original inspiration for this project. WindMenu aims to bring dmenu's philosophy and efficiency to Windows.
- winapi-rs maintainers - For providing comprehensive Rust bindings to the Windows API, making native Windows development in Rust possible.