Browser-based RSVP speed reader. It flashes words at a chosen speed so you can read a document without moving your eyes across a page.
Live app: https://nabu-reader.vercel.app
- Imports TXT, Markdown, PDF, and DOCX files.
- Reads with RSVP at 100-1000 WPM.
- Displays 1, 3, 5, 10, or 20 words per flash.
- Highlights the Optimal Recognition Point in amber.
- Stores documents locally in browser IndexedDB.
- Supports fullscreen reading and keyboard controls.
Prerequisites:
- Rust stable
wasm32-unknown-unknowntarget- Trunk
git clone https://github.com/JDRV-space/nabu.git
cd nabu
rustup target add wasm32-unknown-unknown
cargo install trunk
trunk serveThe app runs at http://127.0.0.1:8080.
Production build:
./scripts/build.shBuild output goes to dist/.
| Key | Action |
|---|---|
| Space | Play/Pause |
| Left/Right | Adjust WPM by 50 |
| Up/Down | Adjust WPM by 10 |
| R | Restart |
| F | Fullscreen |
| ESC | Exit reader |
- Documents are stored in browser IndexedDB and encrypted with AES-GCM.
- The encryption key is stored in browser
localStorageasnabu_key. - This is privacy against server upload. It is not protection against a compromised browser, browser extension, device, or user profile.
- Clearing site data can delete the library and the stored key.
- PDF and DOCX parsing happens in the browser and can fail on malformed or unusual files.
- There is no account system, sync, sharing, or backup.
nabu/
├── assets/ # static assets and CSS
├── src/
│ ├── main.rs # entry point
│ ├── components/ # reader, library, settings, controls, upload
│ ├── state/ # application state and signals
│ ├── storage/ # IndexedDB and document encryption
│ └── parser/ # PDF, DOCX, TXT, MD parsing
├── docs/SPEC.md # design and implementation notes
├── scripts/ # build scripts
├── Cargo.toml
├── Trunk.toml
├── vercel.json
└── LICENSE
MIT. See LICENSE.