A contextual radial launcher and OS augmentation layer for Windows
Middle-click anywhere β your entire workflow at your fingertips. Context-aware. Plugin-powered. Zero friction.
- What is Orbit?
- Features
- Installation
- First Launch
- Using Orbit
- Settings App
- Plugins
- Context Profiles
- Gesture Shortcuts
- Themes
- Building from Source
- Project Structure
- Architecture
- License
Orbit is a radial launcher that lives in your system tray and appears instantly wherever your cursor is. Instead of hunting through taskbars and start menus, you get a circular menu of your most-used actions β right where you're already looking.
It's not just a launcher:
- π§ Context-aware β different actions appear automatically depending on which app is in focus
- π Plugin-powered β 12 built-in plugins add real-time widgets (system monitor, Pomodoro, weather, clipboard history, and more)
- π Gesture shortcuts β fast-swipe in any direction to trigger actions instantly, without opening the menu
- βοΈ Full settings app β configure everything through a dedicated UI, no config file editing required
|
|
|
|
β Best for most users. Installs to AppData, creates Start Menu shortcut, registers auto-start.
- Go to the Latest Release
- Download
Orbit-2.0.1-Setup-x64.exe - Run the installer β it's a one-click silent install
- Orbit launches automatically after install
- Look for the πͺ icon in your system tray
No AutoHotkey installation required. The AHK v2 runtime is bundled inside the installer.
β No install needed. Run from any folder, USB drive, etc.
- Download
Orbit-2.0.1-Portable-x64.exefrom Releases - Double-click to run
- Orbit starts and adds itself to your system tray
See Building from Source below.
When Orbit starts for the first time:
| Step | What happens |
|---|---|
| 1 | Orbit window opens (transparent, fullscreen, always-on-top) |
| 2 | The bundled AHK trigger (orbit-trigger.ahk) launches automatically |
| 3 | Orbit and the trigger are registered in Windows startup (HKCU\Run) |
| 4 | A tray icon appears β right-click it to access Settings and other options |
To verify it's working: Middle-click anywhere on your desktop or in a browser β the radial menu should appear at your cursor.
| Action | Result |
|---|---|
| Middle-click | Opens the radial menu at cursor |
| Middle-click again / Right-click / Esc | Closes the menu |
| Ctrl + Space | Opens the command palette (keyboard search) |
| Action | Result |
|---|---|
| Hover an item | Shows label, highlights item |
| Left-click an item | Executes the action |
| Left-click a group (π) | Expands into sub-menu ring |
| Scroll wheel | Adjusts the menu radius live |
Swipe your mouse faster than 250ms over 80px in any direction while the menu is open:
| Gesture | Direction |
|---|---|
| β Swipe Up | Configurable action |
| β Swipe Down | Configurable action |
| β Swipe Left | Configurable action |
| β Swipe Right | Configurable action |
Configure gestures in Settings β Gesture Shortcuts.
Open the Settings window by right-clicking the tray icon β Settings.
| Page | What you can do |
|---|---|
| π Dashboard | Live stats (action count, active plugins, current theme), quick toggles, plugin overview |
| β‘ Actions | Add, edit, delete, and nest actions into groups. Full tree editor with drag support |
| π Plugins | View all loaded plugins, their version and status. Open the plugins folder |
| π― Context Profiles | Create per-app profiles. Actions automatically prepend to your radial when that app is focused |
| π Gestures | Assign any action to Up / Down / Left / Right swipe directions |
| π¨ Themes | Preview and apply visual themes (Dark Neon, Dracula, Solarized, Forest, Sunset, Monochrome) |
| π§ General | Radius, animation speed, hover labels, sound effects, gesture toggle, hotkey |
All changes auto-save and apply to the live radial immediately.
Plugins live in the plugins/ folder. Drop a .js file in and restart Orbit β it loads automatically.
| Plugin | Widget | Actions added to radial |
|---|---|---|
| π₯οΈ System Monitor | CPU%, RAM used/total, uptime | Toggle widget |
| π Clipboard History | Last 10 clipboard entries, click to re-copy | Toggle widget |
| π Quick Notes | Floating notepad synced to a .txt file | View Notes, Edit Notes |
| π΅ Media Controller | Now playing info | Play/Pause, Next, Prev, Vol+/β, Mute |
| π Pomodoro | 25-min countdown, break timer | Start Focus, Pause, Reset |
| π€οΈ Weather | Live conditions, temp, humidity, wind | Toggle widget |
| πͺ App Switcher | All open windows, click to focus | Toggle widget |
| βοΈ Snippets | β | Paste any saved snippet into the active app |
| π Window Snapper | β | Left/Right/Top/Bottom half, 4 corners, Fullscreen, Center 80% |
| β‘ Script Runner | Live stdout output | Run any saved PowerShell/cmd script |
| π Recent Files | β | Dynamic list of recently opened files |
| π« Focus Mode | Status + blocklist | Enable/Disable focus, auto-kills distracting apps |
1. Drop your .js plugin file into the plugins/ folder
2. Restart Orbit
3. The plugin loads automatically on startup
Or open Settings β Plugins β π Open Folder to navigate there directly.
Context profiles let you automatically inject actions into your radial based on which app is in focus.
| App | Injected actions |
|---|---|
VS Code (code.exe) |
New Terminal, Git Status, Git Push, Format (Alt+Shift+F) |
Chrome (chrome.exe) |
New Tab, Dev Tools, Incognito |
Edge (msedge.exe) |
New Tab, Dev Tools |
Explorer (explorer.exe) |
Terminal Here, New Folder |
- Open Settings β Context Profiles
- Click + Add Profile
- Enter the process name (e.g.
figma.exe,slack.exe) - Add actions to the profile
- Focus that app β your actions appear automatically
Gestures fire instantly without opening the radial menu. Just swipe fast in any direction anywhere on screen.
Configure in Settings β Gestures:
β Up β e.g. Open Terminal
β Down β e.g. Show Desktop
β Left β e.g. Previous Track
β Right β e.g. Next Track
Trigger threshold: >80px movement in <250ms
Orbit includes 6 built-in themes. Switch from Settings β Themes β applies instantly.
| Theme | Accent | Background |
|---|---|---|
| Dark Neon | #00bfff |
#0a0a1a |
| Dracula | #bd93f9 |
#282a36 |
| Solarized | #268bd2 |
#002b36 |
| Forest | #98c379 |
#1a2318 |
| Sunset | #e06c75 |
#1f1a1b |
| Monochrome | #aaaaaa |
#111111 |
- Node.js 20 LTS or newer
- Git
- Windows 10/11 x64
AutoHotkey is not required to build β the runtime is downloaded as part of the release process.
# 1. Clone the repository
git clone https://github.com/Harsha754-ml/Orbit.git
cd Orbit
# 2. Install dependencies
npm install
# 3. Run in development mode
npm start# Builds both NSIS installer and portable exe β dist/
npm run distOutput files in dist/:
Orbit-2.0.1-Setup-x64.exe β Installer
Orbit-2.0.1-portable.exe β Portable
Orbit-2.0.1-win-x64.exe.blockmap
# Run without building
npm start
# The settings window opens from tray β Settings
# Config is read/written from config.json in the project root
# Plugins hot-reload is not supported β restart after adding pluginsorbit/
β
βββ main.js β Electron main process, IPC handlers, AHK manager
βββ preload.js β contextBridge for the radial overlay window
βββ settings-preload.js β contextBridge for the settings window
βββ defaultConfig.json β Default configuration (copied to config.json on first run)
βββ themes.json β Theme definitions
βββ orbit-trigger.ahk β AutoHotkey v2 trigger script
β
βββ src/
β βββ index.html β Radial overlay UI
β βββ renderer.js β All radial UI logic, plugin widgets, gesture detection
β βββ styles.css β Overlay styles
β
βββ settings/
β βββ index.html β Settings app HTML (7-page SPA)
β βββ app.js β Settings app logic
β βββ styles.css β Settings app styles
β
βββ lib/
β βββ configLoader.js β Atomic config read/write
β βββ contextEngine.js β Active window polling
β βββ executor.js β Safe action execution
β βββ logger.js β Structured JSON logger
β βββ pluginLoader.js β Plugin loader and API
β βββ state.js β FSM state manager
β βββ windowUtils.js β Cursor position helpers
β
βββ plugins/
β βββ system-monitor.js
β βββ clipboard-history.js
β βββ quick-notes.js
β βββ media-controller.js
β βββ pomodoro.js
β βββ weather.js
β βββ app-switcher.js
β βββ snippets.js
β βββ window-snapper.js
β βββ script-runner.js
β βββ recent-files.js
β βββ focus-mode.js
β
βββ assets/
βββ icon.png β App icon (PNG)
βββ icon.ico β App icon (ICO, multi-size)
βββ AutoHotkey64.exe β Bundled AHK v2 runtime (not in git, added at build time)
graph TD
AHK["π±οΈ AHK Trigger\norbit-trigger.ahk"] -->|middle-click| Main
subgraph Main ["βοΈ Main Process (main.js)"]
direction TB
IPC["IPC Handlers"]
CFG["Config Loader"]
CTX["Context Engine\n(active window poll)"]
PL["Plugin Loader"]
FSM["State FSM"]
end
Main -->|config-updated| Renderer
Main -->|context-update| Renderer
Main -->|plugin-broadcast| Renderer
subgraph Renderer ["πΌοΈ Renderer (renderer.js)"]
direction TB
RADIAL["Radial Layout Engine"]
WIDGETS["Plugin Widgets"]
GESTURES["Gesture Detector"]
PROFILES["Context Profiles"]
end
subgraph Settings ["βοΈ Settings Window (settings/)"]
SAPP["app.js SPA"]
end
Main <-->|save-config / get-config| Settings
PL -->|broadcasts| Main
| Decision | Reason |
|---|---|
contextIsolation: true + sandbox: true |
Renderer cannot access Node APIs directly β all communication via contextBridge |
| IPC channel whitelist | Only pre-approved channel names are accepted in main process |
| Atomic config writes | writeConfigSafe uses temp file + rename to prevent corruption |
| FSM for menu state | Prevents illegal state transitions and race conditions |
| AHK bundled, not required | Users don't need to install AHK β the runtime ships with Orbit |
| Plugins in main process | Plugins can use Node APIs, spawn processes, use the filesystem safely |
| Item | Action |
|---|---|
| Show Orbit | Trigger the radial menu at the center of the screen |
| Settings | Open the Settings window |
| Restart AHK Trigger | Kill and relaunch the AHK process (useful if the trigger stops working) |
| Quit | Cleanly shut down Orbit and the AHK trigger |
Middle-click doesn't open the menu
- Check the tray icon is present β if not, relaunch Orbit
- Right-click tray β Restart AHK Trigger
- Make sure you're clicking on the desktop or a browser (with Ctrl held if
requireCtrlInBrowsersis enabled) - Check
orbit.login the install directory for errors
Menu appears but actions don't execute
- Open Settings β Actions and verify the action has a command set
- For
cmdtype actions, test the command in PowerShell first - Check
orbit.logforaction_failedentries
Plugins not loading
- Open Settings β Plugins β π Open Folder
- Make sure your
.jsfile is directly in theplugins/folder (not a subfolder) - Restart Orbit after adding a plugin
- Check
orbit.logfor plugin load errors
Settings window won't open
Right-click the tray icon β Settings. If nothing happens, fully quit and relaunch Orbit.
How do I change the trigger from middle-click to something else?
- Open Settings β General β Hotkey
- Change the value (e.g.
MButton,XButton1,F13) - Click Save Changes
- Right-click tray β Restart AHK Trigger to apply
MIT β see LICENSE for full text.
Built for Windows power users who hate clicking through menus.
β Star this repo if Orbit saves you time every day.