README file from
GithubApple TTS — Obsidian Plugin
Read your Obsidian notes aloud using the native macOS text-to-speech system.
macOS only. This plugin uses the built-in
saycommand available on macOS. It does not work on Windows or Linux.
Tested on MacOS Tahoe 26 and later.
No internet connection required. No external API keys. No subscriptions. Apple TTS uses the voices already installed on your Mac — the same ones available in System Settings > Accessibility > Spoken Content.
Features
- Read entire note — Reads the full content of the active note
- Read selected text — Speaks only the text you've highlighted
- Read from cursor — Starts reading from your cursor position to the end of the note
- Stop speaking — Instantly stops playback
- 180+ voices — Choose from all macOS voices installed on your system, including Siri voices and novelty voices
- Adjustable speed — 0.5x to 3.0x speech rate
- Content filters — Toggle which parts of your notes are read (code blocks, math equations, tables, links, images, embeds, callouts, HTML, tags)
- Smart markdown stripping — Automatically removes formatting syntax so you hear clean prose, not asterisks and brackets
Installation
From Obsidian Community Plugins
- Open Settings > Community plugins
- Turn off Restricted mode if it's still on
- Click Browse and search for "Apple TTS"
- Click Install, then Enable
Manual Installation
- Download
main.js,manifest.json, andstyles.css(if present) from the latest release - Create a folder called
apple-ttsinside your vault's.obsidian/plugins/directory - Copy the downloaded files into that folder
- Restart Obsidian and enable the plugin in Settings > Community plugins
Usage
Commands
Open the command palette (Cmd+P) and search for "Apple TTS":
| Command | Description |
|---|---|
| Read entire note | Reads the active note from start to finish |
| Read selected text | Reads only the currently highlighted text |
| Read from cursor position | Reads from your cursor to the end of the note |
| Stop speaking | Stops any active speech immediately |
Ribbon Icon
Click the speaker icon in the left ribbon to toggle reading:
- When idle, clicking it reads the current note
- When speaking, clicking it stops playback
Hotkeys
Assign your own keyboard shortcuts in Settings > Hotkeys — search for "Apple TTS" to find all four commands.
Settings
Voice & Speed
| Setting | Description | Default |
|---|---|---|
| Language filter | Filter the voice list by language code (e.g., en, fr, ja) |
(all voices) |
| Voice | Select from installed macOS voices | (System Default) |
| Speech rate | Playback speed from 0.5x (slow) to 3.0x (fast) | 1.0x |
Content Filters
Control which parts of your notes are read aloud. When a filter is on, that content type is skipped.
| Filter | What it controls | Default |
|---|---|---|
| Skip code blocks | Fenced code blocks (```) and inline code (`) |
On (skipped) |
| Skip math equations | LaTeX math ($...$ and $$...$$) |
On (skipped) |
| Skip tables | Markdown table content | Off (read aloud) |
| Skip link text | Text inside [links](url) |
Off (read aloud) |
| Skip images | Image alt text from  |
On (skipped) |
| Skip embeds | Obsidian embeds ![[filename]] |
On (skipped) |
| Skip callouts | Callout body content (> [!note]) |
Off (read aloud) |
| Skip HTML | Inline HTML tags | On (skipped) |
| Skip tags | Obsidian tags (#tag) |
On (skipped) |
Installing More Voices
macOS comes with a set of default voices, but you can install many more:
- Open System Settings > Accessibility > Spoken Content
- Click the dropdown next to System Voice and select Manage Voices...
- Browse and download additional voices (including high-quality Siri voices)
- Restart Obsidian — new voices will appear in the plugin's voice dropdown
Platform Compatibility
| Platform | Supported |
|---|---|
| macOS (desktop) | Yes |
| Windows | No |
| Linux | No |
| iOS / iPadOS | No |
| Android | No |
This plugin is marked as desktop only in its manifest and will only load on macOS. On other platforms, it displays a notice explaining the requirement.
How It Works
Apple TTS uses the macOS say command under the hood. When you trigger a read command:
- The plugin extracts text from the active editor
- Markdown syntax is stripped according to your content filter settings
- The cleaned text is piped to the
sayprocess via stdin - The
sayprocess speaks the text through your system audio output
Stopping playback sends a termination signal to the running say process.
Known Limitations
- No pause/resume — The macOS
saycommand does not support pausing. Stop always means starting over from the beginning. This is a limitation of the underlying system command. - No audio progress indicator — Since
sayspeaks in real-time without providing progress callbacks, there is no seek bar or time display. - macOS only — This plugin relies on a macOS-specific system command and cannot work on other operating systems.
Development
Building from Source
git clone https://github.com/ajsscott/obsidian-apple-tts.git
cd obsidian-apple-tts
npm install
npm run build
Development Mode
npm run dev
This starts esbuild in watch mode — it rebuilds main.js automatically when you save changes.
Testing in Your Vault
Symlink the plugin into your vault's plugin directory:
ln -s /path/to/obsidian-apple-tts /path/to/your-vault/.obsidian/plugins/apple-tts
Then toggle the plugin off and on in Obsidian's Community Plugins settings to reload it after changes.