macOS 14+ · Apple Silicon · MIT
Read anything aloud, on your Mac.
MLXRead replaces macOS Speak Selection with a local MLX voice. Select text in any app — Safari, Notes, Xcode, a PDF — press ⌥esc, and hear it in about a second. Nothing is uploaded. Nothing is logged.
Universal · macOS 14+ · Apple Silicon · signed · ~40 MB
The kettle clicked off. She read the last paragraph twice, then let the words settle before answering. Outside, the street was already awake.
How it works
One shortcut, four honest steps.
No cloud round-trip, no queue on someone else's server. The whole loop runs between your selection and your speakers.
- 01
Capture the selection
MLXRead reads the frontmost app's selected text through the macOS Accessibility API. When an app doesn't expose it, a clipboard-copy fallback steps in — and restores your clipboard exactly, only if nothing else touched it.
- 02
Normalize and chunk
The text is cleaned and split into sentence chunks deterministically, so the reader can start speaking the first sentence while the rest is still being prepared.
- 03
Synthesize locally
A native MLX model — Kokoro or Soprano — turns each chunk into audio on the Apple-Silicon GPU. The model loads once and stays warm between reads.
- 04
Stream, then stop on a dime
Playback begins on the first chunk. Press ⌥⎋ again and generation is cancelled, the queue is cleared, and audio stops in tens of milliseconds.
Private by construction
Your words stay on your Mac.
This isn't a promise bolted on afterward — it's how the app is built. Synthesis runs in-process on the local GPU, so there is nowhere for the text to go.
- Selected text lives in memory only while it's being read — never written to disk.
- Selected text is never logged. Logs record lengths and timings, never content.
- No analytics, no crash-reporting SDK, no accounts.
- The network is used exactly once — to download a voice model — then never again.
Fast, and real speech
Latency you can live with.
Kokoro brings 54 natural voices across nine languages; Soprano is a lean, English, low-latency reader. Both stay warm so the second read is instant.
Measured on Apple Silicon, 488-character passage, warm model. Numbers are the app's own, not estimates.
Everywhere you read
If you can select it, you can hear it.
Accessibility first, clipboard fallback second. Standard AppKit and SwiftUI text controls, WebKit content, and text-layer PDFs are all fair game.
- Safari
- Notes
- TextEdit
- Xcode
- PDFs with a text layer
Open, and yours
Download it, or build it yourself.
MLXRead is MIT-licensed and signed with a Developer ID. Updates ship through Sparkle with EdDSA-signed appcasts — every update is verified before it installs.
Unzip, drag to Applications. First launch: right-click the app → Open (signed, not yet notarized, so Gatekeeper asks once).
# macOS 14+, Apple Silicon, Xcode $ git clone https://github.com/rogu3bear/mlxread $ brew install xcodegen && xcodegen generate $ script/build_and_run.sh --verify ==> Verify OK — MLXRead is running
First launch
Grant Accessibility access when asked — it powers both the ⌥esc tap and reading the selection. MLXRead never changes your system settings for you.
System voice
MLXRead also installs a Speech Synthesis Provider — its voice appears in AVSpeechSynthesisVoice.speechVoices() and to the say command.
Auto-updates
Once installed, MLXRead keeps itself current through Sparkle — signed updates pulled from the same GitHub releases, verified before install.
Stop reading with your eyes when you don't have to.
Select. ⌥esc. Listen. Entirely on your Mac.
Build MLXRead