Build a Text-to-Speech Chrome Extension A developer published a tutorial for building a Chrome extension, dubbed Voice Reader, that converts selected web text into speech using the ElevenLabs neural text-to-speech API. The guide walks through a Manifest V3 extension with a popup UI for voice selection and API key storage, a background service worker that calls the ElevenLabs TTS endpoint, and host permissions scoped to the API domain. If you spend any time on the web, you’ve probably wished you could listen to articles, docs, or chat messages instead of reading them. A lightweight Chrome extension that turns selected text into natural‑sounding speech can boost productivity, aid accessibility, and just be plain fun. In this guide we’ll build a Text‑to‑Speech TTS Chrome extension that leverages the ElevenLabs voice AI platform. ElevenLabs offers high‑quality, neural TTS with voice cloning capabilities, and their API is straightforward to call from JavaScript. By the end of the tutorial you’ll have a working extension you can load locally, customize with your favorite voice, and ship to the Chrome Web Store. 👉 Quick link: Want to try ElevenLabs now? Grab a free trial here: https://try.elevenlabs.io/kr07zfuqn1bp https://try.elevenlabs.io/kr07zfuqn1bp | Item | Reason | |---|---| | Node.js =14 | To run the build script and install dependencies. | | Chrome browser | To load and test the extension. | | ElevenLabs API key | Required to call the TTS endpoint. Sign up at the link above. | | Basic HTML/CSS/JS | The extension’s UI is built with vanilla web tech. | Tip: Keep your API key secret We’ll store it in the extension’s background.js using Chrome’s storage.sync API so it never ends up in the public repo. Create a new folder called tts-extension and add the following files: tts-extension/ │�� manifest.json │─ background.js │─ popup/ │ ├─ popup.html │ ├─ popup.css │ └─ popup.js └─ icons/ └─ icon48.png The manifest.json tells Chrome what the extension can do, while the popup folder holds the UI that appears when you click the extension icon. { "manifest version": 3, "name": "Voice Reader", "description": "Select text and have ElevenLabs read it aloud.", "version": "1.0.0", "permissions": "storage", "activeTab", "scripting" , "action": { "default popup": "popup/popup.html", "default icon": { "48": "icons/icon48.png" } }, "background": { "service worker": "background.js" }, "host permissions": "https://api.elevenlabs.io/ " } Key points manifest version: 3 is the current standard. scripting permission lets us inject a content script on the active tab to grab selected text. host permissions whitelist the ElevenLabs API domain. popup.html < DOCTYPE html