Yumii isn't distributed as a fat installer. A release is two small artifacts plus a live install script:
| Piece | What | Built by |
|---|---|---|
yumii on PyPI | The Python backend as a normal wheel | uv build + trusted publishing (no tokens) |
Yumii.exe (~9 MB) | The Tauri shell, attached to the GitHub release | cargo tauri build on a Windows runner |
install.ps1 | Served live from master via yumii.me | — it's just a file in the repo |
The install command wires them together: it installs uv → the backend from PyPI → downloads the exe from the latest GitHub release → Start Menu shortcut. Local models aren't bundled anywhere — the app downloads them on first launch (Whisper from Yumii's own model mirror release, Kokoro from its upstream release).
Cutting a release
Users update by re-running the install command — uv tool install --upgrade
pulls the new wheel, and the exe is re-downloaded from the latest release.
The model mirror
Local Whisper models are mirrored on a permanent, non-latest release
(whisper-models-v1) because HuggingFace's CDN is blocked or throttled on
some networks. The one-time publish-models.yml workflow (manual dispatch)
repackages the upstream Systran models (MIT) as zips; the backend downloads
and verifies completeness before ever using one. If you add a model size,
re-run that workflow — never point it at the app's v* releases.
Code signing (the missing stage)
Yumii.exe is unsigned, so some machines show SmartScreen warnings on first
run. Signing needs a paid certificate — deferred until traction justifies
it. The install script clears the Mark-of-the-Web on the exe it downloads,
which covers the common case.
Testing a release like a stranger
The only honest test is a machine with nothing on it: no Python, no repo,
no ~/.yumii. Run the install command, launch, watch the
first-run downloads, paste one key, talk. Everything else is testing your
dev environment by accident.