Skip to content

multiplex55/Multi_Launcher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,906 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi Launcher

Green_MultiLauncher

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

Table of contents


Quick start

Run

  1. Build (see Building) and run the app.
  2. Press F2 to show the launcher (default hotkey).
  3. Start typing to filter results.
  4. Press Enter to execute the selected result.

Discoverability

  • Press F1 (default) to open help.
  • Type help in the launcher to show a quick command/prefix overview.

Core workflow

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)
  • 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)

Command prefixes cheat sheet

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

Cookbook examples

1) Power search & launch

  • Type part of an app name (from your actions.json) and hit Enter:
    • steam
    • vscode
  • Search indexed files (if enabled via index_paths):
    • resumeResume.pdf

2) Calculator (with history)

  • = 12*7 + 19
  • = history (or calc list) to open the calculator history panel.

3) Convert things quickly

  • Unit conversion:
    • conv 225 lb to kg
    • conv 10 km to mi
  • Base conversion:
    • conv ff hex to dec
    • conv 255 dec to hex
  • Open the conversion panel (good for repeated conversions):
    • conv

4) Notes (markdown files)

  • 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 roadmap
    • note links slug:roadmap-2026

Notes are markdown files stored in notes/ by default. Set ML_NOTES_DIR to override.

5) Todos (tags + priority)

  • Add tasks:
    • todo add p1 #work fix mouse gesture stutter
    • todo add p3 #home buy coffee
  • Filter:
    • todo #work
    • todo p1
  • Mark complete:
    • todo done fix mouse gesture stutter (select matching item)
  • Inspect note attachments/anchors for a todo:
    • todo links release checklist
    • todo links id:todo-1730000000-1 --json

5.1) Canonical links (copy/paste workflow)

  • Resolve and open canonical IDs:
    • link link://note/roadmap-2026
    • link link://note/roadmap-2026#milestones
  • Typical workflow:
    • run note links roadmap
    • copy the target value (for example link://note/roadmap-2026#milestones)
    • paste into link <id> to jump directly to the target.

6) Favorites (pin “commands you actually use”)

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”

7) Browser tabs (UI Automation)

  • Search tabs:
    • tab youtube
    • tab 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).

8) Temp files (scratch logs, copy/paste buffers, etc.)

  • Create a temp file:
    • tmp new scratch
  • Open temp directory:
    • tmp open
  • List and open:
    • tmp list
  • Remove:
    • tmp rm scratch

Dashboard

The dashboard is a set of configurable widgets you can pin and keep visible as an “at a glance” control panel.

Built-in widgets (current set)

  • 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

Mouse gestures are a right-click draw interaction that can execute launcher actions.

How it works

  • 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.

Manage gestures

  • Open settings dialog:
    • mg settings
  • Open gesture editor dialog:
    • mg (or mg gesture)
  • Add/edit:
    • mg add
    • mg edit <filter>
  • Find/conflicts:
    • mg find <filter>
    • mg conflicts

Binding kinds (what a gesture can do)

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”

Files

  • Gestures: mouse_gestures.json
  • Usage stats: mouse_gestures_usage.json

Layouts

Layouts let you capture and restore a window arrangement (great for “work mode” setups).

Commands

  • 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

Useful flags

  • 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

File

  • layouts.json

MultiManager

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.

Commands

  • 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.

Typical workflow

  1. Run mm to open MultiManager.
  2. Add a workspace for a task or context.
  3. Capture windows into that workspace.
  4. Set each window's home and target rectangles.
  5. Assign a hotkey for quick workspace actions.
  6. Toggle, send home, send target, rotate, reconnect, or recapture windows as your session changes.

Capture and recapture controls

  • Enter captures the active foreground window.
  • Escape cancels the current capture or recapture flow.
  • S skips the current recapture item.

Files

  • multi_manager_workspaces.json — saved MultiManager workspaces.
  • multi_manager_bindings.json — saved HWND binding snapshots.

Calendar

Lightweight reminders/events that show up in search and can be displayed via widgets.

Commands

  • Open calendar UI:
    • cal
  • Views:
    • cal day
    • cal week
    • cal month
  • Upcoming / overdue:
    • cal upcoming
    • cal overdue
  • Find:
    • cal find dentist
  • Add:
    • cal add today 5pm Pay rent
    • cal add tomorrow 09:30 Standup | daily sync
    • cal add 2026-02-05 all-day Vacation

Snooze

  • cal snooze 15m
  • cal snooze 1h
  • cal snooze tomorrow 9am

Files

  • Events: calendar/events.json
  • State: calendar/state.json

Screenshot capture + markup editor

Screenshots can be taken to:

  • clipboard
  • file (auto-save supported)
  • optional built-in editor for markup and quick annotations

Commands

  • ss → shows all screenshot actions
  • Common actions include:
    • screen → clipboard
    • screen → file
    • region → clipboard
    • region → file
    • region → markup (opens editor)

Markup editor highlights

  • 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_dir
  • screenshot_auto_save
  • screenshot_use_editor

Configuration

settings.json

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_hotkey
  • index_paths (file indexing for search)
  • enabled_plugins (allowlist)
  • plugin_dirs (external plugins)
  • enable_toasts + toast_duration
  • follow_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.json

Actions are your custom launch targets / macros / shell entries.

Each entry looks like:

{
  "label": "Notepad",
  "desc": "Windows Notepad",
  "action": "notepad.exe",
  "args": null
}

Data files

These are created/updated as you use the app (typically in the working directory alongside settings.json):

  • actions.json — your defined actions
  • bookmarks.json — saved bookmarks
  • folders.json — saved folders
  • snippets.json — snippets database
  • macros.json — macro definitions
  • todo.json — todo list
  • alarms.json — timers/alarms
  • history.json — command history
  • history_pins.json — pinned history items
  • usage.json — usage scoring data
  • clipboard_history.json — clipboard history
  • calc_history.json — calculator history
  • fav.json — favorites
  • layouts.json — window layouts
  • multi_manager_workspaces.json — stores MultiManager workspaces, captured windows, aliases, hotkeys, and home/target rectangles
  • multi_manager_bindings.json — optional HWND binding snapshot used to restore live window handles
  • mouse_gestures.json — mouse gestures
  • mouse_gestures_usage.json — mouse gesture usage stats
  • calendar/events.json — calendar events
  • calendar/state.json — calendar UI state
  • toast.log — toast debug log (viewable from UI)

Building

Requirements

  • Rust stable toolchain
  • Windows (recommended; several features use Win32/UI Automation)

Build

cargo build --release

Run from source

cargo run

Notes

  • The project uses rdev and may require the unstable_grab feature for global input capture in some environments.
  • Some plugins depend on Windows-specific APIs (window management, browser tab activation, etc.).

Troubleshooting

“Nothing happens when I press F2”

  • Confirm settings.json is being loaded from the directory you’re running in.
  • Check hotkey in settings.json.
  • If you set ML_DEFAULT_HOTKEY_NONE, the default hotkey is disabled.

Mouse gestures don’t trigger

  • Ensure the mouse_gestures plugin is enabled (if you use enabled_plugins).
  • Open mg settings and confirm “Enable mouse gestures” is checked.
  • Try enabling debug logging in mg settings and inspect logs.

Browser tabs can’t activate

  • Run tab cache to rebuild the UI Automation cache.
  • Some browsers / window states may block UIA access; the plugin may fall back to click simulation.

MultiManager cannot find or move a window

  • Run mm reconnect after restarting apps or the launcher so MultiManager can refresh stale window handles.
  • Use mm recapture all when 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_capture enabled, focus the target window, and then press Enter.

Manual smoke tests

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.

Packages

 
 
 

Contributors

Languages