Launchdock: Scratching My Own Itch with Rust

As a Linux user who envied macOS Spotlight, Alfred, and Windows PowerToys Run, I decided to build my own application launcher. Launchdock started as a way to scratch my own itch while keeping up with Rust programming.

The Motivation

Linux has plenty of launchers, but I wanted something specific: intelligent fuzzy search, user-configurable hotkeys, and clean cross-platform behavior. More importantly, I wanted to practice Rust on a real project that I'd actually use daily.

Building tools for yourself is different from building for others. You know exactly what you want, you can iterate quickly, and there's immediate satisfaction when it works just right.

Rust + Iced

The first iteration was rough. Getting used to Iced's API took some adjustment. I initially considered rolling my own Model-View-Update implementation but decided to embrace Iced's built-in MVU patterns.

AI assistance was invaluable for navigating documentation, especially when dealing with platform-specific quirks like window and taskbar management.

The Fuzzy Search Challenge

The core technical challenge was the search algorithm. The algorithm weighs character proximity, consecutive matches, early match bonuses, and name length. Getting the scoring right required dozens of iterations and testing across different application sets. When you're building for yourself, you notice every ranking quirk immediately.

Platform Discovery Adventures

Each platform stores applications differently. macOS uses .app bundles with icons buried in Contents/Resources/. Linux scatters desktop entries across multiple directories with theme-based icon resolution. Windows requires API calls to extract icons from executables.

Rather than seeing this as complexity, it became an interesting exploration of how different operating systems organize applications. Each platform is a forcing function on how to properly structure the application layout thinking about proper encapsulation and extensibility. Although a trait would have been idomatic Rust, I opted to just use simple functions interface as I thought it was more clear (with less writing) about what the code is doing. Within that function, I could use Rust decorators implementing a strategy pattern for each platform.

The Architecture

The daemon architecture is crucial for Launchdock's user experience. Launchdock runs continuously in the background and launches a lightweight UI when invoked. This design means when users hit their configured hotkey to run launchdock show, the interface appears with minimal delay.

The daemon doesn't cache application lists, which could become stale. Instead, it performs efficient real-time scanning of standard application directories when called. This approach embodies the Unix philosophy: do one thing well. Launchdock focuses purely on fast application discovery and launching, without the complexity of maintaining persistent state or background monitoring.

Personal Tool, Personal Satisfaction

After development, Launchdock does exactly what I wanted: fast application launching with smart search. The real satisfaction isn't in building something others might use, but in solving your own problem with tools you enjoy using.

Try it out: https://github.com/qa3-tech/launchdock