Listen to the web.
A clean, open-source reader mode and text-to-speech app for Android.
Paste a URL or share directly from your browser — WebVox transforms cluttered web pages into a clean, immersive listening experience.
Download WebVox on Google Play
Visit webfox.alkyo.app
- Removes ads, popups, sidebars, and unnecessary clutter
- Extracts article title, author, and readable content
- Optimized typography for long reading sessions
- Reads articles aloud using Android system TTS
- Word-by-word highlighting during playback
- Adjustable speed, pitch, voice, and language
- Continue listening with the screen off
- Lock-screen and notification controls
- Headset and Bluetooth media button support
- Automatically detects previous/next article links
- Optional auto-next article playback
- Background caching for faster article loading
- Save articles for later
- Resume from where you left off
- Quickly revisit recent articles
- Share URLs directly from your browser to WebVox
- Share article links back out from WebVox
- Light / dark / system theme
- Adjustable reader font size
- Auto-play and auto-next preferences
Most text-to-speech apps feel:
- cluttered
- overly technical
- subscription-heavy
- focused on AI voices instead of reading experience
WebVox focuses on:
- simplicity
- readability
- immersive listening
- fast article loading
- privacy-friendly usage
No accounts. No ads. No unnecessary complexity.
- Android only
- Flutter SDK
>=3.7.0 - Android device with a TTS engine installed
- Google Speech Services recommended
git clone <repo-url>
cd WebVoxflutter pub getflutter runflutter build apk --releaseRelease APK output:
build/app/outputs/flutter-apk/
To build a release package automatically:
./scripts/build-release.shThis script:
- increments the build number
- builds the release APK
- copies artifacts into
dist/ - generates:
- versioned APK
web_reader-latest.apk
The launcher icon is generated from:
assets/appicon-128.png
To regenerate launcher icons:
dart run flutter_launcher_icons| Layer | Location | Responsibility |
|---|---|---|
| Domain | lib/domain/ |
Entities and repository interfaces |
| Data | lib/data/ |
HTTP fetching, parsing, persistence |
| Presentation | lib/presentation/ |
Screens, widgets, Riverpod state |
| Package | Purpose |
|---|---|
flutter_riverpod |
State management |
flutter_tts |
Android TTS |
audio_service |
Background playback & media session |
sqflite |
Local database |
http |
Web requests |
html |
HTML parsing |
receive_sharing_intent |
Receive shared URLs |
share_plus |
Share article links |
Please include:
- Android version
- Device model
- App version
- Steps to reproduce
- Problematic article URL (if applicable)
- Relevant logs or screenshots
Contributions are welcome.
Before submitting a pull request:
- Fork the repository
- Create a feature branch from
main - Keep changes focused and minimal
- Run:
flutter analyze
flutter test- Clearly explain the motivation and implementation details
For major changes, please open an issue first to discuss the proposal.
Planned improvements:
- Better article extraction
- Offline article downloads
- Tablet layout optimization
- Material You support
- Improved playback queue
- More reader customization
- Enhanced accessibility support
This project is licensed under the MIT License.
The name WebVox and the WebVox logo are trademarks of the author.
You may fork and modify the source code under the MIT License, but you may not redistribute modified versions using the original branding without permission.




