Command Palette (Ctrl + K)
Inhalt
The search bar in the top right of the header opens a modal with two sections: local results + web search.
Opening
- Click the search bar
- Keyboard shortcut Ctrl + K (Windows/Linux) or Cmd + K (Mac)
- Esc closes
- ↑/↓ navigates, Enter opens, hover changes the selection
Local results
Local search covers your Mesh data:
| Source | What is found? |
|---|---|
| Services | Name + URL + description |
| Boards | Board name + slug |
| Quick Links | Label + URL |
| Widgets | Label + kind |
Implemented in apps/web/src/hooks/useLocalSearch.ts. Substring search, case-insensitive, no fuzzy matching (may come in v2.0).
Web search
When there are no local results OR the user presses Enter: forwarded to the configured engines.
Default engines:
- Google (hotkey
g) —https://www.google.com/search?q={q} - DuckDuckGo (hotkey
d) —https://duckduckgo.com/?q={q} - Brave Search (hotkey
b) —https://search.brave.com/search?q={q}
URL template with placeholder {q} (URL-encoded substitution).
Customising engines
Admin → System → Search → add / edit / delete engine.
Fields:
name— display nameurlTemplate— with{q}icon— URL to a logo (optional)hotkey— one letter (e.g.g) — typingg foostarts Google directlysortOrder— display order
Opening with a URL
http://mesh.example.com/?q=Frigate opens the Mesh UI with a pre-filled search term. Handy for bookmarks or browser search engine setup.
No local result? Default engine
If there is no local match and you press Enter, the defaultEngineId engine is used. Default is Google.
Using the search component externally
The component lives in apps/web/src/components/layout/HeaderSearch.tsx. Self-contained, Radix Dialog, no external dependencies beyond lucide-react. Could theoretically be embedded in isolation — currently only used in the header.