Skip to content

Open source · Apache-2.0 · runs on your CPU

Offline voice dictation for Linux, macOS & Windows

Hold a key, speak, release — YazSes transcribes your words on-device with faster-whisper and types them into whatever app has focus. No cloud. No API key. No subscription. Nothing leaves your machine.

bash <(curl -fsSL https://raw.githubusercontent.com/MSKazemi/yazses/main/install.sh)

Right Alt Idle — hold the key
🔵 idle🟢 recording🟣 command⚡ on-device decode
  • No cloud
  • No API key
  • No account
  • No telemetry
  • X11 & Wayland
  • Works over SSH
  • Voice commands & macros
  • Meeting transcripts
  • Speaker labels
  • Encrypted on-device learning
  • Off by default
  • Apache-2.0
0 bytes of audio or text sent anywhere by default
1.56 s median decode, default base.en, CPU only, no GPU
2.06% word error rate with Parakeet TDT on LibriSpeech
99.98% of a burst’s latency is the speech model — the rest is noise

Quick start

From zero to your first dictated sentence

Three steps, a few minutes, no account. The speech model downloads once; after that, dictation never touches the network.

  1. Install

    bash <(curl -fsSL https://raw.githubusercontent.com/MSKazemi/yazses/main/install.sh)

    One command for Ubuntu, Debian, Fedora, Arch and their relatives. It installs YazSes plus the audio, hotkey and typing helpers your session needs, then runs yazses doctor.

    APT, Snap or pipx instead →
  2. Allow and check

    yazses doctor
    yazses mic-level --set

    If doctor says you were added to the input group, log out and back in once. mic-level --set tunes the voice gate to your microphone and room.

    Something flagged? →
  3. Dictate

    yazses start

    Now hold Right Alt, speak, and release. The words are typed wherever your cursor is, in any app, on X11 or Wayland.

    Use a different key →

Next: the five-minute guide · voice commands · transcribe a recording · try it without installing

In development

What we’re building right now

Generated from the changelog on every build, so this section can’t drift from the code. Development is open: every change lands with its tests, and every decision is written down.

Latest release

v2.46.0

“a Settings window you can actually see”

The Settings window is now a sidebar of pages, so the Features list finally gets the whole window, and 'Apply and restart' from the tray or Settings no longer leaves the daemon stopped on a systemd install.

On main, not yet released

11 changes waiting for the next release

  • Added 7
  • Changed 3
  • Fixed 1
  1. Fixedon Windows the Speech page no longer offers settings that do nothing
  2. ChangedCI: uv and Python setup live in one composite action (#537)
  3. ChangedTelugu page: the opening says the key is released
  4. ChangedAndroid: the model URLs are pinned to a commit
  5. AddedAndroid: the model catalogue has its first two models
  6. AddedAndroid: the speech-engine seam (:core:stt)

Recent releases

  1. v2.45.0 your words no longer go missing
  2. v2.44.0 your words land where you meant them
  3. v2.43.2 no more words nobody said
  4. v2.43.1 fixes from the first macOS reports, and what ARM Windows PCs install
  5. v2.43.0 a second keyboard works, and five opt-in features you can now turn on

Architecture

Nine stages. One machine. Zero round‑trips.

Every time you hold the key, your audio flows through a fixed pipeline that never touches the network. Hover or tap a stage — the pulse shows a burst moving through it.

  1. 01 Hotkey trigger
  2. 02 Capture audio
  3. 03 VAD gate 0.063 ms
  4. 04 Padding lead-in
  5. 05 STT decode 1 561 ms
  6. 06 Clean 0.005 ms
  7. 07 Disfluency 0.147 ms
  8. 08 Classify 0.075 ms
  9. 09 Inject type · keys

Hold-to-talk starts a burst; releasing ends it. The trigger can also be an EMG muscle sensor over USB serial — a hands-free option.

src/yazses/platform/emg/

The stack

CLI · tray · Settings windownever touch the pipeline directly
yazses-daemonone long-lived process · a state machine
Pure pipelinedependency-free logic, unit-tested directly
LinuxmacOS WindowsAndroid · early build

The dictation loop

The spine is four states. Meeting capture, read-back, the SSH remote path and enrollment are modes you enter deliberately over IPC — and return from.

Activation seam

“What starts a burst” is a contract. A key and an EMG squeeze already implement it; a wake word, a switch or a BCI would be a third — without touching the pipeline.

Engine seam

SttEngine made Parakeet and Moonshine config changes, not a fork. Anything that turns audio into words plugs in here.

Platform seam

Every OS difference is a Protocol. That is what makes Android a port rather than a rewrite.

Read the full architecture Browse the diagrams

The future

From a dictation tool to keyboard‑optional computing

Four eras. Each is a promise kept before the next begins — and every step stays offline, encrypted on-device, and off until you turn it on.

Shipped

Foundation

a tool that works

  • Hold-to-talk dictation into any app
  • Linux, macOS and Windows
  • Voice commands & macros
  • Encrypted on-device learning loop

Shipped · hands-free maturing

Perception

it hears and sees well

  • Meeting Mode with speaker labels
  • Parakeet TDT and Moonshine engines
  • Gaze targeting & EMG activation
  • Head-Pointer & face switch (experimental)

Next · under way

Understanding

it knows what you mean

  • Offline command mode over selected text (shipped)
  • Settings that install what they enable
  • Windows add-ons for Parakeet & speaker labels
  • Android dictation keyboard

The horizon

Recall

it remembers for you

  • Recall by meaning over everything you dictated
  • An ambient scribe you control
  • A computer you talk with — that stays yours
shippedin progress designed, aheadresearch horizon

Designed — and deliberately unbuilt

Cloud escalation is fully specified and stays unimplemented, so the offline promise can never erode by increments. Voiceprints, the learning corpus and third-party capture may never leave at all.

ADR-019

Declined, with reasons

Third-party plug-ins would sit on the hot path with your microphone, transcript and keyboard. They stay out until a real isolation boundary exists.

ADR-018

Gated on a measurement

Personal speech adapters — including for dysarthria, ALS and Parkinson’s — ship only after a measured accuracy win on held-out data. Ideas don’t ship on their own strength.

Future work

Join a milestone

The full roadmap The research behind it

See it run

YazSes — hold a key, speak, release; the text is typed into the focused app

40-second tour: the core loop, the command line, and the system tray. Terminal output is real; the command-line typing is re-enacted for legibility. Watch it with narration and chapters on YouTube

yazses doctor — all green, fully offline by default

Why YazSes

  • Fully offline by default & private


    Speech is transcribed on-device with CPU faster-whisper (int8). No GPU, no network, no account. No audio, no text — nothing leaves the machine by default.

    Privacy statement

  • Types into any app


    Hold the hotkey, speak, release — the text lands in whatever window has focus: editor, browser, terminal, chat. Works on X11 and Wayland.

    Install on Linux

  • Works over SSH and Remote-SSH


    Because text is injected at the OS level, not inside an app, it lands in VS Code / Cursor Remote-SSH panes, integrated terminals, tmux and container shells — where in-app dictation usually can't reach.

    Dictation over SSH

  • Voice commands & macros


    A regex grammar maps "undo that", "save file", "go to line 42" to real key sequences.

    Command index

  • Transcribe recordings


    yazses transcribe meeting.m4a turns any audio/video file into text — offline, with --diarize speaker labels and subtitle export.

    Transcription guide

  • Built for accessibility


    VAD calibration, mic-level tuning, dysfluency-friendly mode, and an EMG muscle-sensor trigger for fully hands-free use.

    Features

  • Self-improving, on your terms


    An opt-in, encrypted, on-device learning corpus lets yazses tune propose accuracy fixes from your own corrections.

    Performance tuning

Install

bash <(curl -fsSL https://raw.githubusercontent.com/MSKazemi/yazses/main/install.sh)

The universal installer provisions audio, hotkey and text-injection prerequisites, then runs yazses doctor. See the Linux install guide for APT, Snap and pipx alternatives.

Preview: supported and installable, not yet verified on hardware by a person on a current build. The validation matrix shows what testers have confirmed so far.

On Apple Silicon, Homebrew is the recommended route:

brew tap MSKazemi/yazses
brew trust MSKazemi/yazses
brew install --cask yazses

Apple Silicon and Intel also have native .dmg builds. See the macOS install guide for downloads, Gatekeeper and Accessibility/Microphone permissions.

Preview: supported and installable, not yet verified on hardware by a person on a current build. Two testers have reported dictating on Windows 11; the validation matrix shows what has been confirmed.

winget install MSKazemi.YazSes

winget installs the x64 build, which also runs on ARM64 PCs under emulation. It can trail the newest release by a few weeks; the installer on the latest release, Scoop and Chocolatey (choco install yazses) track every release. See the Windows install guide for SmartScreen and microphone permissions.

pipx install yazses

This installs the Python package on supported platforms. On Linux, run yazses setup afterward to provision system dependencies. On macOS and Windows, prefer the platform-specific route above when you want the packaged desktop experience.

The snap on Wayland

The strictly confined snap dictates on X11, and on GNOME/KDE Wayland through the xdg-desktop-portal RemoteDesktop API. It cannot configure or use the host ydotoold service, so the portal is the route it takes; the first dictation asks once for permission and the answer is remembered. The unconfined installs above remain the most-tested Wayland path.

On X11 and Wayland alike, connect both required interfaces after installing, then start it:

sudo snap install yazses
sudo snap connect yazses:audio-record
sudo snap connect yazses:raw-input
yazses doctor
yazses start

yazses setup is not required for the snap. Confinement prevents it from installing host packages, changing groups, or configuring host services, so it can only print the manual permission checklist; the snap already bundles its X11 dependencies.

Installed with pipx on Linux? Provision the host in one command. Skip this if you used the universal installer or APT path — both already do it:

yazses setup        # installs audio + injection deps, joins the input group, sets up ydotoold
# then log out and back in (the input-group change needs a fresh login)

Then, on Linux or a pipx install:

yazses quickstart        # machine-tailored next steps; read-only
yazses doctor            # check mic, injection backend and permissions
yazses mic-level --set   # tune the silence gate to your room and voice
yazses start             # start the dictation daemon

On macOS (Homebrew or .dmg) and Windows (winget or the installer) there is nothing to type: open YazSes, grant the permissions it asks for, and it runs from the menu bar or system tray. From the release after 2.43.2 the Homebrew cask puts a yazses command on your PATH; with the .dmg, the CLI is /Applications/YazSes.app/Contents/MacOS/YazSes --cli doctor.

Hold the hotkey (Right Alt on Linux, Right Option on macOS, Right Ctrl on Windows), speak, release — the text appears in the focused app within one to two seconds on a laptop CPU. The quick start walks through each OS step by step.

What it does

  • Offline dictation — type into any focused app with on-device faster-whisper (CPU, int8). No GPU needed.
  • Transcribe recordings — yazses transcribe meeting.m4a turns any audio/video file into text, fully offline. Add --diarize to tag who said what and --format srt for subtitles. See the transcription guide.
  • Voice commands — a regex grammar maps phrases to editor/terminal key sequences: "undo that", "save file", "go to line 42", "run the tests", "rename this to user_id".
  • Macros & personal vocabulary — define multi-step commands and teach YazSes your mis-heard words.
  • Dysfluency-Friendly Mode — opt-in collapse of stutters/repeats for stuttered or dysarthric speech.
  • Self-improving — opt-in, encrypted on-device learning corpus; yazses tune proposes accuracy fixes from your own corrections.
  • Accessibility — VAD calibration, mic-level tuning, and EMG (muscle-sensor) trigger support.

What people use it for

Browse all use cases

When not to use it

YazSes is not an LLM agent — it dictates text and runs editor/terminal commands; it does not browse, reason over your files, or hold a conversation. It uses CPU faster-whisper (a cloud service may still win on raw accuracy for a noisy mic), ships English-tuned *.en models by default, and is desktop-only.

How it works

Hold hotkey → record audio → VAD gate → faster-whisper (CPU)
            → clean + disfluency filter → command grammar (Tier 1 regex)
            → dictate? type it · command? send keys

Two at-a-glance signals show you what YazSes is doing: a top-bar "Y" tray icon whose colour is a live state indicator (🔵 idle · 🟢 dictating · 🟡 no text target → clipboard · 🟣 command mode · 🔴 problem) and an optional sonar overlay that pulses near your cursor while it's listening. See Tray icon & overlay for what each colour means.

Want the CLI itself, not a description of it? Watch it play right here — a real asciinema recording of -h → about → quickstart → features → status, with selectable, copy-pasteable text. Or in your own terminal: asciinema play docs/demo/yazses-cli.cast.

Curious why it works this way?

The research section is a public, fully-cited notebook on post-keyboard input: how accurate webcam eye tracking really is, how offline speech recognition overtook the cloud, and why a $50 muscle sensor beats a $1,000 EEG headset. Every design decision in YazSes traces back to a measurement there — and the open questions are open to anyone.

FAQ

Does it work without internet? Yes — transcription runs locally; nothing is sent anywhere by default.

What GPU do I need? None. It runs on CPU; 4 GB RAM minimum, 8 GB comfortable.

Does it work on Wayland? Yes. Unconfined installs use wtype/ydotool; the strictly confined Snap uses the xdg-desktop-portal RemoteDesktop API on GNOME/KDE Wayland. The universal installer remains the most-tested Linux path. A hardware-verified record on GNOME and KDE Wayland is still to come (#643).

Is it a replacement for Talon? YazSes focuses on offline dictation plus a practical command grammar. Talon has far more advanced scripting. They can coexist.

More answers in the full FAQ, and a side-by-side in Comparison & alternatives.


Apache-2.0 licensed. If YazSes is useful to you, a ⭐ on GitHub helps others find it.

Want to help? See Contributing — several tasks need no code at all, like translating the README, sharing a config you already use, or adding the microphone that worked for you.

Your voice is yours. Keep it that way.

Free, open source, and fully offline — on the machine you already own.

Questions or feedback? mohsen.seyedkazemi@gmail.com