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.

Minimum and comfortable, per the port's hardware notes
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.

Jump to the download buttons.

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 .deb declares these as libgtk-4-1, libadwaita-1-0, libsecret-1-0, libglib2.0-0, libc6 and zlib1g.
Recording one application (recommended)
PipeWire's own tools, the pipewire-bin package, which provides pw-dump and pw-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)
xdotool or wtype to paste at the cursor, plus wl-clipboard or xclip for the clipboard. On a Wayland session OpenMila can use the RemoteDesktop portal 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. XGrabKey is used wherever an X display answers, including XWayland, and the XDG GlobalShortcuts portal 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 .m4a recordings, 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-bin for desktop notifications.

Windows

Windows 11 on x64, or Windows 10 from version 2004; see what a machine needs.

Jump to the download buttons.

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

Kept unless you ask for a purge
WhatLinuxWindows
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

File locations per system
WhatLinuxWindows
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.