Eupub reader
A standalone reader (Electron) that renders EPUB, PDF and plain-text books in Euspell spelling — reusing the browser extension's conversion engine without modifying a line of it.
The one load-bearing idea
The extension reforms a web page by running walkTextNodes(document.body, convert) over its DOM. An EPUB chapter is an XHTML document, and a plain-text file can be turned into one. So Eupub never re-implements conversion — it arranges for a chapter document to exist and runs the exact same convert() + walkTextNodes() pair inside it.
import { convert } from '../../../euspell_ext/src/content/converter.js';
import { walkTextNodes } from '../../../euspell_ext/src/content/dom-walker.js';How a book is rendered
- An
.epubis unzipped to a temp dir; a.txtis synthesized into an EPUB-shaped book on disk. Both yield the same object, so nothing downstream cares which ran. - Each chapter is rendered in a sandboxed
<iframe srcdoc>with its own scripts stripped and the engine bundle injected. - The engine auto-runs on load and respells the chapter; a viewer runtime adds CSS-column pagination, bookmarks, highlights, and search.
- A
.pdftakes a different path: it is fixed-layout rather than a spine of chapters, so it opens in the embedded PDF.js viewer instead — the same viewer the browser extension uses.
people or peeple finds the same spot.Get it
Every release ships four signed builds — an Authenticode-signed Windows installer, a notarized macOS disk image, a Linux AppImage, and an Android APK signed with the release key — all of them on the downloads page. On iPhone it comes from the App Store — free, iOS 17 or later.
Per-platform steps, including what to do about the first-run warnings, are in docs/installing.md in the Eupub repository, which is the maintained copy.
Known limits
- EPUB, PDF and TXT — no MOBI, AZW, DOCX, or raw HTML.
- The macOS disk image is arm64 only — there is no Intel build.
- EPUB scripting is stripped and fixed-layout books aren't supported — the reader assumes reflowable, single-column content.