1
0
Fork
You've already forked unimo-desktop-app
0
No description
  • Rust 63.6%
  • TypeScript 22.1%
  • CSS 11.9%
  • HTML 2.4%
2026年06月11日 07:29:40 +02:00
src/ui add updating draft and onboarding draft 2026年06月09日 16:38:36 +02:00
src-tauri add updating draft and onboarding draft 2026年06月09日 16:38:36 +02:00
.env.example init 2026年06月08日 14:23:08 +02:00
.gitignore init 2026年06月08日 14:23:08 +02:00
bun.lock init 2026年06月08日 14:23:08 +02:00
index.html add dragging, minor ui changes 2026年06月08日 15:28:27 +02:00
LICENSE license update mit 2026年06月11日 07:29:40 +02:00
o-logo.png init 2026年06月08日 14:23:08 +02:00
o-logo.svg init 2026年06月08日 14:23:08 +02:00
onboarding.html add updating draft and onboarding draft 2026年06月09日 16:38:36 +02:00
package.json init 2026年06月08日 14:23:08 +02:00
README.md init 2026年06月08日 14:23:08 +02:00
tsconfig.json init 2026年06月08日 14:23:08 +02:00
vite.config.ts add updating draft and onboarding draft 2026年06月09日 16:38:36 +02:00

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 via sips; 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 devrun dev: builds Rust, opens the window, runs Vite with HMR
  • bun run tauri buildbuild for production: installers in src-tauri/target/release/bundle/
  • bun run clean — remove build artifacts (dist/ and the Rust target/)
  • bun run rebuildclean rebuild: clean, then a production build
  • bun run build — frontend only: tsc + vite builddist/
  • bunx tsc — frontend typecheck; cargo check / cargo clippy (in src-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.