local-first · Linux (X11 & Wayland), macOS & Windows · no cloud
NAVA
Hold a key. Speak. Done.
AI voice dictation that runs entirely on your machine — faster-whisper ASR, XTEST injection, no telemetry.
- RTF on a 2015 i7
- ~0.45×
- Audio written to disk
- 0bytes
- Telemetry calls home
- none·ever
// what is nava
A voice, injected anywhere
Hold Right Ctrl, speak, release — polished text lands in whatever app has focus. Everything runs on your machine. No accounts, no cloud, no catch. Runs on Linux (X11 & Wayland), macOS, and Windows.
-
Types into any window
XTEST typing → clipboard-paste → notify, with automatic per-app paste policy and Unicode-safe routing. It just shows up where your cursor is.
-
faster-whisper, on your CPU
small.enint8 at ~0.45 RTF on a 2015 i7, with Silero VAD and anti-hallucination tuning. Need more accuracy? Switch tomedium.en. -
Clean text, your terms
Filler removal plus a custom-dictionary proper-noun correction pass (Tier-1, ~0 ms). Your jargon and names come out spelled the way you mean them.
-
A daemon, not a GUI
Rich + questionary TUI for setup, a headless
systemd --userdaemon for everyday use. Start it once and forget it's there.
// get it running
Install
Pick your platform below, then follow the numbered steps. The first run downloads the
Whisper model (~250 MB for small.en); after that, NAVA is fully offline.
Choose your platform
-
Download the package
Debian · Ubuntu · Linux Mint — pulls system deps and builds a venv in
/opt/nava. -
Install it
$ sudo apt install ./nava_0.0.1_all.deb -
Set it up
$ nava setup # model · hotkey · cues · dictionary -
Run it
$ nava start # background daemon; nava enable = auto-start on login
Other install methods (AUR · AppImage · from source)
AUR — Arch Linux
The Python env is created in /opt/nava/venv on first nava run.
$ cd packaging/aur && makepkg -si
$ nava setup && nava start
AppImage experimental
Bundles Python + NAVA deps. You still need xdotool xclip x11-utils libnotify-bin on the host.
# build it (needs: pip install python-appimage)
$ bash packaging/appimage/build_appimage.sh
$ ./build/appimage/NAVA-0.0.1-x86_64.AppImage setup
From source
install.sh handles apt deps + venv + wizard, or do it by hand.
$ git clone https://github.com/arasheslamii/nava nava && cd nava
$ ./install.sh # apt deps + venv + wizard, or:
$ python3 -m venv .venv && . .venv/bin/activate
$ pip install -e ".[hotkey,audio,asr,tui,bench,dev]"
$ sudo apt install -y xdotool xclip x11-utils libnotify-bin libportaudio2
$ nava setup
Build the .deb yourself
$ bash packaging/deb/build_deb.sh # -> dist/nava_<version>_all.deb
-
Download the package
Debian · Ubuntu · Mint on Wayland — same ASR, formatting and UX as the X11 build; only the injection layer differs.
-
Install it
$ sudo apt install ./nava-wayland_0.0.1_amd64.deb -
Log out and back in — once
Required. Installing the.debadds you to theinputgroup. That membership only takes effect after a fresh login, so log out and back in once before continuing — otherwise the hotkey and injection won't work. -
Verify
$ nava doctor # should be all green -
Run it
$ nava start # background daemon; nava enable = auto-start on login
Wayland blocks global hotkeys/injection at the protocol level, so NAVA uses the kernel input layer (uinput/evdev). The installer adds you to the input group and installs a udev rule — you must log out and back in once. Works on GNOME, KDE, and Sway.
Same ASR, formatting and UX as the Linux builds. macOS ships as a source download that installs via an included one-line install.sh — there's no prebuilt .dmg yet; a native installer must be built on a Mac.
-
Run the installer
$ ./install.sh # installs PortAudio (Homebrew) + a venv + the setup wizard -
Grant permissions
Open System Settings > Privacy & Security > Accessibility and add your Terminal — this is required for the hotkey and text injection, and it's easy to miss. Your Microphone permission is requested automatically on first use. -
Verify
$ nava doctor -
Run it
$ nava dictate # hold Right-Ctrl, speak, releasenava startruns it as a background daemon via launchd (auto-starts at login).
macOS requires a one-time Accessibility permission for the hotkey + text injection (add your Terminal in System Settings → Privacy & Security → Accessibility), and a Microphone permission on first use. Homebrew is used to install PortAudio.
Same ASR, formatting and UX as the Linux builds. Windows ships as a source download that installs via an included one-line install.ps1 — there's no prebuilt .exe yet; a native installer must be built on a Windows machine.
-
Run the installer (PowerShell)
$ powershell -ExecutionPolicy Bypass -File .\install.ps1 -
Verify
$ nava doctor -
Run it
$ nava dictate # hold Right-Ctrl, speak, releasenava startruns it as a background daemon;nava enable= auto-start on login.
No special permission needed for injection; Windows may prompt once for Microphone access. Requires Python 3.10+ (python.org). A self-contained nava.exe (no Python needed) can be built with the included PyInstaller spec on a Windows machine.
Requirements — installed automatically as package dependencies
| Tool | Debian / Ubuntu | Arch | Purpose |
|---|---|---|---|
xdotool | xdotool | xdotool | XTEST typing + paste + window detection |
xclip | xclip | xclip | clipboard backend |
xprop | x11-utils | xorg-xprop | per-app paste policy (terminals) |
notify-send | libnotify-bin | libnotify | optional desktop notifications |
PortAudio | libportaudio2 | portaudio | microphone capture |
Plus Python ≥ 3.10. The table above covers the Linux (X11) build; the Wayland, macOS, and Windows builds pull the equivalent deps automatically through their installer.
// the manual
Commands
One nava binary runs the whole show — foreground dictation, the background daemon, diagnostics, and low-level injection. The same commands work identically across all four builds — Linux (X11 & Wayland), macOS, and Windows.
| Command | What it does |
|---|---|
nava dictate | foreground: hold Right-Ctrl → speak → release → inject |
nava start / stop / status | background daemon (systemd --user) |
nava enable | auto-start on login |
nava paste-last | re-inject the most recent transcript (bind to a DE shortcut) |
nava setup / config | TUI wizard / config editor |
nava doctor | diagnostics (X11, xdotool, clipboard, mic, hotkey, ASR) |
echo hi | nava-inject | low-level text injection |
// save point
Keep NAVA local & free
NAVA is built clean-room and given away for free. If it earns a place in your workflow, a small contribution keeps the models tuned, the packages fresh, and the project independent. No pressure — a star on GitHub helps too.
GitHub Sponsors is live; Ko-fi and Buy Me a Coffee are coming soon.
// need a hand?
Support & community
Most problems are one command away. When they're not, the community is on GitHub.
-
Run
nava doctorDiagnoses X11, xdotool, clipboard, mic, hotkey and ASR in one pass — start here before filing anything.
-
Report a bug ↗
Found something broken? Open an issue with your
nava doctoroutput and we'll dig in. -
Ask & share ↗
Questions, tips, dictionary sets and feature ideas — bring them to Discussions.