Description
Speakable adds a play button to your articles that reads the content aloud using the browser’s built-in speech synthesis engine. No external API keys, no usage costs, no third-party services.
Features:
- Play / Pause / Stop controls
- Adjustable playback speed (0.75x – 2x)
- Progress bar with sentence counter
- Voice, pitch, volume, and speed settings from the admin dashboard
- Enable/disable per post type (Posts, Pages, Products, etc.)
- Customizable button color with live preview
- Gutenberg block — place the player anywhere in your content
- Sticky mini-player that follows users while scrolling
- Mobile-optimized with large touch targets
- Accessible: ARIA labels, roles, keyboard navigation, and live regions
- Zero external dependencies — no third-party scripts, fonts, or services
Gutenberg Block:
Search for “Speakable Player” in the block inserter to place the player at any position in your content. The block automatically disables global auto-insertion for that post to prevent duplicates.
How It Works:
- The plugin filters post content to inject a player bar (or use the Gutenberg block)
- JavaScript extracts article text and splits it into sentences
- Each sentence is spoken using the Web Speech API
- Sentence-by-sentence playback avoids Chrome’s known timeout bug
Source Code and Development
This plugin is fully GPL. The maintained development location is:
https://github.com/devshagor/speakable
The human-readable source for every shipped file is also bundled inside the plugin itself:
- Block editor source:
src/blocks/speakable-player/index.jsandsrc/blocks/speakable-player/editor.css - Block render template (server-side):
src/blocks/speakable-player/render.php - Block metadata:
src/blocks/speakable-player/block.json - All PHP classes are unminified and live under
includes/ - All admin/frontend CSS and JS are unminified and live under
assets/
The contents of build/blocks/speakable-player/ are produced from src/blocks/speakable-player/ using @wordpress/scripts.
To regenerate the build output:
npm install
npm run build
This runs wp-scripts build --webpack-src-dir=src/blocks --output-path=build/blocks. The npm run start command provides a development watch mode.
Screenshots

The player bar on a published article, ready to read the post aloud 
Active playback with progress bar and sentence counter 
Voice settings — choose voice and adjust speed, pitch, and volume 
Display settings — post types, button color, and player position 
Live preview — test the current voice settings before saving 
Analytics overview — TTS-enabled posts and player feature status
Blocks
This plugin provides 1 block.
- Speakable Player Add a text-to-speech player anywhere in your content. Automatically disables the global auto-insertion for this post.
Installation
- Upload the
speakablefolder to/wp-content/plugins/ - Activate the plugin through the ‘Plugins’ menu in WordPress
- Go to Speakable > Settings to configure voice and display options
- Visit any single post to see the player
FAQ
-
Does this plugin require an API key?
-
No. It uses the browser’s built-in Web Speech API which is completely free.
-
Which browsers are supported?
-
Chrome 33+, Safari 7+, Firefox 49+, Edge 14+, and most modern mobile browsers.
-
Can I place the player anywhere I want?
-
Yes. Use the “Speakable Player” Gutenberg block to place the player at any position within your content. When the block is used, global auto-insertion is automatically skipped for that post.
-
Why do voices sound different on different devices?
-
Voices are provided by the operating system, not the plugin. Available voices vary by OS (macOS uses Siri voices, Windows uses Microsoft voices, Android uses Google TTS, etc.).
-
Can I choose which post types show the player?
-
Yes. Go to Speakable > Settings > Display tab and select which post types should show the player.
-
Does the player appear on archive pages?
-
No. The player only appears on single post/page views, never on archives, search results, or the homepage.
-
Will this slow down my site?
-
No. The plugin only loads its small CSS and JS files on singular pages where TTS is enabled. On all other pages the frontend class is not even loaded. No external scripts, fonts, or services are used.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Speakable” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Speakable” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.1
- Fix: player no longer reads related-post titles or meta — content extraction is now scoped to the player’s own article container.
- Improvement: the post title is now read before the article body.
- Docs: added a Source Code and Development section to the readme pointing to the public GitHub repository.
1.0.0
- Initial release
- Browser-based TTS using Web Speech API
- Admin settings dashboard under Speakable menu
- Voice, speed, pitch, and volume controls
- Enable/disable per post type
- Customizable button color and position (before/after content)
- Progress bar and speed control toggles
- Sticky mini-player during playback
- Gutenberg block for manual player placement
- Analytics and Help submenu pages
- Mobile-optimized touch interface
- Accessible markup with ARIA attributes and keyboard navigation
- Performance-optimized: frontend assets only loaded where needed
