Adding Command Palette Navigation to dyad: Improving Developer Workflow
Jumping between active chat threads shouldn't feel like digging through a filing cabinet. In the latest update to dyad, we've implemented a high-speed command palette to streamline how you navigate your workspace.
The Problem: The Click Tax
When you are deep in a flow, navigating via mouse clicks to switch between multiple active chats creates unnecessary friction. The original UI required manual selection through a sidebar list, which is fine for two or three threads, but becomes cumbersome as your project history grows. We needed a way to invoke a 'jump-to' experience without leaving the keyboard.
The Approach: CmdK and Debouncing
To solve this, we integrated cmdk, a command menu component, to provide a fast, accessible interface. By triggering the palette with a keyboard shortcut (Ctrl/Cmd+K), we allow users to perform fuzzy searching across chat titles and message content instantly.
Because we are searching across potentially large datasets, we implemented a debounced input mechanism using React Query to prevent excessive IPC (Inter-Process Communication) overhead between the renderer and the main process:
import { useQuery } from '@tanstack/react-query';
function useChatSearch(query: string) {
return useQuery({
queryKey: ['chat-search', query],
queryFn: () => window.electronAPI.searchChats(query),
enabled: query.length > 2,
staleTime: 150,
});
}
Implementation Details
We routed the search through a dedicated Electron IPC channel. This ensures that the heavy lifting—scanning chat logs and ranking snippets—happens off the main UI thread.
We also updated our existing Dialog implementation from @radix-ui/react-dialog to support cleaner close actions, ensuring that once a user selects a result, the transition to the target chat is instantaneous and the palette disappears cleanly.
The Result
By adding this functionality, we've reduced the cognitive load of context-switching. Searching is now as simple as hitting a hotkey, typing a few characters, and pressing Enter.
Actionable Takeaways
- Optimize for Keyboard Users: Shortcuts like Ctrl/Cmd+K are standard for a reason; they keep the user's hands on the home row.
- IPC Boundaries: Keep search logic in the main process and use debouncing to protect the IPC bridge from frequent, low-value requests.
- Component Stability: Use well-tested primitives like
cmdkto handle focus trapping and accessibility (A11y) requirements, allowing you to focus on the search ranking logic.
Generated with Gitvlg.com