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.51.0

“Glance-Type says what works on your session, clearer doctor reports, and Mandarin safety checks”

v2.51.0 makes gaze status, doctor and status list what Glance-Type can and cannot do on your session, reports a click observer that failed to start, refuses a feature toggle that would half-apply a language profile, keeps Chinese meeting minutes inside the summariser's context, and replaces a stale macOS daemon on reopen.

Recent releases

  1. v2.50.0 Settings that keep your changes, a first-run ready notice, and safer files and sockets
  2. v2.49.0 owner-only private files, a Hands-free settings page, and fixes for silent failures
  3. v2.48.1 fixes: tray stop, pinned microphone, Persian dictation, clearer errors
  4. v2.48.0 biosignal switches (off by default), a lighter-memory option, and honest language docs
  5. v2.47.0 updates that actually apply, and fixes for what silently failed

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.

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

Where things stand

What is released, what is experimental, what is research

Four independent summaries, each using the status words of the roadmap. They are not stages: none of them leads to the next, and nothing here is a delivery date. Nothing leaves your machine, and new features start switched off.

Status: Released

Desktop dictation core

Local hold-to-talk dictation, file transcription and opt-in Meeting Mode, with several local speech engines.

  • Installers and packages exist for Linux, macOS and Windows
  • Windows and macOS are preview-level: an install is not the same as a successful dictation
  • Capture, transcription and typing still need per-platform checks on real machines, including X11 and GNOME/KDE Wayland

Claim limit: released means reachable in a tagged build, not verified on every OS or app.

Status: Released · real-client check pending

Agent-era interfaces

The local MCP server (stdio) with ask_human, an opt-in send-to hand-off, and a one-click .mcpb bundle.

  • ask_human and the MCP server are released
  • send-to is off by default: it opens the Claude or Codex desktop app with your prompt filled in, and never sends it
  • send-to and the .mcpb bundle have not yet been tried in the real Claude or Codex apps
  • Not available: a listing in the official MCP registry

Claim limit: pre-fill without sending is the vendors’ documented behaviour, not yet observed here.

Status: Experimental · hardware-unverified

Hands-free input

Gaze targeting, head pointer and Voice Pilot, plus EMG, blink and jaw-clench switches. All opt-in and off by default.

  • Source readers and synthetic or replay paths exist
  • Passing simulated tests is not proof on a physical device, and acceptable false-activation rates are not established
  • These switches do not read thoughts and are not medical devices

Claim limit: real-device evidence is not established; a shipped reader is not a qualified hardware device.

Status: Research · Deferred · not scheduled

Android, recall, XR

Ideas that are open to evaluation or waiting on a decision. None is a promised release.

  • Android: source foundations and early Kotlin modules only. There is no installable app or APK
  • Semantic, cited recall: research only. Today only keyword recall of your own dictation ships, and it is opt-in
  • XR and wider HCI studies: research only
  • Mixed-language switching: deferred, designed but not wired

Claim limit: ADR-030 freezes new capability waves outside its four pillars; lifting that takes a recorded decision with evidence.

Status words, as the roadmap defines them: Released is in a tagged build; Experimental is opt-in with synthetic or CI evidence only; Research and Deferred are not scheduled. What each word does and does not establish

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 experimental EMG muscle-sensor trigger (off by default; no real-device evidence yet, see the known limits).

    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. Since v2.44.0 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 an experimental EMG (muscle-sensor) trigger (off by default; no real-device evidence yet).

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