This privacy policy describes how Cadence (“the Software”) handles information when you run it. Cadence is free software developed by Oisin McGrath (“I”, “me”, “the developer”) under the GNU General Public License, version 2.
Plain summary: Cadence collects nothing. It is a program you run on your own computer. There is no Cadence account, no Cadence server, no telemetry, and no analytics. I never receive your voice, your transcripts, your keystrokes, or any information about how you use the Software.
Cadence is dictation software, so it genuinely does need access to your microphone and your keyboard. Those are strong permissions and you deserve a straight explanation of each one rather than a reassuring sentence. Sections 3 to 5 give exactly that: what is accessed, why it is unavoidable, and what the code actually does with it. The source is public — every claim on this page can be checked against it.
This document is not legal advice. For the “use at your own risk” rules, see
the Terms of use and the LICENSE file
shipped with the Software.
1. What Cadence is
Cadence is a small desktop application that lives in your system tray. You hold a key, speak, and it types what you said into whatever window has focus. It is not a hosted service, has no login, and does not sync anything.
I operate no Cadence server. There is nowhere for your data to go, because the Software never sends anything off your machine on its own initiative.
2. Where speech recognition happens
Transcription is done by a speech-recognition server running on your
own computer — by default whisper.cpp listening on
127.0.0.1, the loopback address that never leaves the machine.
Your audio is sent to that local address and nowhere else.
Every network address compiled into Cadence is a 127.0.0.1
loopback address. There are no others in the source code. If you deliberately
reconfigure it to point at a remote transcription server, that is your choice
and your audio then goes wherever you sent it — the Software will not stop
you, and I have no involvement in or visibility of that.
3. The microphone, and when it is live
Cadence needs the microphone because it is dictation software. It is not listening continuously and there is no wake word.
- Recording starts when you press the trigger key and stops when you release it. Between holds no recording process is running at all.
-
The recorder is a separate
pw-recordprocess that Cadence starts on press and terminates on release. It is tied to Cadence's own lifetime by the kernel (PR_SET_PDEATHSIG), so it cannot survive the app and keep holding the microphone — even if Cadence crashes. - Your desktop's own microphone indicator will show when capture is active, independently of anything Cadence claims.
One honest detail about disk. Each phrase is written to a
temporary WAV file (cadence_phrase.wav in your system temp
directory) so it can be posted to the local transcription server. The same
file is overwritten by the next phrase, but the most recent one
remains on disk until your temp directory is cleared,
typically at reboot. It is readable by your user account. Nothing uploads it;
it is simply a local file, and I mention it because “nothing touches disk”
would not be true.
4. The keyboard, and why access is broader than one key
To support a real press-and-hold, Cadence has to know the exact moment the
trigger key goes down and comes back up. On Linux this means reading the
keyboard input device, which requires membership of the input
group.
That group grants the ability to read all key events, not just one. Linux permissions on input devices are per-device; there is no mechanism to request a single key. I am not going to pretend otherwise, and it would be dishonest to describe this as narrow access.
What the Software does with that access:
- it watches for the configured trigger key only (Right Ctrl by default) and reacts to its press and release;
- every other key event is discarded immediately in the same loop — not stored, not buffered, not counted, not transmitted;
- keystrokes are never written to disk, never included in any log, and never sent anywhere.
This is roughly 90 lines of readable code in
src/hold_to_talk_over_evdev.rs. If you are evaluating whether to
trust it, that file is the one to read — and reading it is a more reliable
basis for trust than this paragraph.
An earlier version avoided the input group entirely by using the
desktop's own global-shortcuts portal, which never exposes the raw key
stream. It was abandoned for a functional reason: that portal force-releases
a held shortcut after about 3.6 seconds, which cut dictation off mid-sentence.
The tradeoff is recorded in the project's decision log rather than hidden.
5. Typing into other applications
Transcribed text has to get into the application you are using, so Cadence creates a virtual keyboard device and types the text as if you had typed it yourself. This is what allows dictation to work in any window rather than in one special box.
-
The privileged helper that owns the virtual device
(
ydotoold) is started by Cadence on a private socket, not left running as a permanent system service. - The kernel terminates that helper the instant Cadence exits, including on a crash, so no always-on component with typing privileges is left behind.
-
Access to the underlying device is granted by a
uaccessrule, which hands it to whoever is physically logged in at the screen rather than opening it to every account on the machine. - If the helper cannot start, Cadence falls back to putting the text on your clipboard instead, and you paste it yourself.
Cadence types only what the transcription server returned for audio you recorded. It does not read the contents of the window it types into, and has no ability to see what is on your screen.
6. What is stored on your machine
Cadence keeps very little, all of it local and all of it yours to delete:
- a small settings file holding preferences such as microphone gain;
- the temporary phrase WAV described in section 3;
- the speech model file you downloaded during installation.
There is no transcript history, no dictation log, and no database of anything you have said. Text goes to the focused window and is not retained by Cadence afterwards.
7. No accounts, no cloud storage
There is no Cadence account to create, no cloud database, and no cloud backup. Nothing about your identity is collected, because nothing is collected.
8. Third-party components
Cadence drives tools that are not mine — whisper.cpp,
PipeWire, ydotool — and uses openly published speech models. They
are governed by their own licences and privacy practices. During installation
the setup script downloads the speech model from Hugging Face and the
whisper.cpp source from GitHub; those are ordinary downloads from
third parties, visible in the script, and happen once at your direction.
9. Security
You remain responsible for your machine's security — who has local access to it, what else runs on it, and keeping it updated. A program that can read the keyboard and type into windows is worth installing only from a source you trust; that is true of Cadence as much as of anything else, which is why the source is public and the sensitive parts are small enough to read.
10. Children
Cadence is a desktop utility intended for adults aged 18 and over. It is not directed at children.
11. Free software and honesty about risk
Cadence is free software, provided in the hope that it is useful. This page describes how the Software is designed to behave. Bugs, misuse, or problems in third-party components it relies on can still cause unexpected results — that risk sits with you under the GPL and the Terms of use.
12. This website
Public pages on this site are static. They use no tracking, no analytics, and no advertising cookies that I configure. Your browser and host may still produce ordinary server or TLS logs outside my product design; I do not run ad trackers on these pages.
13. Changes
If Cadence's behaviour changes in a way that affects this policy, I will update this page and the “Last updated” date.
14. Contact
Privacy questions about Cadence: [email protected]
Developer: Oisin McGrath · github.com/oisinmcgrath