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
- MultiManager
- Calendar
- Screenshot capture + markup editor
- Configuration
- Data files
- Building
- Troubleshooting
- Manual smoke tests
- 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:
bm ...(bookmarks)note ...(notes)todo ...(tasks)tab ...(browser tabs)mg ...(mouse gestures)layout ...(window layouts)mm ...(MultiManager window workspaces)
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 |
|---|---|---|
g |
Search Google | g rust borrow checker |
= |
Calculator | = (145*3) / 7 |
= history / calc list |
Calculator history | = history |
bm |
Bookmarks | bm 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 |
cs |
Snippets | cs json / cs list |
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 |
mm |
MultiManager window workspaces | mm / mm reconnect / mm send all home |
keys / key |
Send keystrokes | keys ctrl+shift+t |
layout |
Window layouts | layout save work / layout load 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
- Inspect links around a note (linked todos/notes/mentions):
note links roadmapnote links slug:roadmap-2026
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)
- Inspect note attachments/anchors for a todo:
todo links release checklisttodo links id:todo-1730000000-1 --json
- Resolve and open canonical IDs:
link link://note/roadmap-2026link link://note/roadmap-2026#milestones
- Typical workflow:
- run
note links roadmap - copy the
targetvalue (for examplelink://note/roadmap-2026#milestones) - paste into
link <id>to jump directly to the target.
- run
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 save Work
- List layouts:
layout list
- Run (apply) a layout:
layout load Work
- Edit layouts file:
layout edit
- Dry run (preview without changing anything):
layout load Work --dry-run
- Don’t launch missing apps:
layout load Work --no-launch
- Only affect the active monitor:
layout load Work --only-active-monitor
- Filter windows included:
layout load Work --filter chrome
layouts.json
MultiManager is a Windows-oriented embedded window workspace manager for keeping groups of real application windows organized inside named workspaces. It is designed for day-to-day window orchestration: capture the windows you care about, define where they should live, assign shortcuts, and quickly move or recover them later.
MultiManager is separate from saved layout commands. A saved layout is a named window arrangement that can be loaded from layouts.json; a MultiManager workspace tracks windows as workspace members, including their current Win32 window bindings and per-window home/target rectangles. Use layout ... for simple saved arrangements, and use mm ... when you want an interactive workspace manager that can keep reconnecting and recapturing tracked windows.
Because MultiManager works with live Windows desktop windows, it uses Win32 concepts such as:
- HWNDs as the native identifiers for tracked windows.
- Foreground-window capture to add the currently active window to a workspace.
- Top-level window enumeration to find candidate windows and recover missing entries.
- Reconnecting stale window handles when a previously captured window was closed, relaunched, or received a new HWND.
mm— open MultiManager.mm settings— open MultiManager settings.mm save— save workspaces.mm reload— reload workspaces from disk.mm reconnect— reconnect missing/stale windows.mm send all home— send tracked windows to home rectangles.mm save bindings— save HWND binding snapshot.mm restore bindings— restore HWND binding snapshot.mm recapture all— recapture missing/stale windows.
- Run
mmto open MultiManager. - Add a workspace for a task or context.
- Capture windows into that workspace.
- Set each window's home and target rectangles.
- Assign a hotkey for quick workspace actions.
- Toggle, send home, send target, rotate, reconnect, or recapture windows as your session changes.
- Enter captures the active foreground window.
- Escape cancels the current capture or recapture flow.
- S skips the current recapture item.
multi_manager_workspaces.json— saved MultiManager workspaces.multi_manager_bindings.json— saved HWND binding snapshots.
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.*) - MultiManager settings (
multi_manager.*)
MultiManager paths can be customized under the multi_manager settings object:
{
"multi_manager": {
"enabled": true,
"workspaces_path": "multi_manager_workspaces.json",
"bindings_path": "multi_manager_bindings.json",
"auto_save": true,
"save_on_exit": true,
"auto_reconnect_on_load": true,
"auto_reconnect_missing_windows": true,
"auto_reconnect_interval_ms": 3000,
"ignore_launcher_window_on_capture": true
}
}workspaces_path controls where MultiManager stores workspace state, and bindings_path controls the optional live-window binding snapshot location. ignore_launcher_window_on_capture is a safety setting that helps prevent capture flows from saving the launcher window instead of the intended target window.
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 layoutsmulti_manager_workspaces.json— stores MultiManager workspaces, captured windows, aliases, hotkeys, and home/target rectanglesmulti_manager_bindings.json— optional HWND binding snapshot used to restore live window handlesmouse_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 --releasecargo run- 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.
- Run
mm reconnectafter restarting apps or the launcher so MultiManager can refresh stale window handles. - Use
mm recapture allwhen a window is missing, closed and reopened, or ambiguous. - Ensure the target app is not running elevated while Multi Launcher is running non-elevated.
- Check whether the workspace or window is disabled before sending, restoring, or moving it.
- Use Refresh Titles if a captured app changed its window title.
- If capture keeps selecting the launcher, keep
ignore_launcher_window_on_captureenabled, focus the target window, and then pressEnter.
Win32/UI Automation behavior is intentionally validated manually instead of in CI. Use docs/manual-smoke-tests.md for MultiManager capture/reconnect/recapture checks, browser-tab activation, and mouse gesture verification.