No description
| src/ui | add updating draft and onboarding draft | |
| src-tauri | add updating draft and onboarding draft | |
| .env.example | init | |
| .gitignore | init | |
| bun.lock | init | |
| index.html | add dragging, minor ui changes | |
| LICENSE | license update mit | |
| o-logo.png | init | |
| o-logo.svg | init | |
| onboarding.html | add updating draft and onboarding draft | |
| package.json | init | |
| README.md | init | |
| tsconfig.json | init | |
| vite.config.ts | add updating draft and onboarding draft | |
unimo — desktop launcher (Tauri)
A Spotlight/Raycast-style launcher: a frameless, transparent, always-on-top panel summoned with Cmd/Ctrl+Space near the cursor. Searches installed apps, built-in commands, and the web (via a remote gateway), and learns from what you pick.
This is a Tauri 2 port of the Electron desktop.unimo app — the vanilla-TS frontend
is reused almost verbatim; the Node backend was rewritten in Rust.
Features
- Local search merging three providers by score: installed apps
(macOS
mdfind, Linux.desktop, Windows registry), built-in commands (Settings / Reload / Quit / DevTools), and history (frecency learning). - Web search over a persistent WebSocket to a search gateway, with typeahead suggestions and auto-reconnect. Degrades gracefully to empty results when offline.
- Icons: app icons (macOS
.icns→ PNG viasips; Linux icon themes) and web favicons (DuckDuckGo service), both lazy-loaded and cached. - Window: cursor-anchored panel, global shortcut toggle, hide-on-blur, tray icon, single-instance, macOS dock-hidden + visible on all Spaces.
- History at rest is AES-256-GCM encrypted with a key held in the OS keychain.
Setup
bun install
cp .env.example .env # then set your gateway endpoint + token
.env (loaded at startup via dotenvy) configures the web-search gateway:
SEARCH_WS_ENDPOINT=wss://your-worker.workers.dev/api/search/ws
SEARCH_GATEWAY_TOKEN=your_gateway_password_here
Without these, local (apps/commands/history) search still works; web search returns nothing.
Commands
bun run tauri dev— run dev: builds Rust, opens the window, runs Vite with HMRbun run tauri build— build for production: installers insrc-tauri/target/release/bundle/bun run clean— remove build artifacts (dist/and the Rusttarget/)bun run rebuild— clean rebuild:clean, then a production buildbun run build— frontend only:tsc+vite build→dist/bunx tsc— frontend typecheck;cargo check/cargo clippy(insrc-tauri/) — backend
Notes
- Cmd+Space collides with Spotlight on macOS; if the OS owns it, registration is
logged and skipped — use the tray's Show/Hide instead, or change the modifier in
src-tauri/src/lib.rs(register_shortcut). - Windows app-icon extraction is not implemented (falls back to a default glyph).
- On unsigned dev rebuilds, macOS may prompt for keychain access (the ad-hoc signature changes between builds); signed release builds don't.