mybunso.app

Privacy

Last updated 19 August 2026.

What Bunso does with your words, where each thing goes, and how to check rather than trust.

The short version. Out of the box, nothing leaves your Mac. Speech recognition and cleanup both run on-device. There is no telemetry, no analytics, no crash reporting, and no account. The only network access in a default install is downloading model weights the first time you use a model, checking for updates when you click “Check for Updates”, and — if you buy a license — one request when you activate a Mac.

There are two optional exceptions, both off by default. Since v0.4.0 you can supply your own API key and have the cleanup step run at OpenAI, Anthropic, Google, OpenRouter, or any OpenAI-compatible endpoint you choose. And you can mirror your spoken tasks into Apple’s Reminders app, which then syncs wherever your Reminders already sync — your iCloud account, not ours. This page explains exactly what each one changes.

What never leaves your Mac, under any setting

What can leave your Mac, and only if you turn it on

Every item below requires both turning off “Local only” and choosing “With my API key” in Settings → Cloud. Each extra item is then its own separate toggle, and all of them ship off.

Everything that can be transmitted, and what governs each one.
Data Sent when Default
The text you dictated Cloud cleanup is on for that app Off
Text you had highlighted You dictate while text is selected, and cloud cleanup is on for that app Off
Text on screen near your cursor Plus the separate “Text on screen near your cursor” toggle Off
Your dictionary of names and terms Plus the separate “Your dictionary of names and terms” toggle Off

Nothing else is transmitted — not the app you are dictating into, not timestamps, not your dictionary unless asked, not your learned corrections.

Three notes worth reading rather than skimming:

Screen context is read locally either way

Bunso reads a short excerpt near your cursor to help spell names correctly. That happens on-device regardless of this setting; the toggle controls whether that excerpt is sent to your provider. It is off by default because that field may contain an email, a document, or someone else’s message.

Highlighted text is treated exactly like what you dictated

If you select text and then dictate, Bunso rewrites the selection according to what you said — so the selected passage is the thing being worked on, and it travels under the same rule as your transcript rather than as a separate opt-in. It is covered by every protection above: with “Local only” on it never leaves, and in an app you marked sensitive, or one set to verbatim, it is never sent no matter what else is configured. Bunso reads your selection only while a dictation is running, never in the background, and never in a password manager.

Your dictionary is a social graph

It names your colleagues, clients and products. Its corrections are already applied to your transcript before anything is sent, so sending the list itself only helps with spelling variants — which is why it defaults to off.

Where cloud cleanup is never used

Even with everything switched on, these stay on-device, by construction:

The rules live in one file, CleanupPolicy.swift, as a single pure function you can read in a minute. They are exhaustively tested in CleanupPolicyTests.swift, including that “Local only” beats every other setting in every combination.

Your provider is your relationship, not ours

When you use your own key, your text goes from your Mac to a company you chose and pay directly. Bunso takes no cut, runs no proxy, and never sees the request. What that provider does with your text — how long they keep it, whether they train on it — is governed by their terms and your account settings with them, not by anything Bunso can promise. Business and enterprise API tiers commonly exclude training by default; consumer tiers sometimes do not. Check before sending anything you care about.

Gemini specifically applies safety filters that will refuse some legitimate dictations, including medical, legal or profane content. Bunso falls back to your raw words when that happens.

How to verify all of this

Do not take the paragraphs above on faith:

  1. Leave “Local only” on (the default) and watch with Little Snitch, nettop, or Activity Monitor while you dictate. There will be no connections, because no code path builds a request: the switch is checked in the transport itself, before a request object exists.
  2. Read the source. There is exactly one place in first-party code that performs a cleanup network request: CloudTransport.swift. Two other files can reach the network at all, and neither has anything to do with what you dictate: ActivationClient.swift, which runs when you press Activate or Remove License, and the update check in main.swift.
  3. Trust the test, not the claim. NetworkCallSiteTests.swift fails the build if URLSession appears anywhere else in the source tree. If someone adds a second call site, that test breaks first.
  4. Read the log. ~/Library/Logs/Bunso/bunso.log records one line per cloud request: provider, model, character counts, HTTP status and duration. It deliberately never records the text — provider error responses echo the request, so logging bodies would put your dictation on disk.

An honest caveat

Bunso is not sandboxed, because the Accessibility and Input Monitoring permissions it needs are incompatible with the App Sandbox. So “it cannot transmit” is a claim about the source code, verifiable by reading it and by watching the network — it is not enforced by the operating system. If you need an OS-level guarantee, the available escalation is a sandboxed build without the com.apple.security.network.client entitlement, which would make transmission impossible rather than merely absent. Ask if you need it.

For managed Macs

A configuration profile can pin local-only so it cannot be turned off:

defaults write app.mybunso.Bunso LocalOnlyEnforced -bool true

Deployed as a managed preference, Settings shows the switch disabled and labelled “Managed by your organisation”. This is intended for the case where an administrator needs to attest that the app will not transmit, rather than trusting each user to leave a toggle alone.

Data stored on your Mac

All of it is yours, all of it is local.
WhatWhere
Settings~/.config/bunso/config.json
Your dictionary~/.config/bunso/dictionary.json
Learned corrections~/.config/bunso/learned.json
Dictation history and saved keywords~/.config/bunso/history.json (owner-readable only)
How much you have dictated (counts only)~/.config/bunso/stats.json (owner-readable only)
Your spoken tasks~/.config/bunso/todos.json (owner-readable only)
Your spoken notesMarkdown files in your notes folder (~/Documents/Bunso Notes unless you chose another)
Tasks you chose to mirrorApple’s own Reminders database on this Mac
Per-app behaviour~/.config/bunso/app_profiles.json
Logs (no dictation text)~/Library/Logs/Bunso/bunso.log
Model weightsHugging Face, WhisperKit and FluidAudio caches
API keysmacOS Keychain, service app.mybunso.Bunso.apikey

Deleting the app leaves all of it in place until you remove those files yourself.

About the history file

history.json is the most sensitive file Bunso writes: a plain-text record of what you have dictated, which before this feature existed only for as long as one paste took. So:

About your notes and tasks

If you give a hotkey the job of capturing, what you say on that key is written down instead of typed at your cursor. Which list it lands in is decided from your first words, on this Mac, by a fixed set of rules — “remind me…” and “to-do…” make a task, anything else makes a note.

One thing to be plain about: a spoken to-do is cleaned up exactly like a dictation, by the same rules. So if you have cloud cleanup switched on for the app you happened to be in when you pressed the key, the words you spoke for that to-do go to your provider, the same as a dictation would. Every protection above still applies unchanged — “Local only” keeps it home, and an app you marked sensitive or set to word-for-word never sends anything.

About Apple Reminders

This one is off, and it is the only setting in Bunso that deliberately copies what you said into another company’s app. It is worth being exact about.

About the counts

So Bunso can tell you how much typing it saved you, stats.json holds a running total: how many dictations, how many words, how long you spent, and a per-day tally capped at 90 days. It holds numbers only — there is no dictation text anywhere in it, day is the finest granularity it records, it is readable only by you, it is never transmitted, and Settings has a Reset button that empties it.

Data stored when you buy a license

Buying is the one part of Bunso that involves a server of ours, and it involves it exactly twice: once when your payment provider tells us you paid, and once when you activate a Mac. After that the app never contacts it again — a license is verified on your Mac, offline, forever.

Everything the license server keeps, and why.
What we storeWhy
Your email addressTo send you the key, and to send you a new one if you lose it
A one-way hash of your license keySo a database leak yields no working keys
A one-way hash of a hardware identifier, per Mac you activateTo count how many Macs are using one license
The payment id, amount and currency from your providerTo match our records to theirs, and to handle refunds
When each of those happenedThe same reason

We store a one-way hash of a hardware identifier to count seats. We cannot reverse it and we cannot identify your machine from it.

Activating a license

This is the only request the app itself ever makes to us, and it happens because you pressed Activate in Settings → License.

It sends three things: your license key, that one-way hash, and the app’s version number. Not your email address — the key is what identifies the license — and nothing about your dictation, your settings or your Mac beyond the hash. The hash is computed on your Mac before the request is built; the hardware identifier itself never leaves.

What comes back is a small signed file which Bunso stores and checks locally from then on. After that the app never contacts us again — not at launch, not before a dictation, and not when it checks for updates. That is why it works on a plane, and it is also why a refund cannot switch off a Mac that has already activated.

Pressing Remove License sends the same two values once more, to free the seat so you can use the license on a different Mac. If you are offline it removes the license locally anyway.

Your IP address is visible to us during those requests, as it is to any server you connect to. It is not stored: the limit on repeated attempts counts against a salted hash, and there is no column anywhere that holds an address.

If you would rather the app never made this request at all — an air-gapped or compliance install — ask us, and we will issue a license file you paste in directly. That path involves no network access from the app at any point.

Who else sees your email address

Two companies, both only because buying something requires them, and neither ever receives anything you dictated:

That is the complete list. Nothing about your use of the app reaches either of them, because the app never talks to either of them.

What is not stored, and has no column to be stored in: anything you dictated, how often you dictate, which apps you use, your IP address, or any usage telemetry at all. Rate limiting keeps a hashed counter, not an address.

A refund revokes a license for future activations. It cannot reach a Mac that has already activated, because that Mac never asks — which is the same property that makes the app work on a plane.

This website

Separate from the app, and stated here because it changed on 15 August 2026: this website counts pages read and downloads started. Before that date it counted nothing.

How it is counted matters more than that it is:

Everything this website records, and nothing else.
EventWhat is recorded
A page is readThe path, the referring page or site, and the country
A download is startedThe version, the page it was started from, and the country
A purchase completesThe amount, the currency and what was bought — never your email address, name, or order reference
A license is activatedThat an activation happened, which tier, and whether it used a new seat — never your email address, your license key, or the identifier for your Mac

The download link goes through this site’s own server, which counts the click and immediately redirects you to the file. It is a redirect, not a script, and it never sees anything except that a download of a given version began.

The app still has no telemetry. It sends no analytics, it does not know this website exists, and it does not report anything about how or how often you dictate. That is unchanged and it is the sentence that matters.

The activation row above is the one item on this list that involves the app at all, so it is worth being exact about. Activating a license is the app contacting us once, because you pressed a button — the single request described in Activating a license. What is new since 15 August 2026 is that our own server also counts that an activation occurred. It adds no request, no schedule, and no reason for your Mac to contact us ever again. A Mac that has activated still never checks in, which is what lets the app work on a plane, and the count carries nothing that identifies you, your license or your machine.

Your rights over that data

The only personal data we hold is what the table above lists, and the only identifier in it is your email address. You can:

Deleting your email address is irreversible, and it ends key recovery. Your email address is the only thing that connects you to your license. Your key itself is stored as a one-way hash, so we cannot read it back or look you up by it — the address is the only handle there is.

So if you ask us to delete your record and later lose your key, we cannot issue you a new one, and we cannot prove you ever bought it. There is no other record to fall back on. That is the direct cost of not keeping more data than we need, and we would rather say it plainly than surprise you with it later.

Before requesting deletion: keep a copy of your key somewhere you trust. Any Mac already activated keeps working regardless — it never contacts us again — but a future Mac, a reinstall, or a wiped disk would leave you with nothing to paste.

Send any of those to [email protected].

Nothing on your Mac needs a request — the files listed above are yours, and deleting them is deleting them.

Changes to this document

The date at the top of this page is the date it last changed. When something material changes, that date moves and the change is described here, so you are not left comparing two versions from memory.

Two commitments about how changes happen, which matter more than the notice itself:

If a future change is significant enough that continuing to use Bunso would mean accepting something materially different, we will say so in the release notes for the version that introduces it — not only here.