A keyboard-driven, local-first speed reader for .txt and PDF files. Words flash one at a time with a coloured pivot letter, so your eyes stay still and your brain does the moving.
Try the live demo → (enable GitHub Pages in repo settings once after first push)
Screen.Recording.2026-05-25.at.12.30.21.PM.mov
Traditional reading moves your eyes left-to-right across a line. Rapid Serial Visual Presentation (RSVP) flips that: the words come to you, one at a time, fixed in place. Each word is also aligned around an Optimal Recognition Point — the single letter your eye naturally fixates on — drawn in a different colour. Combined, you can comfortably read at 400–800 WPM with practice.
Speed Reader is a small single-page app that does this in your browser. Drop in a text file or a PDF, pick a speed, hit space. Everything stays local: there is no account, no server, no upload.
- Reads
.txtfiles and text-based PDFs (extraction viapdfjs-dist) - Adjustable speed: 150–1200 WPM, with one-tap presets at 300 / 500 / 700 / 900
- Structural pauses on punctuation, paragraph breaks, and headings so meaning still lands
- Highlights & bookmarks with surrounding context, stored in IndexedDB
- Export highlights to Markdown — one click, lives next to your notes
- Auto-resume — re-open the same file and pick up where you left off
- In-app help — press
?for the hotkey cheat-sheet and a primer on ORP - Optional focus audio: three ambient stations streamed from SomaFM
- Keyboard-first; the mouse is optional
- Local-only — no telemetry, no accounts, no upload of your documents
| Key | Action |
|---|---|
Space |
Play / pause |
← / → |
Step backward / forward |
H |
Highlight current position |
B |
Toggle highlights panel |
M |
Toggle focus-audio panel |
? |
Open help / hotkey cheat-sheet |
Esc |
Close any open panel |
Just open the live demo. Drop in a file. Done.
git clone https://github.com/Vishwa-docs/speed-reader.git
cd speed-reader
npm install
npm run dev
# open http://localhost:5173docker build -t speed-reader .
docker run --rm -p 8080:80 speed-reader
# open http://localhost:8080The image is a tiny multi-stage build: Vite builds the bundle, then nginx (Alpine) serves the static output. Final image is ~50 MB.
On a Mac, Launch Speed Reader.command will npm install if needed and start the dev server on http://127.0.0.1:3000. You may need to right-click → Open the first time so Gatekeeper allows it.
src/lib/readerCore.ts— turns text into a stream of tokens, computes per-token pause multipliers (commas, sentence ends, paragraph breaks), and picks the ORP pivot letter.src/lib/fileParser.ts— extracts text from.txtand PDF inputs and infers structure (headings, paragraphs).src/lib/highlightsDb.ts— IndexedDB wrapper with alocalStoragefallback, so highlights survive across sessions even in restricted browsers.src/components/ReaderLane.tsx— the fixed-pivot display surface.
Your documents never leave the browser. The app does not talk to any backend. The only outbound network request the app can make is to SomaFM's public stream URLs, and only if you turn focus audio on.
See FUTURE_PLANS.md. Notable items on deck:
- E-reader / Apple Books / Kindle integration for syncing reading position and highlights
- Lightweight book-tracking (currently progress lives in IndexedDB; long-term reading lists / progress will move toward a structured local store)
- OCR for scanned PDFs
- Optional export/import of highlights so you can back them up as text
PRs welcome. See CONTRIBUTING.md. The codebase is small, strict TypeScript, and runs vitest for tests.
- Push to
main. CI runs typecheck + tests + build. - In your repo: Settings → Pages → Source → GitHub Actions. The included
deploy.ymlwill publish on every push tomain. - The published URL is
https://<owner>.github.io/speed-reader/. The build automatically rewrites asset paths using the repo name.
This project stands on the shoulders of:
- pdfjs-dist (Apache 2.0) — PDF text extraction in the browser, by Mozilla.
- React, Vite, TypeScript, Vitest, and Testing Library — all MIT-licensed.
- SomaFM — commercial-free, listener-supported internet radio. The three ambient stations in the focus-audio panel stream directly from SomaFM. If you use them, please donate to SomaFM — they keep the lights on through listener support.
The ORP / word-pivot reading technique itself is decades-old prior art (Forster, 1970; later popularized by RSVP research and various commercial implementations).
MIT © Speed Reader Contributors