What "on device" should mean
Most voice apps that advertise AI features send your audio to a server, transcribe it there, summarise it there, and send text back. That is not a scandal, it is just how the cheapest architecture works. It becomes a problem when the recording is a therapy session, a legal consultation, a medical appointment, a source interview or a board discussion.
A genuinely on device app runs the speech model and the language model on your phone's own silicon. The practical test is simple: if the app still works with the network switched off, the processing is happening locally. Nothing else you read on a website can substitute for that observation.
Watch for the weasel version: "your data is encrypted in transit and at rest" means it is being uploaded. "We do not train on your data" means it is being uploaded. "Processed securely in the cloud" means it is being uploaded. Those can all be true and still not be what you wanted.
Method 1: airplane mode, two minutes
This is the check anybody can do, and it is more informative than any privacy policy.
-
Let the app finish any first run setup
On device apps often download a model the first time. Let that finish while you are online, otherwise you will be testing the download rather than the processing.
-
Turn on airplane mode, and turn Wi-Fi off too
Airplane mode on some iPhones leaves Wi-Fi enabled. Open Control Centre and confirm both are off, so there is genuinely no route out.
-
Record something and ask for the AI features
Record a minute of speech, then request the transcript, the summary and whatever else the app advertises.
-
Read the result
If you get a real transcript and a real summary, the work happened on the phone. If you get a spinner, a queue, a "will process when back online" message or an error, it did not.
What this test cannot tell you is whether the app also uploads a copy when the network returns. For that, keep going.
Method 2: the iOS App Privacy Report, five minutes
iOS has a built in network log, and almost nobody uses it. It records every domain each app contacts, which is exactly the evidence you want, and it needs no tools or technical knowledge.
-
Turn the report on
Open Settings → Privacy & Security → App Privacy Report and tap to turn it on. It starts empty, because it only logs from that moment forward.
-
Use the app normally for a few days
Record notes, generate summaries, open every feature you care about. The longer you leave it, the more complete the picture.
-
Read the domains contacted
Go back into the report and find the app. You will see every domain it contacted and how recently. This is the list to scrutinise.
Interpreting what you find:
| What you see | What it means |
|---|---|
| No domains at all | The app has not touched the network. The strongest possible result. |
| A model host, once | Consistent with a one time model download. Check the timing matches when you installed or downloaded a model. |
| A domain contacted every time you record | Something is being sent per recording. Ask what. |
| Analytics or attribution domains | You are being measured. Common ones include app measurement, crash reporting and attribution services. |
| Apple domains for iCloud | Sync to your own iCloud account, if you enabled it. Your data leaves the device, but to your account, not the developer's server. |
Method 3: a proxy or packet capture, thirty minutes
This is the rigorous version, and the one to use if you are evaluating an app for a firm or a newsroom rather than for yourself. You put a machine you control between the phone and the internet, and read everything that goes past.
-
Install an intercepting proxy on a computer
mitmproxy is free and open source. Charles and Proxyman are commercial equivalents with friendlier interfaces. Run it on a machine on the same network as the phone.
-
Point the iPhone at it
On the phone, open Settings → Wi-Fi, tap the network, then configure a manual HTTP proxy with the computer's address and the proxy's port. Install and trust the proxy's certificate so HTTPS can be inspected, otherwise you will see hostnames but not contents.
-
Exercise the app while watching the flow list
Record, transcribe, summarise, chat, export. Watch what appears. You are looking for two things: which hosts are contacted, and crucially the direction and size of the traffic.
-
Judge it on request bodies, not hostnames
A large download and no meaningful uploads is a model being fetched. Repeated uploads of a few hundred kilobytes when you record are your audio leaving. An app doing on device work should show no request bodies containing audio or transcript text at all.
If an app refuses to work at all behind a proxy, that is worth noting but is not proof of bad behaviour. Certificate pinning is a legitimate security measure. It does mean you cannot verify the contents, only the destinations, so fall back on method 1.
Everything Murble sends
Here is the complete list. If you run the checks above and find anything not on this table, that is a bug and we want to hear about it at [email protected].
| Purpose | When | Direction | Optional |
|---|---|---|---|
| Model download | Only when you choose to download an offline transcription, summary or speaker labelling model. Hosted on models.getmurble.com, with Hugging Face as a fallback mirror. | Download only | Yes. Skip it and use Apple Intelligence and Apple's speech recogniser instead. |
| iCloud sync | Only if you switch sync on. Notes go to your own private iCloud database, which is your Apple account, not a server we operate or can read. | Both ways | Yes. Off by default. |
| Purchases | When you buy or restore Murble Pro. Handled entirely by Apple's StoreKit. We never see a payment detail. | Both ways, to Apple | Yes. The free tier needs no purchase. |
| Anything else | There is nothing else. No analytics, no crash reporting service, no attribution, no feature flags, no remote configuration, no update check, no telemetry of any kind. | ||
Your recordings, transcripts, summaries, action items, chat questions, translations and reports are never uploaded anywhere, by any code path, including with sync enabled. There is no account because there is no server to hold one.
What you can check in the app itself
Murble is not open source, so you cannot read the code. You can still verify quite a lot of structure from the outside, and these are the specific facts a reviewer usually asks us for:
- One network component, and it only downloads. The app contains a single URL session, used exclusively for model downloads. It creates download tasks and nothing else. There is no upload task, no POST request and no request body anywhere in the app.
- The speech engine cannot fetch on its own. WhisperKit is constructed with downloading explicitly disabled and handed a local folder, so it can only use a model that is already on the device.
- The speaker labelling engine is forced offline at launch. FluidAudio's model hub is put into offline mode before anything else runs, so it cannot reach out either. Every model comes through the app's own pinned manifest.
- Model versions are pinned. The repository and the exact revision are compile time constants, so a download cannot silently become a different file.
- Crash and hang data stays local. The app observes Apple's MetricKit diagnostics and writes them to the local log. Since there is no upload path, those payloads cannot leave the device even in principle.
- The extensions have no network code at all. The widget, the Control Centre control and the share extension read a shared file and nothing more.
- The privacy manifest agrees. Murble declares no tracking, no tracking domains and no collected data types. Apple requires that declaration to be accurate and it is checked at submission.
- Apple Intelligence runs locally. Where available, summaries use Apple's on device foundation model through the system framework, not a server side model.
Honest limitations
A page like this is worthless if it only lists the good news, so here is the rest.
- You are verifying behaviour, not source. Murble is closed source. Everything above is observable from outside the app, which is a real form of verification, but it is not the same as auditing the code. If open source is a hard requirement for you, Murble does not meet it and you should not use it for your threat model.
- The first model download uses the network. It is a download, one time, and you choose whether to do it. But an app that has never touched the network is a claim we cannot make, and you should be suspicious of anyone who does while shipping large models.
- Turning on iCloud sync means your notes leave the phone. They go to your private iCloud database, where we cannot read them, but they are no longer only on the device. If that matters, leave sync off. It is off unless you enable it.
- On device costs you speed and some accuracy. A large server model will often summarise better and faster than a model small enough to run on a phone. Older iPhones are noticeably slower. This is the actual trade, and if you do not need privacy you may not want to make it.
- Apple Intelligence availability varies by device, region and language. Where it is unavailable, Murble uses a downloadable model instead, which is why the download exists.
- This page describes version 1.2. Behaviour can change with any release. Re run the checks after a major update, and hold us to it.
Sources
- Apple, App Privacy Report, for the built in per app domain log described in method 2.
- mitmproxy, the free intercepting proxy used in method 3.
- Murble's privacy policy and terms of use, which state the same commitments in contractual language.
- Related reading: private voice notes, offline transcription on iPhone and the voice notes app comparison.
Check it yourself
Install Murble, let a model download, then put the phone in airplane mode and record something. That is the whole argument, and it takes two minutes.
Download on the App StoreFree to use. No account, because there is no server to hold one.