I’ve been building Utter for a while now, and people keep asking the same two questions: what is it, and why does it need to run offline? Fair questions. Here are my answers.
What Utter is
Utter is a voice assistant for your desktop. You speak, it acts: open applications, type text, control your window manager, run the small automations you’d otherwise do with a keyboard. It runs on Linux with Wayland today, and on macOS in beta. It is Apache-2.0 licensed, the whole thing, not a “community edition” of it.
Under the hood it is a small runner with a plugin architecture. Speech recognition, the language model, perception, actions and the voice that answers you are all separate pieces, so you can swap any of them (a different model, a different output voice, a different set of tools) without forking anything. Most of it is Python and TypeScript, with Rust where performance matters, and the settings app is built with Tauri.
Why local-first
Voice is the most personal input we have. When you dictate to your computer, you are saying things out loud that you would normally only type: half-finished thoughts, credentials, the name of a client you’d rather not announce to a server. Sending that audio to someone else’s datacenter by default has always felt backwards to me.
There is a practical argument too. Round trips to an API add latency you feel in your hands, they cost per request, and they stop working the moment your network does. Local models have quietly gotten good enough that wake-word detection, speech-to-text and a small language model all run comfortably on an ordinary laptop. The result is instant, free to run, and usable on a plane.
Local-first also means inspectable. Because Utter is open source with clear seams between its parts, you can read what happens between “hey Utter” and a window actually moving. That is the whole point: an assistant you can audit is one you can trust with your desktop.
What’s next
I’m chipping away at it in the open: better plugin ergonomics, more actions, smoother macOS support. If any of this sounds like your kind of thing, the repo and the docs are both public. Issues and pull requests welcome.