# How it works

- **Rust and Slint.** Hover is one native app. The 2.x Windows app was .NET and WPF; 3.0 replaced it, and reads everything 2.x left behind: the data folder, the key, `settings.json` and the sessions.
- **One window, one value.** The notch is a single full-size, click-through window. Its shape grows from the resting size to the office by animating one openness value; the window itself never resizes, so it never blinks.
- **A Swift app on the Mac.** On macOS the notch, menu bar, Settings and voice are Swift (`macos/`), around the same web office in a WKWebView, on the Rust backend (`hover-backend`), which the app starts over JSON lines on stdin and stdout. The Slint app is for Windows and Linux.
- **Never steals focus.** At rest it can't be activated, so brushing it doesn't take your keyboard. That changes only while the office is open.
- **Agents over ACP.** Each tool is one hidden child speaking JSON-RPC over stdio (OpenCode: its own local HTTP server). A conversation is an ACP session; a reply goes to the same one.
- **The office is drawn on the GPU**, in its own crate, at one pixel per CSS pixel. It slows right down when nothing happens and pauses while hidden. With no GPU it draws at half size instead.

---

Part of the [Hover docs](https://tryhover.co/docs.md) (Reference). HTML version: https://tryhover.co/docs/architecture. Index for agents: https://tryhover.co/llms.txt