Multi Launcher is a lightweight application launcher for Windows built with Rust
and eframe. The project targets Windows exclusively. It supports configurable
hotkeys, basic plugin architecture and file indexing to quickly open
applications or files.
It’s designed to be “one hotkey away” from:
- launching apps / files / bookmarks
- running small utilities (calc, convert, clipboard tools, etc.)
- driving dashboard widgets (notes, todo, system status, browser tabs, gestures, layouts, …)
- optionally triggering actions via mouse gestures
- Quick start
- Core workflow
- Command prefixes cheat sheet
- Cookbook examples
- Dashboard
- Mouse gestures
- Layouts
- Calendar
- Screenshot capture + markup editor
- Configuration
- Data files
- Building
- Troubleshooting
- Build (see Building) and run the app.
- Press
F2to show the launcher (default hotkey). - Start typing to filter results.
- Press Enter to execute the selected result.
- Press
F1(default) to open help. - Type
helpin the launcher to show a quick command/prefix overview.
Multi Launcher is centered around a single query box:
-
Results come from:
- your
actions.json(custom actions you define) - built-in commands (calculator, converters, utilities)
- plugins (notes, todo, clipboard, browser tabs, layouts, etc.)
- optional indexing of folders (fast file search)
- your
-
Most functionality is accessed via prefix commands like:
b ...(bookmarks)note ...(notes)todo ...(tasks)tab ...(browser tabs)mg ...(mouse gestures)layout ...(window layouts)
This is the “most-used” surface area. Many prefixes also support additional subcommands—type the prefix and read the result list.
| Prefix | What it does | Examples |
|---|---|---|
? |
Search web (default browser) | ? rust egui |
s |
Search with Google | s rust borrow checker |
d |
Search with DuckDuckGo | d windows ui automation |
= |
Calculator | = (145*3) / 7 |
= history / calc list |
Calculator history | = history |
b |
Bookmarks | b youtube |
f |
Saved folders | f downloads |
cb |
Clipboard history | cb list / cb clear |
ss / shot |
Screenshot actions | ss / shot region markup |
conv / convert |
Conversion panel + converters | conv / conv 10 km to mi |
case |
Text case tools | case snake Hello World |
ts |
Timestamp helpers | ts / ts 1700000000 |
emoji |
Emoji search | emoji shrug |
ascii |
ASCII art | ascii hello |
lorem |
Lorem ipsum generator | lorem 40 |
note |
Notes | note list / note add project ideas |
todo |
Todo/tasks | todo add p2 #work fix indexing |
snip |
Snippets | snip json |
macro |
Macros | macro add / macro list |
tab |
Browser tabs (UIA) | tab slack / tab cache |
fav |
Favorites (pinned commands) | fav / fav add build |
mg |
Mouse gesture management | mg settings / mg add |
keys / key |
Send keystrokes | keys ctrl+shift+t |
layout |
Window layouts | layout add work / layout run work |
win |
Window list / focus | win terminal |
ps |
Processes list | ps chrome |
tm |
Task Manager | tm |
sys |
System actions | sys lock |
info |
System info | info |
net |
Network info | net |
ip |
Show local/public IP | ip |
bright |
Brightness control | bright |
vol |
Volume control | vol |
media |
Media keys | media next |
yt |
YouTube search | yt rust egui |
wiki |
Wikipedia search | wiki egui |
red |
Reddit search | red egui |
drop |
Drop-rate calculator | drop 1/128 |
rand |
Random helpers | rand 1..100 |
tmp |
Temp file manager | tmp new log / tmp list |
recycle |
Recycle bin tools | recycle |
rs / osrs |
RuneScape helpers | osrs wiki karamja gloves |
cal |
Calendar/reminders | cal / cal add today 5pm Pay rent |
- Type part of an app name (from your
actions.json) and hit Enter:steamvscode
- Search indexed files (if enabled via
index_paths):resume→Resume.pdf
= 12*7 + 19= history(orcalc list) to open the calculator history panel.
- Unit conversion:
conv 225 lb to kgconv 10 km to mi
- Base conversion:
conv ff hex to decconv 255 dec to hex
- Open the conversion panel (good for repeated conversions):
conv
- Create a new note:
note add Meeting notes
- List notes:
note list
- Search notes (title/content):
note rustdoc
Notes are markdown files stored in
notes/by default. SetML_NOTES_DIRto override.
- Add tasks:
todo add p1 #work fix mouse gesture stuttertodo add p3 #home buy coffee
- Filter:
todo #worktodo p1
- Mark complete:
todo done fix mouse gesture stutter(select matching item)
Favorites are shortcuts that point at an action string (anything the launcher can execute).
- Open favorites manager:
fav
- Add a favorite with a prefilled label:
fav add Build- then set Action to something like:
shell:cargo build
- Remove favorites quickly:
fav rm build
Good favorites to create:
- “Open project folder”
- “Run tests”
- “Open notes”
- “Screenshot region markup”
- “Layout: Work”
- Search tabs:
tab youtubetab docs
- Refresh tab cache:
tab cache
- Clear tab cache:
tab clear
If UI Automation can’t activate a tab directly, the app may simulate a click (cursor may briefly move).
- Create a temp file:
tmp new scratch
- Open temp directory:
tmp open
- List and open:
tmp list
- Remove:
tmp rm scratch
The dashboard is a set of configurable widgets you can pin and keep visible as an “at a glance” control panel.
- Bookmarks / Folders / Commands
- bookmarks list, folders list, recent commands, frequent commands
- Notes / Todo
- scratchpad, recent notes, todo list, recent todos
- System / Diagnostics
- system status, CPU/RAM, network status, process list, diagnostics
- Windows / Layouts
- window list, layouts widget (apply saved layouts)
- Browser
- browser tabs widget
- Mouse gestures
- gesture cheat sheet, recent gestures, gesture health/stats
- Utilities
- stopwatch widget, volume widget, recycle bin widget, tempfiles widget, system controls/actions
Use the dashboard editor UI to add/remove widgets and configure layout.
Mouse gestures are a right-click draw interaction that can execute launcher actions.
- Hold Right Mouse Button and move the mouse to draw a gesture.
- The gesture is tokenized (default is 4-direction):
L,R,U,D
- When you release, the best match binding is chosen and executed.
- Open settings dialog:
mg settings
- Open gesture editor dialog:
mg(ormg gesture)
- Add/edit:
mg addmg edit <filter>
- Find/conflicts:
mg find <filter>mg conflicts
Gestures can map to:
- Execute an action (run something immediately)
- SetQuery (populate launcher query)
- SetQueryAndShow (populate + show launcher)
- SetQueryAndExecute (populate + run)
- ToggleLauncher (show/hide launcher)
This makes gestures useful for both:
- “Do the thing now”
- “Bring up the launcher already pre-filtered to the thing”
- Gestures:
mouse_gestures.json - Usage stats:
mouse_gestures_usage.json
Layouts let you capture and restore a window arrangement (great for “work mode” setups).
- Create a layout from current windows:
layout add Work
- List layouts:
layout list
- Run (apply) a layout:
layout run Work
- Edit layouts file:
layout edit
- Dry run (preview without changing anything):
layout run Work --dry-run
- Don’t launch missing apps:
layout run Work --no-launch
- Only affect the active monitor:
layout run Work --only-active-monitor
- Filter windows included:
layout run Work --filter chrome
layouts.json
Lightweight reminders/events that show up in search and can be displayed via widgets.
- Open calendar UI:
cal
- Views:
cal daycal weekcal month
- Upcoming / overdue:
cal upcomingcal overdue
- Find:
cal find dentist
- Add:
cal add today 5pm Pay rentcal add tomorrow 09:30 Standup | daily synccal add 2026-02-05 all-day Vacation
cal snooze 15mcal snooze 1hcal snooze tomorrow 9am
- Events:
calendar/events.json - State:
calendar/state.json
Screenshots can be taken to:
- clipboard
- file (auto-save supported)
- optional built-in editor for markup and quick annotations
ss→ shows all screenshot actions- Common actions include:
- screen → clipboard
- screen → file
- region → clipboard
- region → file
- region → markup (opens editor)
- Draw markup (pen/shape tools)
- Copy to clipboard
- Save to file
- Optional toasts:
- “Copied to clipboard”
- “Saved screenshot”
Screenshot behavior is controlled by settings:
screenshot_dirscreenshot_auto_savescreenshot_use_editor
This controls hotkeys, plugin enablement, UI behavior, dashboard, and more.
Minimal example:
{
"hotkey": "F2",
"enable_toasts": true,
"index_paths": ["C:\\Workspaces", "C:\\Users\\You\\Documents"]
}Notable settings (high impact):
hotkey/quit_hotkey/help_hotkeyindex_paths(file indexing for search)enabled_plugins(allowlist)plugin_dirs(external plugins)enable_toasts+toast_durationfollow_mouse,always_on_top,hide_after_run- screenshot settings (
screenshot_dir,screenshot_auto_save,screenshot_use_editor) - dashboard settings (
dashboard.*)
Disable the default hotkey entirely (useful if you bind your own trigger elsewhere):
- Set env var
ML_DEFAULT_HOTKEY_NONE=1
Actions are your custom launch targets / macros / shell entries.
Each entry looks like:
{
"label": "Notepad",
"desc": "Windows Notepad",
"action": "notepad.exe",
"args": null
}These are created/updated as you use the app (typically in the working directory alongside settings.json):
actions.json— your defined actionsbookmarks.json— saved bookmarksfolders.json— saved folderssnippets.json— snippets databasemacros.json— macro definitionstodo.json— todo listalarms.json— timers/alarmshistory.json— command historyhistory_pins.json— pinned history itemsusage.json— usage scoring dataclipboard_history.json— clipboard historycalc_history.json— calculator historyfav.json— favoriteslayouts.json— window layoutsmouse_gestures.json— mouse gesturesmouse_gestures_usage.json— mouse gesture usage statscalendar/events.json— calendar eventscalendar/state.json— calendar UI statetoast.log— toast debug log (viewable from UI)
- Rust stable toolchain
- Windows (recommended; several features use Win32/UI Automation)
cargo build --release- The project uses
rdevand may require theunstable_grabfeature for global input capture in some environments. - Some plugins depend on Windows-specific APIs (window management, browser tab activation, etc.).
- Confirm
settings.jsonis being loaded from the directory you’re running in. - Check
hotkeyinsettings.json. - If you set
ML_DEFAULT_HOTKEY_NONE, the default hotkey is disabled.
- Ensure the mouse_gestures plugin is enabled (if you use
enabled_plugins). - Open
mg settingsand confirm “Enable mouse gestures” is checked. - Try enabling debug logging in
mg settingsand inspect logs.
- Run
tab cacheto rebuild the UI Automation cache. - Some browsers / window states may block UIA access; the plugin may fall back to click simulation.