Privacy

OpenMila runs on your own machine. It records audio, keeps transcripts and voice profiles on disk, and can paste text into other applications. Nothing leaves the machine unless you point the app at a service of your own, and this page lists every case where that happens. With a local Ollama for the AI features, there is no such case left.

Nothing has to leave, the AI included

The interesting question is not whether transcription is local, because it always was. It is whether the AI is: the suggested titles, the summaries, the action items, and the Live AI rolling summary that runs while a meeting is still going.

They can be. Those features call whichever provider you pick, and one of the built-in choices is Ollama (local), a model server on your own machine at http://localhost:11434. It takes no API key, because there is nobody to authenticate to. With it selected, a whole OpenMila session - record, transcribe, name the speakers, title, summarise, extract action items - makes no outbound request at all.

Exactly two paths send your content somewhere else, and both are off by default. Out of the box no transcription endpoint is configured and no AI provider is selected, so with default settings nothing you record or say leaves the machine.

  • A remote transcription endpoint you configure. This one sends audio, to the OpenAI-compatible server you named and to no other. The app says so while it is active. The repository documents running that server yourself.
  • A cloud LLM provider you choose. This one sends transcript text, to the tool or endpoint you picked. Choosing Ollama (local) instead keeps it on the machine; choosing OpenAI, Groq, OpenRouter, DeepSeek, Ollama Cloud or a CLI like Claude, Cursor or Gemini does not.

Stated rather than buried: the provider list is done on Linux and written on Windows in the parity table, and the run behind the Linux status used the Claude CLI. Nobody has yet driven OpenMila against a local Ollama end to end.

What stays on your machine

Local transcription never sends audio anywhere. whisper.cpp runs on your CPU, against a model file on your disk, and the results are written next to the recording.

  • Recordings, transcripts and summaries, in ~/.local/share/Mila/ on Linux and %APPDATA%\Mila\ on Windows.
  • The Whisper model files you downloaded, in the same place.
  • Speaker names and, if you opt in, the voice profiles that recognise the same person across recordings. They are opt-in and deletable.
  • Dictations, saved under History like any other recording.
  • Logs, on disk only, in ~/.local/state/openmila/logs/ on Linux and %LOCALAPPDATA%\OpenMila\logs\ on Windows.
  • Secrets you enter, such as API keys and tokens: in your desktop keyring through the Secret Service on Linux (GNOME Keyring, KWallet, KeePassXC), or in files readable only by your user account where no keyring answers; on Windows, encrypted with DPAPI for your Windows account.

What leaves, and only because you asked it to

Remote transcription, if you turn it on
The optional remote backend uploads audio only to the OpenAI-compatible server you configure, and the app says so while it is active. It is off unless you set it up. The repository documents running that server yourself.
AI summaries and "send to LLM", if you use them
These run a command-line tool (Claude, Cursor or Gemini) or an OpenAI-compatible endpoint that you configure, and the transcript text is what gets sent to it. OpenMila ships no API keys and has no provider of its own, so what happens to that text is between you and the tool you chose. Every invocation is logged with credentials redacted. Pick Ollama (local) and this row stops applying: the request goes to http://localhost:11434 and stays there.
Model downloads
The Whisper models are not bundled, so the first time you pick one the app downloads it and checks it against a pinned SHA-256. The first time you turn on speaker diarization, it downloads PyTorch for the CPU, about 200 MB.
The update check
Updates are checked against this repository's GitHub releases and are never installed without you.
Obsidian vault sync, if you set it up
Exporting to an Obsidian vault with git sync pushes to whatever remote that vault already has. That remote is yours, not ours.

No telemetry, no accounts

There is no analytics, no usage reporting and no crash reporting in OpenMila, and no server of ours for any of it to reach. There is nothing to sign in to: the only credentials the app stores are ones you supply for services you already use.

When something goes wrong, you send the evidence yourself. Settings > General > Export diagnostic report writes a zip with system information, your settings with credentials redacted and prompts reduced to their length, the shape of your recordings with no titles or paths, and the log files. You look at it, then you attach it to an issue if you want to.

The MCP server is off until you turn it on

OpenMila ships the same MCP server Mila has, which lets an AI session search and read your transcripts, including the live transcript of a meeting in progress. Access is off by default. While it is off every call is refused, and turning it off stops an already-running session at once.

It is worth being precise about what that switch is: it is a consent control, not a sandbox. The helper runs as your user and can read the same files you can. The switch records whether you agreed, and it fails closed.

This website

This is about the pages you are reading right now, not the OpenMila application; the application is covered by the rest of this page and sends nothing anywhere on its own. The website uses two services from Vercel, who hosts it: Vercel Web Analytics and Vercel Speed Insights.

  • Web Analytics records page views and basic navigation data, such as which page you came from and which country the request came from. It sets no cookies and does not track you across other sites; what it reports back is aggregated counts, never a record tied to your particular visit.
  • Speed Insights measures how quickly these pages load in the browser, the same kind of timing information the browser already collects for its own use, aggregated the same way.

Neither one has anything to do with the application: they only ever see traffic to this website, never anything OpenMila does with your recordings, transcripts or models on your own machine. There is no other analytics, no advertising, and no third-party request beyond these two. Fonts are the ones already on your device, and there is no form to fill in.

Found a privacy or security problem?

Please do not open a public issue for a security problem. Report it through GitHub's private vulnerability reporting; reports are acknowledged within a few days. The full policy is in SECURITY.md. For anything that is not a vulnerability, use issues or discussions.