# What we're building now

YazSes is developed in the open, and this page shows where it stands. The sections marked
*generated* are produced from the repository each time the site is built: from
[`CHANGELOG.md`](https://github.com/MSKazemi/yazses/blob/main/CHANGELOG.md) and the
[release notes](releases/index.md). They are as current as the site, and they cannot say
anything the changelog does not.

For where the project is *going*, read the [roadmap](roadmap.md). This page covers what is
happening now.

## Latest release

*Generated.*

**Latest release: [v2.43.2](releases/v2.43.2.md)**, published 2026-10-18 — *no more words nobody said*. A loud burst with no speech in it is no longer decoded into the vocabulary prompt, a stray hold-release no longer re-types the previous dictation, and eyes-closed dictation no longer fires on a blink or stays off after a glance away.

[:material-download: Install or upgrade](get-started.md){ .md-button .md-button--primary }
[:material-tag: All releases on GitHub](https://github.com/MSKazemi/yazses/releases){ .md-button }

## On `main`, not yet released

*Generated.* Each item below is a change that has landed on `main` with its tests and will
ship in the next release. Each one is a heading in the changelog's `[Unreleased]` section,
where the full entry explains what changed and why.

**97 changes are on `main` and not yet in a release** — Fixed 47 · Added 34 · Changed 6 · Tests 6 · Security 2 · Docs 1 · Performance 1.

<details markdown="1">
<summary>Every unreleased change, grouped by kind</summary>

**Fixed** (47)

- the docs' memory and Docker-image figures are re-measured, and four stale status lines corrected
- Linux: enabling a voiceprint feature no longer downloads the CUDA build of PyTorch
- the website made 27 failing requests on every page view, and its home-page title named the product twice
- install and status pages that had drifted from the code and the live channels
- on Windows, the whole keyboard no longer lags while a dictation transcribes
- with Microsoft Store Python on Windows, `yazses status` and `stop` see the running daemon
- on Windows, no empty terminal window at sign-in after `yazses start` ([#330](https://github.com/MSKazemi/yazses/issues/330))
- `yazses autostart disable` stays disabled
- `scoop uninstall yazses` removes the start-at-login entry
- `yazses stop` stops YazSes, tray icon included, instead of being undone by it
- the Windows tray greys out a Meeting Mode entry that cannot work, and says why
- the Windows install guide's facts
- the Windows add-on spike's bind check reported a correct bind as FAIL
- with `yazses remote` connected, dictation was typed on this machine instead of the remote one
- updating will not break OpenCV (cv2) for camera-feature users
- dictated text no longer reaches the log when a keystroke tool fails
- `yazses report` no longer carries your home directory
- long streaming corrections on Wayland could delete text outside the dictation
- smaller defects found by new regression tests
- the one-click Windows update never ran the installer (unreleased feature)
- "install it with…" messages name a command that works on your install, and `yazses update` recognises a uv tool under a custom `UV_TOOL_DIR`
- the MCP `transcribe` tool and `meeting recover` now decode with your model, language, device and precision
- a non-English language on an English-only model is refused, not typed as English ([#515](https://github.com/MSKazemi/yazses/issues/515))
- Persian and Arabic names keep their punctuation in the tray, Settings and notifications ([#516](https://github.com/MSKazemi/yazses/issues/516))
- pushing a release tag no longer turns every open pull request red ([#602](https://github.com/MSKazemi/yazses/issues/602))
- Mandarin text no longer gains spaces, loses commas or doubles on the way to the app ([#501](https://github.com/MSKazemi/yazses/issues/501))
- implicit gaze calibration kept old eye positions too long, and across a layout change ([#397](https://github.com/MSKazemi/yazses/issues/397))
- Mandarin commands: a sentence could become a go-to-file/function/class, and numerals were not bounded where they should be ([#499](https://github.com/MSKazemi/yazses/issues/499))
- a language switch is proven whole before it lands, and doctor names the real command grammar ([#497](https://github.com/MSKazemi/yazses/issues/497))
- the hands-free controls window lists only stop routes that exist, and tells the truth about installs ([#420](https://github.com/MSKazemi/yazses/issues/420))
- a Mac without the Accessibility grant now says so when the Head-Pointer starts ([#402](https://github.com/MSKazemi/yazses/issues/402))
- the Wayland keyboard and pointer could write to their shared portal connection at the same time ([#403](https://github.com/MSKazemi/yazses/issues/403))
- implicit gaze calibration: the promotion verdict is a pure function, and the schema version is read ([#398](https://github.com/MSKazemi/yazses/issues/398))
- a face switch bound to `pause_pointer` did nothing while the global stop was off ([#407](https://github.com/MSKazemi/yazses/issues/407))
- an eyes-closed face switch could fire on an ordinary blink when the shared camera ran at 30 fps ([#406](https://github.com/MSKazemi/yazses/issues/406))
- a half-made Gesture Chord token no longer survives a hands-free Pause and Resume ([#408](https://github.com/MSKazemi/yazses/issues/408))
- an update could still delete an enabled feature's libraries, and a dead feature looked healthy
- the eye-control CI matrix lost its macOS leg to a new Homebrew Python ([#424](https://github.com/MSKazemi/yazses/issues/424))
- an eye-eval outcomes file could carry free text in a face-switch record ([#422](https://github.com/MSKazemi/yazses/issues/422))
- a camera feature could be switched on in a package that cannot run one ([#414](https://github.com/MSKazemi/yazses/issues/414))
- hands-free health named the camera for a model failure, and called a stalled camera "tracking valid" ([#416](https://github.com/MSKazemi/yazses/issues/416))
- macOS: no Accessibility or microphone prompt was ever raised, and `doctor` names a daemon that predates a grant ([#562](https://github.com/MSKazemi/yazses/issues/562), [#578](https://github.com/MSKazemi/yazses/issues/578))
- Mandarin: `yazses transcribe` ignored `[stt] chinese_script`, and the opt-in Hallucination Guard could drop a Han sentence
- `yazses start` keeps waiting through a transient IPC error, and says which endpoint stayed silent (#330)
- calibration no longer sets the gate from how loudly the sample was spoken ([#579](https://github.com/MSKazemi/yazses/issues/579))
- a damaged gaze calibration file could still read as valid (#415, ADR-v2-149)
- a face gesture begun before Resume no longer completes after it (#417)

**Added** (34)

- six accessibility features you can now turn on (experimental, off by default)
- implicit gaze calibration can now see real clicks on X11, Windows and macOS ([#607](https://github.com/MSKazemi/yazses/issues/607))
- ADR-029 "Runtime residency": RAM and CPU proportional to what is enabled (Proposed)
- the website shows what is being built right now, and a three-step quick start for every OS
- a licence check holds back any Windows add-on whose licences are unclear (ADR-028 Q7)
- a reviewed licence text can stand in for one a library does not ship (ADR-028 Q7)
- install a Windows add-on from a file with no network, and the uninstaller removes your add-ons (ADR-028 questions 4 and 5)
- add-on packs use YazSes's own ONNX Runtime (unreleased feature, ADR-028 M1)
- add-ons are downloaded again after a one-click Windows update (ADR-028 Q3, unreleased feature)
- the missing signal producers for six unwired accessibility features (#164)
- benchmark and evaluation tooling for Mandarin and Persian
- READY eye/camera validation slots appear in the contributor task finder ([#456](https://github.com/MSKazemi/yazses/issues/456))
- the Settings window checks for updates and installs dormant features
- one written response to a red check, and quarantines that expire ([#538](https://github.com/MSKazemi/yazses/issues/538))
- a daily CI telemetry report: queue time, runtime, cancellation and failure hot spots ([#536](https://github.com/MSKazemi/yazses/issues/536))
- a written, checkable milestone policy for open issues ([#480](https://github.com/MSKazemi/yazses/issues/480))
- a switched-on feature installs its own libraries at the moment it needs them, with one action, and an install can no longer break the base
- the Windows release builds feature add-on packs (ADR-028, build side of phases 0–1)
- add-on packs: the Windows installer build can turn on Parakeet and diarization (ADR-028, runtime side)
- the live traceability audit now reports issue-tracker drift, advisory only ([#487](https://github.com/MSKazemi/yazses/issues/487))
- the gaze field report now gives error percentiles and zone hit rates, and its validator rejects any report that could leak ([#399](https://github.com/MSKazemi/yazses/issues/399))
- face-switch false-activation replay: nuisance traces and a swappable detector ([#409](https://github.com/MSKazemi/yazses/issues/409))
- the Wayland gaze target is a cited capability model, and "close this" on Wayland is refused out loud ([#418](https://github.com/MSKazemi/yazses/issues/418))
- the hands-free preset is a `features` capability, and every way on checks its safety floor ([#410](https://github.com/MSKazemi/yazses/issues/410))
- `ci-gate`, one stable check for branch protection to require ([#462](https://github.com/MSKazemi/yazses/issues/462))
- one-click update on Windows ([ADR-027](design/adr/adr-027-one-click-windows-update.md))
- release validation standard, platform validation matrix and macOS campaign (docs only)
- paper-v2 tables and figure data are generated from the archived results (#508)
- Persian benchmark: the manifest gate, recorded selection seed, and stated scoring rules (FA-04, #513)
- per-decode cost records, a versioned cost schema and battery/macOS energy paths (#506)
- benchmark harness can record CPU core-seconds and optional energy (#506)
- language output profiles: one registry keyed by the STT language (FA-01, #509)
- eye-control results reuse the paper benchmark's provenance instead of describing it twice (#421)
- `examples/config.discord.toml`, a Windows 11 profile for Discord

**Changed** (6)

- the README now opens with what YazSes is, what it does, how to install it, and how to help
- the Windows installer carries Parakeet's engine and Chinese script conversion; the diarization add-on runs on the installer's ONNX Runtime
- documentation and project tooling
- five disabled features no longer load at daemon start, and the CLI no longer imports the config for `--version`
- the eye-validation registry declares every issue it names, and what hardware each cell needs ([#454](https://github.com/MSKazemi/yazses/issues/454))
- macOS install guide: the Open Anyway route first, and how to find a leftover daemon ([#562](https://github.com/MSKazemi/yazses/issues/562))

**Tests** (6)

- Glance-Type on the shared camera sees the same model and the same device ([#396](https://github.com/MSKazemi/yazses/issues/396))
- the Head-Pointer is proven reachable through the daemon, not only importable ([#404](https://github.com/MSKazemi/yazses/issues/404))
- every Head-Pointer state, every way in and out, on a fake clock ([#405](https://github.com/MSKazemi/yazses/issues/405))
- one MediaPipe result, three channels: every subset and every absence ([#395](https://github.com/MSKazemi/yazses/issues/395))
- the PointerSink contract now covers bounds and permanence ([#400](https://github.com/MSKazemi/yazses/issues/400))
- the shared camera owner is now held to its contract at the daemon, not only on its own (#394)

**Security** (2)

- the Windows diarization add-on stays unreleased: its libraries embed GPL code
- 20 of 21 open dependency advisories closed by upgrading, the last one assessed ([#116](https://github.com/MSKazemi/yazses/issues/116))

**Docs** (1)

- the machine-drafted translations say offline "by default", not "never"

**Performance** (1)

- a feature that is off no longer slows every start, and a test now holds that line

</details>

Want one of these before it is released? Install from `main` with
`pipx install git+https://github.com/MSKazemi/yazses` and report what you find. A test on
real hardware is the most useful contribution there is.

## Recent releases

*Generated.* Every release has a notes page that says what changed and how to upgrade.

| Release | Date | What it brought |
|---|---|---|
| [v2.43.2](releases/v2.43.2.md) | 2026-10-18 | no more words nobody said |
| [v2.43.1](releases/v2.43.1.md) | 2026-10-17 | fixes from the first macOS reports, and what ARM Windows PCs install |
| [v2.43.0](releases/v2.43.0.md) | 2026-10-17 | a second keyboard works, and five opt-in features you can now turn on |
| [v2.42.0](releases/v2.42.0.md) | 2026-10-04 | prove that typing arrives |
| [v2.41.0](releases/v2.41.0.md) | 2026-10-04 | dictation that was heard and typed into nothing |
| [v2.40.1](releases/v2.40.1.md) | 2026-09-25 | hold the key we actually listen for |

Follow new releases without an account: [RSS](https://mskazemi.com/yazses/feed_rss_created.xml) ·
[JSON Feed](https://mskazemi.com/yazses/feed_json_created.json) · [GitHub releases](https://github.com/MSKazemi/yazses/releases).

## How YazSes is built

A small set of rules holds every change in place. Tests enforce them; a reviewer does not
have to remember them.

| Rule | What it means for you | Where it is held |
|---|---|---|
| **Nothing leaves the machine** | Audio, transcripts and the learning corpus stay on your computer. No telemetry, analytics or crash reporting. | A test fails the build when a module gains a network call that is not registered and classified ([ADR-019](design/adr/adr-019-egress-inventory-and-escalation.md)) |
| **New features ship off** | Upgrading never changes what your install does until you switch something on. | Every feature has a config section whose default is dormant ([features](features.md)) |
| **Heavy dependencies are optional** | The base install stays small. Torch, ONNX, Qt and similar libraries arrive only with the feature that needs them. | Optional extras, imported lazily, and a test that a disabled feature costs a default start nothing |
| **Pure logic, injected backends** | The decision-making code is unit-tested directly, without a microphone or a model. | The [architecture](architecture.md): pure modules beside swappable engines |
| **Every OS behind one interface** | Linux, macOS and Windows differences live in one place, which is also what makes an Android port possible. | Protocols in `platform/base.py` ([platform support](platform-support.md)) |
| **Tests come with the change** | A behaviour change arrives with the test that proves it. | The suite runs on Linux, macOS and Windows for every push and pull request |
| **Decisions are written down** | You can read *why* something works the way it does, including what was declined. | [Architecture decision records](design/adr/index.md) |

The code is Python 3.11+, managed with [`uv`](https://docs.astral.sh/uv/). Speech-to-text
is [faster-whisper](https://github.com/SYSTRAN/faster-whisper) on the CPU by default;
[NVIDIA Parakeet TDT and Moonshine](models.md) are opt-in engines. The full stack is in the
[architecture overview](architecture.md) and its [diagrams](diagrams/index.md).

## Where the work is organised

- **[Milestones](https://github.com/MSKazemi/yazses/milestones)**. Each one is an
  outcome you can help reach: the Settings window, installing anywhere, hearing better,
  voice control, the first-hour experience, hands-free input, and Android.
- **[Roadmap](roadmap.md)**. The direction, from dictation tool to keyboard-optional
  computing, and the principles that do not move.
- **[Research](research/index.md)**. The cited science behind each design choice, plus
  [open questions](research/agenda.md) for students and researchers.
- **[Discussions](https://github.com/MSKazemi/yazses/discussions)**. Ideas, questions and
  show-and-tell.

## Join in

Most first contributions need no knowledge of the codebase, and many need no code at all:
testing on your own hardware, translating, adding a microphone that worked for you, or
improving a page like this one.

[:material-hand-heart-outline: Find a task that fits](contribute/start.md){ .md-button .md-button--primary }
[:material-github: Open issues](https://github.com/MSKazemi/yazses/issues){ .md-button }
[:material-robot-outline: Contributing with an AI agent](contribute/ai-agents.md){ .md-button }
