
# Fast Forward
A window switcher for macOS built in Rust using the [gpui](https://www.gpui.rs/) framework by [Zed](https://zed.dev/)
---

> [!NOTE]
> This application was developed as a personal learning project to explore and understand Rust programming concepts.
> While functional, it may contain bugs or unexpected behaviors. I am not responsible for missed meetings because you got too efficient,
> carpal tunnel from excessive app switching, or your cat learning to manipulate your windows after watching you use this tool
## Building Fast Forward: A Custom macOS Application Switcher in Rust
As a developer, I often have way too many applications open at once. Navigating through them with macOS's default app switcher (`Command + Tab`) can get chaotic pretty quickly—especially when I’m deep into a task and need to jump between windows fast.
So, I built my own solution.
**Fast Forward** is a custom application switcher for macOS, built entirely (well, almost) in **Rust** using the **GPUI** framework—the same one powering the [Zed IDE](https://zed.dev/), which I’m a huge fan of.
### Why Build It?
I love the speed and minimalism of Zed, and that inspired me to explore what a fast, focused app switcher might look like. I also wanted to learn Rust more deeply—and what better way to learn than by building something that scratches your own itch?
### What It Does
With Fast Forward, I can:
- **Hold down the right Command key** to activate the switcher
- **Fuzzy-type the app or window name** I want
- Release **Command** to switch, press **Space** to hide, or press **Escape** to close the window
It’s a lightweight utility that helps me stay in flow, without the friction of tabbing through a huge list of icons.
### Under the Hood
Fast Forward required a few core components:
- A **global hotkey manager** to detect when the right Command key is held down
- A system to **list open windows**, sorted by most recently used
- A simple but effective **fuzzy search algorithm** for fast navigation
- A **GPUI-based frontend** for the switcher interface
But, of course, not everything could be done purely in Rust.
### Bridging Rust and Swift
Some of macOS’s native APIs aren’t easily accessible from Rust, so I wrote a **Swift library** to handle those platform-specific tasks. The Rust and Swift components communicate via **Unix sockets**, exchanging **protobuf messages** under the hood.
It turned into a really fun architecture: a fast Rust core with a native bridge to the macOS system.
### Final Thoughts
Fast Forward started as a side project and a Rust learning experiment, but it’s become an essential part of my daily workflow. Building it stretched my understanding of Rust, system-level programming, and macOS internals—and I’d totally recommend this kind of challenge to anyone looking to level up their skills.
If you’re curious or want to try something similar, you can find the project [here](https://github.com/gaauwe/fast-forward)!