Strobe
Read books and long articles one word at a time on iPhone, iPad, and Mac. Strobe anchors each word on a fixed focal letter, can adapt its pacing to complex text, and opens into a full searchable passage view whenever you want to look around. Import, timing, and your saved place all stay on the device.
iPhone · iPad · Mac ·
How reading works
Strobe is a rapid serial visual presentation (RSVP) reader for iPhone, iPad, and Mac. Drop in a PDF, EPUB, Markdown, or plain-text file (or just paste from your clipboard), and Strobe flashes the text one word at a time, locked onto a single highlighted focal letter so your eyes don’t have to dart across the page. You can set your speed anywhere from 100 to 1,000 WPM. Hold to read, and let go to pause. While holding, drag up or down to speed up or slow down temporarily; while paused, swipe left or right to step word by word. (If you prefer tap-to-play or keyboard controls, those are built in too.)
To keep you from feeling lost inside a sentence, Strobe can show faint surrounding words on either side, keep an open quotation mark or parenthesis pinned above the word until it closes, and flash chapter headings as you cross them.
Whenever you want to read normally or look back a paragraph, open the full-text view. It highlights the exact word you paused on, lets you search for a word or phrase and move between matches, and lets you tap any word on the page to jump your RSVP cursor right to that spot. Longer documents load in sections as you scroll, with breaks near sentence endings and chapter headings.
Local library and zero tracking
When you import a book, Strobe extracts the text and immediately releases access to the original file; reading and search use the saved text, so the original never has to be reopened. Everything—parsing, search, complexity scoring, and playback—runs locally on your device using native Apple frameworks, with zero third-party dependencies, no user accounts, no document uploads, and no analytics.
Your library lives in SwiftData, storing each book’s tokenized words, chapter markers, complexity scores, reading position, and speed. We store the heavy word arrays and timing scores in separate binary blobs, alongside a stored word count, so the main library screen can show book titles, generated covers, and word counts without pulling whole novels into RAM. The most recently read unfinished book appears in Continue Reading.
If you jump backward to re-read a chapter, Strobe updates your current bookmark without wiping out the high-water mark of how far you’ve made it through the book, which is what library progress shows. Reading-time estimates use the word count and the book’s base speed.
Smart tokenization and pacing
A naive speed-reader treats every whitespace-separated string the same, which makes actual books miserable to read. Strobe’s importer uses PDFKit to extract text page by page, with chapter locations from PDF bookmarks, while EPUB import follows the book’s reading order and takes chapters from its table of contents or detected headings. Standard cleaning strips out recurring page numbers, headers, footers, and other boilerplate (you can turn it off), EPUB parsing skips tables and HTML nav clutter, and Markdown follows the plain-text path.
Its tokenizer stitches hyphenated line breaks back together, splits words joined by em dashes, and keeps multi-part units like ‘10:30 PM’ or ‘44 B.C.’ on screen together as a single beat. CJK languages use Apple’s NaturalLanguage word segmentation, and Arabic text preserves its connected letterforms, with context words following the document’s reading direction.
Pacing isn’t a flat metronome, either. Your base WPM sets the interval, then timing rules adjust it: Strobe automatically gives extra breathing room to compound words and acronyms, and optional controls account for word length, punctuation, and sentence breaks. Complexity timing uses a score calculated once at import for every word, based on common-word lookup, language tags, names, length, and character makeup. During playback, each word’s timer is anchored to the previous deadline, so tiny UI hitches don’t accumulate into speed drift.
File limits and saved bookmarks
Because Strobe doesn’t bundle an OCR engine, scanned PDFs need an existing text layer to work. The app clearly flags unreadable or password-locked PDFs, EPUBs with encrypted reading content, unsupported files, and imports that produce no words. It caps imports at the first 20,000 PDF pages or 64 MB of plain text, and EPUB extraction limits both individual decompressed entries and total output.
Whenever you close a book, background the app, or quit on Mac, Strobe pauses and saves your exact word index. Importantly, the save routine waits until a book’s word blob has finished loading into memory—so accidentally opening a huge book and backing out a half-second later won’t overwrite your bookmark back to word zero. If SwiftData can’t initialize, Strobe shows a startup error, and it reports any import or reading-progress save failures.