Release history
OpenReader releases
EPUB, PDF, DOCX, MD, and TXT file text to speech document reader. Read documents in realtime with high-quality TTS; or extract audiobooks.
All releases
24 shown
Env var removals + AUTH_SECRET rotation
- Replicate TTS provider with custom model support
Full changelog
✨ What's New
Core Updates
- 🔊 Added Replicate TTS provider with support for custom Replicate models.
- 🧠 Improved TTS generation internals with centralized upstream response helpers, voice resolution logic, and stronger settings validation.
- ⏯️ Improved TTS playback controls with more reliable pause/resume handling via
pauseActiveHowl.
UI & Docs
- 🗂️ Updated document library wording from "Local Documents" to "Your Documents" for clearer navigation.
- 📚 Added Replicate provider documentation and published the docs snapshot for v2.1.2.
Stability & Ops
- 🐳 Pinned SeaweedFS to
4.18in Docker flows and documented the4.19upload issue to improve deployment stability.
Full Changelog: https://github.com/richardr1126/openreader/compare/v2.1.2...v2.2.0
- Custom theme support with live color editing
Full changelog
✨ What's New
Custom Themes
- 🎨 Added persistent custom theme support with live color editing. Users can define, preview, and persist custom color palettes directly from settings.
- 🖌️ New ColorPicker component with curated swatches for each color role.
- 💡 Custom CSS variables applied at runtime with fallback to avoid flash before hydration.
TTS Improvements
- ⏱️ Added
TTS_UPSTREAM_TIMEOUT_MSenvironment variable for configurable upstream TTS request timeouts.
Full Changelog: https://github.com/richardr1126/openreader/compare/v2.1.1...v2.1.2
- Shared TTS provider catalog
- Reusable audiobook generation pipeline
Full changelog
✨ What's New
Core Updates
- 🎧 Refactored TTS provider handling into a shared catalog, including stronger voice-source resolution and validation for remote voice payloads.
- 🛠️ Reworked audiobook generation flow into reusable client adapters/pipeline with improved chapter progress accounting and abort handling.
- ⚙️ Config update logic now preserves per-provider/model voice preferences more reliably, including when provider settings are reset.
- 🔁 Added continuation loop guardrails and related playback hardening to reduce repeated/unstable TTS behavior.
Stability & Migrations
- 🧪 Stabilized key E2E flows (onboarding/modal dismissal, settings interactions, and export behavior) and added unit coverage for TTS catalog/config helpers.
- 🗄️ Fixed SQL insert syntax for the reserved "user" table during filesystem/database migration workflows.
Full Changelog: https://github.com/richardr1126/openreader/compare/v2.1.0...v2.1.1
- TTS lookahead preloading
- Five new light themes
- TTS Providers settings tab
Full changelog
✨ What's New
Core Updates
- 🎧 TTS pipeline improvements: sequential lookahead preloading, better retry handling for transport failures, and explicit MP3 response defaults.
- 🐜 Issue #81 fixed: duplicate audio playback is now guarded against in the TTS provider flow.
- 🛠️ Audiobook generation refactor: chapter creation/generation logic moved further into the server-side pipeline.
- 📦 Audiobook export refinements: stream-copy optimization, duration validation, and improved chapter timing.
UI & Docs
- 🎨 Added five new light themes and refreshed Settings/Audiobook Export/Confirm dialog UX.
- ⚙️ Added a TTS Providers tab in Settings.
- 📚 Updated TTS provider documentation and Docker/SeaweedFS third-party license reporting.
Full Changelog: https://github.com/richardr1126/openreader/compare/v2.0.1...v2.1.0
- KittenTTS-FastAPI support
Full changelog
✨ What's New
- Added official KittenTTS-FastAPI support in OpenReader as an OpenAI-compatible TTS option.
- Added a
kitten-ttspreset in Settings → Custom OpenAI-Like model selection. - Added a dedicated KittenTTS-FastAPI provider guide and linked it across TTS docs, introduction, Docker quick start, and README.
⚙️ Docs & Release Automation
- Enhanced docs deployment workflow with conditional execution for workflow runs.
- Improved the docs versioning-on-tag workflow with optional inputs and safer commit handling.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v2.0.0...v2.0.1
- Storage migration from filesystem to S3-compatible backends
- Database layer change to SQLite/PostgreSQL
- Rebranding from OpenReader-WebUI to OpenReader
- User authentication with sign-in/sign-up
- Per-user TTS rate limiting
- Encrypted user data export
Full changelog
✨ What's New
TL;DR: OpenReader 2.0 adds full authentication, per-user TTS limits, encrypted data export, a new database layer with SQLite/PostgreSQL support, S3-compatible storage support, a new docs experience, and a full rebrand from OpenReader-WebUI.
Core
- 🔐 Added full user authentication with sign-in, sign-up, account management, and improved session handling.
- 📣 Added per-user TTS rate limiting with character limits, daily resets, and device/IP backstops.
- 📤 Added encrypted user data export and updated privacy page/policy behavior.
- 🗄️ Introduced a new database layer for OpenReader, with both SQLite and PostgreSQL backends (via Drizzle) plus migration tooling.
- 🪣 Migrated server document/audiobook storage off the filesystem to S3-compatible blob storage; Docker uses embedded SeaweedFS by default, with support for external S3-compatible providers.
- 🏷️ Rebranded from "OpenReader-WebUI" to "OpenReader", including Docker image naming updates (
openreaderwithopenreader-webuias legacy alias).
Additional Updates
- 🛡️ Added route protection/security hardening and optional GitHub authentication.
- 🧩 Added claimable-data flow so pre-auth usage can be migrated into signed-in email accounts.
- 📚 Migrated documents to server-backed storage with caching.
- 🎧 Migrated audiobook storage/pipeline to object storage with user-scoped handling.
- 📖 Added document preview generation/caching with improved failure recovery.
- ⚙️ Added user preferences + document progress syncing and smoother reading transitions via text prefetching.
- 📘 Launched comprehensive docs with deployment guides, configuration references, and TTS provider integration guides.
- 🧪 Expanded reliability work and test coverage across auth, previews, export, storage, and APIs.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.2.1...v2.0.0
Fixes PDF highlighting and text normalization for complex content.
Full changelog
✨ What's New
🐜 Bug Fixes
- More reliable PDF sentence and word highlighting during layout changes and rapid updates, preventing stale or overlapping highlights.
- Revamped text normalization and TTS block splitting for better handling of long/complex content, EPUB texts, dialogue/quotes, and PDF artifacts.
🧪 Tests
- Expanded unit tests covering block-splitting, EPUB behavior, oversized inputs, and boundary cases.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.2.0...v1.2.1
- External library imports
- Document selection modal
- Server-side audiobook export
Full changelog
✨ What's New
- 📚 External library imports + server-side library sync with migration logic
- 🎧 Updated server-side audiobook export (M4B/MP3) with per-audiobook generation settings
- 🧩 Document selection modal to pick specific documents for sync, load, and import operations
- 🛡️ Hardening for audiobook-related APIs: stricter validation, safe filename generation, path sanitization, and FFmpeg metadata escaping
Docker & CI
- 🔧 Fix whisper CLI behavior in the Docker image (fixes broken Docker word-by-word highlight issue)
- 🐳 Multi-arch Docker publish workflow improvements
- ✅ Expanded unit/integration tests (audiobooks, docstore, NLP text processing, SHA-256 hashing)
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.1.2...v1.2.0
- React/Next.js CVE prevention
- File previews in document grid
Full changelog
✨ What's New
- 📑 File previews in the document grid list (default layout)
- ‼️ Upgrades packages to prevent React/Next.js CVEs discovered recently
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.1.1...v1.1.2
Fixed bugs in the audiobook export modal.
Full changelog
✨ What's New
- Bug fixes in the audiobook export modal
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.1.0...v1.1.1
- Word-by-word highlighting with whisper.cpp
- Custom EPUB navigation and TOC
Full changelog
✨ What's New
- 🎯 Word-by-word highlighting with whisper.cpp; TTS -> STT -> Word by word timestamps. (Optional)
- 🗣️ Whisper binary built and bundled into the Docker image.
UI & UX Improvements
- 📚 Custom EPUB navigation and table of contents for better readability
- 📑 The document List now supports grid mode by default
- 🧹 Small UI tweaks
API & Client Refactors
- 🧩 Client API: Centralized client-side API calls and refined types for reliability.
- 🛤️ Audiobooks: Moved audiobook endpoints to a different path for clearer separation.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.0.1...v1.1.0
- Text highlighting during EPUB playback
Full changelog
✨ What's New
- 📖 EPUB Playback Highlighting
- Added text highlighting for the current sentence during EPUB playback.
- Includes a new configuration option to toggle this feature on or off.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v1.0.0...v1.0.1
- Smart sentence continuation with NLP
- PDF highlighting pipeline refactor
- Chapter-based audiobook export with resume
Full changelog
✨ What's new
Version 1 release comes with many bug fixes, UI improvements, backend improvements, new features and changes.
- 🧠 Smart sentence continuation
- Improved NLP handling of complex structures and quoted dialogue provides more natural sentence boundaries and a smoother audio-text flow.
- EPUB and PDF playback now use smarter sentence splitting and continuation metadata so sentences that cross page/chapter boundaries are merged before hitting the TTS API.
- This yields more natural narration and fewer awkward pauses when a sentence spans multiple pages or EPUB spine items.
- 📄 Modernized PDF text highlighting pipeline
- Real-time PDF text highlighting is now offloaded to a dedicated Web Worker so scrolling and playback controls remain responsive during narration.
- A new overlay-based highlighting system draws independent highlight layers on top of the PDF, avoiding interference with the underlying text layer.
- Upgraded fuzzy matching with Dice-based similarity improves the accuracy of mapping spoken words to on-screen text.
- A new per-device setting lets you enable or disable real-time PDF highlighting during playback for a more tailored reading experience.
- 🎧 Chapter/page-based audiobook export with resume & regeneration
- Per-chapter/per-page generation to disk with persistent
bookId - Resumable generation (can cancel and continue later)
- Per-chapter regeneration & deletion
- Final combined M4B or MP3 download with embedded chapter metadata.
- Per-chapter/per-page generation to disk with persistent
- 💾 Dexie-backed local storage & sync
- All document types (PDF, EPUB, TXT/MD-as-HTML) and config are stored via a unified Dexie layer on top of IndexedDB.
- Document lists use live Dexie queries (no manual refresh needed), and server sync now correctly includes text/markdown documents as part of the library backup.
- 🗣️ Kokoro multi-voice selection & utilities
- Kokoro models now support multi-voice combination, with provider-aware limits and helpers (not supported on OpenAI or Deepinfra)
- ⚡ Faster, more efficient TTS backend proxy
- In-memory LRU caching for audio responses with configurable size/TTL
- ETag support (
304on cache hits) +X-Cacheheaders (HIT/MISS/INFLIGHT)
- 📄 More robust DOCX → PDF conversion
- DOCX conversion now uses isolated per-job LibreOffice profiles and temp directories, polls for a stable output file size, and aggressively cleans up temp files.
- This reduces cross-job interference and flakiness when converting multiple DOCX files in parallel.
- ♿ Accessibility & layout improvements
- Dialogs and folder toggles expose proper roles and ARIA attributes.
- PDF/EPUB/HTML readers use a full-height app shell with a sticky bottom TTS bar, improved scrollbars, and refined focus styles.
- ✅ End-to-end Playwright test suite with TTS mocks
- Deterministic TTS responses in tests via a reusable Playwright route mock.
- Coverage for accessibility, upload, navigation, folder management, deletion flows, audiobook generation/export and playback across all document types.
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v0.4.0...v1.0.0
- Voice selection is now provider-model specific; previously saved voices may require reselection
- Multi-provider TTS support (OpenAI, Deepinfra, Custom OpenAI-Compatible)
- Package migration to pnpm
- Docker improvements with Deepinfra API defaults
Full changelog
What's New
🎯 Multi-Provider TTS Support
Choose your preferred TTS provider:
- OpenAI - Original provider
- Deepinfra - Open-source models (Kokoro-82M, Orpheus-3B, Sesame-1B)
- Custom OpenAI-Compatible - Self-hosted or third-party endpoints
Provider-specific voice management with automatic restoration per model.
📦 Package Manager Migration
Migrated to pnpm for improved dependency handling and reproducible builds.
🐳 Docker Improvements
Updated Docker configuration with Deepinfra API defaults and added docker-compose example with Kokoro-FastAPI integration.
🔧 Bug Fixes & Improvements
- Documentation updates
- CI/CD workflow improvements for pnpm
⚠️ Breaking Changes
Voice selection is now provider-model specific. Previously saved voices may need to be reselected.
Full Changelog
https://github.com/richardr1126/OpenReader-WebUI/compare/v0.3.3...v0.4.0
- Allow clicking of internal links
- Upload multiple files
- Saving and Loading Progress Bar
Full changelog
What's Changed
- Allow clicking of internal links by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/54
- Auto select page number when navigating by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/55
- Upload multiple files by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/57
- Add document selection loading icon by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/56
- Saving and Loading Progress Bar by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/58
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v0.3.2...v0.3.3
- Saving and restoring last location in PDFs
- Player and native voice speed changes
Full changelog
What's Changed
- Added saving and restoring last location in PDFs by @thepycoder in https://github.com/richardr1126/OpenReader-WebUI/pull/51
- Allow for player speed changes as well as native voice speed changes by @thepycoder in https://github.com/richardr1126/OpenReader-WebUI/pull/52
- Move button closure higher in SettingsModal by @RobbyV2 in https://github.com/richardr1126/OpenReader-WebUI/pull/53
New Contributors
- @RobbyV2 made their first contribution in https://github.com/richardr1126/OpenReader-WebUI/pull/53
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v0.3.1...v0.3.2
- Editable page number in PDF navigator view
- Refactored NLP into a single shared function
Full changelog
What's New ✨
- Add editable page number in PDF navigator view by @thepycoder in https://github.com/richardr1126/OpenReader-WebUI/pull/49
- Refactored NLP into a single, shared function by @thepycoder in https://github.com/richardr1126/OpenReader-WebUI/pull/50
New Contributors
- @thepycoder made their first contribution in https://github.com/richardr1126/OpenReader-WebUI/pull/49
Full Changelog: https://github.com/richardr1126/OpenReader-WebUI/compare/v0.3.0...v0.3.1