Download OpenMila
Pick a button below: a Windows installer or a portable zip, a Linux
.deb or an AppImage. Each one fills in with the exact file
name and size for the current release.
The current version is
1.9.5-beta.2+port.3, a port of Mila
v1.9.5-beta.2. The
changelog explains the numbering.
No release has been published yet
OpenMila is in early development. The first Linux beta will appear on the releases page; watch that page, or the repository, to hear about it. The buttons below point there until a release exists, and the reference material further down describes the files that release will contain and the commands to verify them, so you can read it before you need it.
Get OpenMila
Every release also carries a SHA256SUMS file, an SBOM and
a build provenance attestation; see
verify what you downloaded.
What a machine needs
There is no Mac-class floor here, because these systems run on anything. These are the honest numbers for the models OpenMila ships, which are large.
| Requirement | Minimum | Comfortable |
|---|---|---|
| CPU | 4 cores, x86-64 | 8 or more cores |
| RAM | 8 GB | 16 GB |
| Free disk | 6 GB: the app, both models, and room for recordings | 20 GB |
| GPU | None. The CPU path is fully supported. | Any Vulkan 1.0 device with a working driver |
| Linux | GTK 4, and glibc 2.39 or newer (Ubuntu 24.04 and newer); PipeWire for per-application audio | The same, on a GNOME or KDE session |
| Windows | Windows 11, or Windows 10 version 2004 or newer for per-application audio | Windows 11 |
Where those numbers come from
- Disk
- ivrit.ai large-v3 is 2.9 GB as installed and OpenAI large-v3-turbo is 1.6 GB, on top of a package of about 75 MB. Speaker diarization brings its own runtime: PyTorch is downloaded the first time you enable it and is over 1 GB.
- RAM
- A large-v3 model is loaded whole. 8 GB works; it is tight while a browser is open.
- Live AI
- Live AI has a floor of its own, inherited from Mila: fewer than 8 logical cores, or less than 12 GB of RAM, counts as the constrained class and the rolling summary is gated off. Transcription itself is not gated.
- Speaker diarization
- pyannote runs on the CPU on every system, macOS included, and it is the slowest optional feature on a weak machine.
What a GPU does here
The release packages for both systems carry whisper.cpp's Vulkan backend, and the app asks the machine what it has before using it. A discrete, integrated or virtual GPU gets the model. A software Vulkan device (llvmpipe, lavapipe, SwiftShader) is refused, because running the model through a CPU pretending to be a GPU is slower than whisper.cpp's own CPU backend. No Vulkan at all is not an error: the CPU path is the fallback and the common case.
openmila-cli gpu prints what the probe found, Settings shows
it under Models, and the diagnostic report carries it. Settings also has
a switch to force the CPU, for a driver that misbehaves, and
OPENMILA_DISABLE_GPU=1 does the same from a shell.
No speed has been measured yet
The decision logic is tested and the backend is compiled in, but no transcription has been timed on a real GPU on either system: the development machine has none, and no Windows machine has run a model. So "Vulkan works" means built, probed and wired, not "faster by this much". There is no honest figure for the two shipped models on this hardware either, and a number borrowed from another machine would be worse than none. Benchmarks come from the beta.
The reasoning behind all of this, and what is left to do, is in docs/port/HARDWARE.md.
Linux
Tested on Ubuntu 26.04 (GNOME, on both Wayland and X11). Other current desktops with GTK 4 should work. Linux is the platform OpenMila is developed on, so this is the better supported of the two.
AppImage
One file, no installation. Download
OpenMila-<version>-x86_64.AppImage and the
.sha256 file next to it, then check it:
sha256sum -c OpenMila-<version>-x86_64.AppImage.sha256
Make it executable and run it:
chmod +x OpenMila-<version>-x86_64.AppImage
./OpenMila-<version>-x86_64.AppImage
If it complains about FUSE, run it with
--appimage-extract-and-run, or install
libfuse2t64.
Debian package
openmila_<version>_amd64.deb is built from the same
payload as the AppImage and ships its own .sha256 file.
Check it, then install it with the package manager so the dependencies
come with it:
sha256sum -c openmila_<version>_amd64.deb.sha256
sudo apt install ./openmila_<version>_amd64.deb
The .deb does not update itself. Package installs are
pointed back to the releases page, because updating belongs to the
package manager. The AppImage does update itself: it checks the
published SHA-256 and replaces the running file, and it has a beta
channel with a pre-release guard.
What Linux needs installed
- Required
-
GTK 4 and libadwaita, libsecret, GLib, zlib, and PipeWire or
PulseAudio for audio. The
.debdeclares these aslibgtk-4-1,libadwaita-1-0,libsecret-1-0,libglib2.0-0,libc6andzlib1g. - Recording one application (recommended)
-
PipeWire's own tools, the
pipewire-binpackage, which providespw-dumpandpw-record. OpenMila asks PipeWire to link the chosen application's output to a capture stream, so you record the meeting and not your music. Without those tools the picker still offers the whole-system monitors. - Dictation that pastes by itself (recommended)
-
xdotoolorwtypeto paste at the cursor, pluswl-clipboardorxclipfor the clipboard. On a Wayland session OpenMila can use theRemoteDesktopportal instead, once you grant it (openmila-cli grant-typing, or the button in Settings). With none of that, the dictated text still lands on the clipboard and a notification tells you to press Ctrl+V; dictation never waits on the consent dialog, it falls back in a tenth of a second. - Global dictation hotkeys
-
Nothing extra.
XGrabKeyis used wherever an X display answers, including XWayland, and the XDGGlobalShortcutsportal on a pure Wayland session; the two paths pick themselves. Ctrl+Alt+2 dictates English and Ctrl+Alt+3 Hebrew, and both are configurable in Settings. A key press through the portal has not yet been confirmed by a human at a Wayland desktop. - Optional
-
ffmpeg, for compact.m4arecordings, the remote transcription backend, and importing audio that is not WAV. GStreamer is used where ffmpeg is absent, which a GNOME or KDE install almost always has.libnotify-binfor desktop notifications.
Windows
Windows 11 on x64, or Windows 10 from version 2004; see what a machine needs.
The installer sets up OpenMila for your user only, so Windows never
asks for an administrator. It adds a Start menu entry, an optional
desktop shortcut, the .milaconfig file association and an
entry in Installed Apps whose Uninstall works. The portable zip
installs nothing: unzip it anywhere and run
openmila.exe. Both carry exactly the same payload.
One thing the app needs that Windows may not have yet: the interface is
built on WinUI, which needs Microsoft's Windows App Runtime. The
installer runs it for you, still without an administrator prompt. With
the portable zip, run WindowsAppRuntimeInstall-x64.exe
from the folder once before starting the app.
Check what you downloaded against the .sha256 file beside
it:
(Get-FileHash OpenMila-<version>-win64-setup.exe -Algorithm SHA256).Hash
Run the installer, or unblock and extract the zip and run
openmila.exe. Nothing else needs installing: the Swift
runtime and the transcription engine travel with the app. Dictation hotkeys work everywhere on Windows, and
dictated text is pasted into whichever window has focus.
Read this before you install on Windows
Windows is built and tested on a windows-2025 runner in
CI, and the app, the CLI, the MCP helper and the zip all pass there.
Nobody has run any of it on a Windows desktop yet. Treat it as
untested by hand, and please
file what you
find.
Two known limits on Windows today: an update is a fresh download
rather than an in-place upgrade, and compact .m4a
recordings depend on ffmpeg or GStreamer being on the machine,
because neither ships in the package. The features page has the
rest.
Uninstalling, and what it keeps
Removing OpenMila removes the program. It does not remove your recordings, transcripts, models or settings. Deleting those is a separate, explicit request.
Windows
Installed Apps, then Uninstall. It removes the program from
%LOCALAPPDATA%\Programs\OpenMila, the shortcuts, the
.milaconfig association, any autostart entry and the
regenerable cache. It then asks, once, whether to delete your data as
well; the answer defaults to No. Nothing under
%APPDATA%\Mila goes unless you say Yes.
The portable zip installs nothing, so removing it is deleting the folder. Your data lives elsewhere and stays.
Linux
sudo apt remove openmila # the .deb
openmila-uninstall # desktop entry, icons, autostart, MCP
openmila-uninstall --purge # also deletes your data, after asking
apt remove and even apt purge leave
~/.local/share/Mila and ~/.config alone: a
package script runs as root and has no safe way to decide which user's
data to delete. The AppImage is one file, so deleting it is the
uninstall; run openmila-uninstall first if you had used
--install to add a launcher entry.
Where your data lives
| What | Linux | Windows |
|---|---|---|
| Recordings, transcripts, models | ~/.local/share/Mila/ | %APPDATA%\Mila\ |
| Settings | ~/.local/share/Mila/ and ~/.config/ | %APPDATA%\Mila\ and a preferences file under %LOCALAPPDATA% |
| Logs | ~/.local/state/openmila/logs/ | %LOCALAPPDATA%\OpenMila\logs\ |
| The program itself (removed) | /usr/lib/openmila or wherever the AppImage sits | %LOCALAPPDATA%\Programs\OpenMila\ |
Full detail, including the cache and the keyring: docs/port/INSTALL.md.
Verify what you downloaded
Every release publishes a single SHA256SUMS file covering
all of its files, alongside the per-file .sha256 files.
Download
SHA256SUMS from the release and check the files you
have:
sha256sum --ignore-missing -c SHA256SUMS
The release pipeline also attests what it built, so you can confirm a file came from this repository's workflow and not from somewhere else. With the GitHub CLI installed:
gh attestation verify OpenMila-<version>-x86_64.AppImage --repo NX1X/OpenMila
The same command works for the other files, on Windows too:
gh attestation verify .\OpenMila-<version>-win64.zip --repo NX1X/OpenMila
If a hash or an attestation does not check out, do not run the file, and please report it privately.
First run
The Whisper models are large and are not bundled. Open Settings > Models and download the one you need: OpenAI large-v3-turbo for English and other languages (1.6 GB), or ivrit.ai large-v3 for Hebrew (3 GB). Each download is checked against a pinned SHA-256 before it is used, and deleting a model frees the whole install.
Naming who said what needs a Python runtime, which the packages ship when it has been built. The first time you turn diarization on, the app downloads PyTorch for the CPU, about 200 MB. Diarization is off by default, as it is in Mila.
Transcription uses a Vulkan GPU where the machine has a usable one and the CPU where it does not, and neither is a requirement: what a machine needs has the detail. There is no CoreML or Neural Engine path off macOS.
Where OpenMila puts things
| What | Linux | Windows |
|---|---|---|
| Recordings, transcripts, models | ~/.local/share/Mila/ |
%APPDATA%\Mila\ |
| Logs | ~/.local/state/openmila/logs/openmila.log |
%LOCALAPPDATA%\OpenMila\logs\openmila.log |
| Settings | ~/.config/, managed by the app |
managed by the app |
| Secrets (API keys, tokens) |
your desktop keyring through the Secret Service (GNOME Keyring,
KWallet, KeePassXC); where no keyring is running,
~/.local/share/Mila/secrets/ with owner-only
permissions
|
%APPDATA%\Mila\secrets\, encrypted with DPAPI for
your Windows account
|
The data folder is named Mila on purpose: the MCP helper
and other shared code look for it by that name.
The full instructions live in docs/openmila/INSTALL.md, and using OpenMila with Claude is covered in docs/openmila/MCP.md.
macOS
Use the original: Mila. OpenMila does not build for macOS.