End-to-end test flows for the Chrome, Firefox, and Safari extensions against the local Out Loud desktop app.
Every extension talks to the desktop app's local HTTP server. Start it first:
npm run electron:devVerify it's listening on port 51730:
npm run extension:test
# or
curl http://127.0.0.1:51730/api/v1/audio/voices- Open
chrome://extensions/ - Enable Developer mode (top right)
- Load unpacked → pick the
chrome-extension/folder
- Click the extension icon — status should read Ready (green). If it says Disconnected, the desktop app isn't running.
- Select text on any webpage, open the side panel — the selection should appear in the textarea.
- Click Play — audio streams with the progress bar updating.
- Switch language + voice dropdowns — options refresh and play correctly.
chrome://extensions/ → Out Loud → Inspect views: service worker → Console.
about:debugging→ This Firefox- Load Temporary Add-on
- Pick
chrome-extension/manifest.json
The same codebase runs in Firefox. Some Manifest V3 features may behave slightly differently.
npm run extension:safari:convert
open safari-extension/SafariExtension/*.xcodeprojBuild and run from Xcode, then enable in Safari → Settings → Extensions. Full build flow in ../../safari-extension/README.md.
- Desktop app running?
npm run electron:dev - Port
51730free?lsof -i :51730 - Check browser console for errors
- Check the browser console
AudioContextrequires a user gesture — make sure play is actually clicked- Try the one-shot endpoint (
POST /api/v1/audio/speech) to isolate streaming issues
- Validate
manifest.jsonsyntax - Confirm every referenced file exists
- Check the extension console
- App must be signed — see
../build/mac-app-store.md - Extension permissions granted in Safari settings?
- HTTP server reachable?
npm run extension:chrome:pack
# Upload releases/extensions/out-loud-chrome.zipThe same zip works — upload to addons.mozilla.org.
Archive in Xcode, upload to App Store Connect. See ../build/mac-app-store.md.
../../chrome-extension/README.md— Chrome-specific setup and auto-launch../../safari-extension/README.md— Safari build flow../app/api.md— the HTTP API the extensions call