⨠Screenshots
> Drop your images into docs/screenshots/ and they'll show up here.
| Spotlight search | Workspace view |
|---|
 |  |
| New tab dashboard | Note capture |
|---|
 |  |
| Active apps & windows | Share & sync |
|---|
 |  |
What it does
- Spotlight search ā one keystroke to search across installed apps, open
browser tabs, workspaces, history and bookmarks, with fuzzy matching.
- Content capture ā select text on any page to save it into daily notes.
- Workspaces ā group tabs, notes, todos and status by topic/project.
- Tab management ā clean up, restore closed tabs, and track activity.
- Local-first ā everything is stored on your device. No external servers
required.
Install
Desktop app
Windows ā install via winget:
winget install CoolDesk.CoolDesk
macOS / Linux ā download the latest installer from the
latest GitHub release.
Browser extension
Install New Tab by CoolDesk from the
Chrome Web Store.
> š” The desktop app and extension work best together ā the extension talks to
> the desktop app over the local port 4545 for app/window search and sync.
Architecture
CoolDesk is two cooperating pieces: a Tauri desktop app and a Chrome
extension. They talk to each other over a small local HTTP + WebSocket server
on port 4545.
āāāāāāāāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Chrome Extension ā ā Tauri Desktop App ā
ā (React, MV3 service ā ā (React frontend + ā
ā worker, content scripts)ā ā Rust backend) ā
ā ā ā ā
ā ⢠New-tab dashboard ā HTTP ā ⢠Spotlight search UI ā
ā ⢠Side panel workspace āāāāāāāāāŗ ā ⢠Win32 window ā
ā ⢠Text capture ā + ā enumeration (Rust) ā
ā ⢠Tab / history / bmarks ā WS ā ⢠App search (Rust) ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāā :4545 āāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
ā¼
āāāāāāāāāāāāāāāāāāāā
ā axum server ā
ā GET /search?q= ā
ā WebSocket sync ā
āāāāāāāāāāāāāāāāāāāā
Desktop app (Tauri + Rust)
| File | Role |
|---|
src-tauri/src/lib.rs | Tauri commands; in-memory app cache (APP_CACHE) |
src-tauri/src/system.rs | Native window enumeration (Win32) |
src-tauri/src/focus.rs | Cross-platform window focusing (Win/macOS/Linux) |
src-tauri/src/sidecar/server.rs | axum route definitions (port 4545) |
src-tauri/src/sidecar/handlers.rs | HTTP handlers, incl. search_apps() |
App search runs in Rust for speed: GET /search?q=... reads the app cache,
applies a fuzzy score, and boosts running/visible windows.
Chrome extension + frontend (React)
| File | Role |
|---|
src/services/searchService.js | Frontend search; calls the Rust /search and merges tab/history/bookmark results |
src/components/GlobalSpotlight.jsx | The spotlight search UI |
src/background/ | MV3 service worker (message routing, storage) |
src/content-scripts/ | Text-selection capture + activity tracking |
When you search, the frontend queries the Rust backend (/search) and the
local browser caches (tabs, workspaces, history, bookmarks) in parallel,
then merges the ranked results.
Data & storage
CoolDesk is local-first ā your captured content never leaves your device
unless you opt into sync.
- Browser data (notes, workspaces, settings) ā Chrome
storage API.
- App index / search cache ā in-memory in the Rust backend, rebuilt on launch.
- Sync between extension and desktop app ā local WebSocket on port 4545.
- Validation ā
src/db/validation.js enforces a strict schema (unknown
fields are rejected, never silently dropped).
No data is transmitted to external servers. Authentication/sync is optional and
user-controlled.
Getting started
Prerequisites
- Node.js 18+
- Rust (stable) ā for the Tauri desktop app
- Chrome (or any Chromium browser) ā for the extension
Install
git clone https://github.com/abhayraghuwanshi/cooldesk-extension.git
cd cooldesk-extension
npm install
Run the desktop app (dev)
npm run dev:tauri
Build the web frontend only
npm run dev # vite dev server
npm run build # production build
Load the Chrome extension
- Run
npm run build to produce the dist/ output.
- Open
chrome://extensions, enable Developer mode.
- Click Load unpacked and select the project root (uses
manifest.json).
- Open a new tab ā the CoolDesk dashboard replaces it.
Build the desktop installer
npm run build:tauri
Project layout
extension/
āāā src/ # React frontend + extension code
ā āāā components/ # UI (GlobalSpotlight, workspaces, ā¦)
ā āāā services/ # searchService.js and friends
ā āāā background/ # MV3 service worker
ā āāā content-scripts/ # text capture, activity tracking
ā āāā db/ # local persistence + validation
āāā src-tauri/ # Rust backend (Tauri)
ā āāā src/lib.rs # Tauri commands + app cache
ā āāā src/system.rs # window enumeration
ā āāā src/sidecar/ # axum HTTP/WS server (port 4545)
āāā docs/ # design notes + screenshots
āāā manifest.json # Chrome extension manifest (MV3)
āāā package.json
Privacy
- Local storage only ā content lives on your device via Chrome's storage API.
- No external servers ā nothing is transmitted by default.
- User-initiated ā content is captured only when you select text or act.
- Minimal permissions ā see
docs/permissions.md
for a full justification of each Chrome permission requested.
Contributing
Contributions are welcome! Please open an issue to discuss substantial changes
first. Run npm run lint before submitting a PR.
License
Licensed under the Apache License 2.0 ā see LICENSE.
Copyright Ā© 2026 CoolDesk Team