Read anything without moving your eyes.
Courier streams a document word by word at a variable rate (30–1500 words per minute). It holds the one letter your brain uses to recognise each word at a fixed point on screen. This allows you to stop scanning lines. The words come to you.
24 seconds — full-quality MP4
git clone https://github.com/chntnm/Courier.git
cd Courier
npm install
npm run dev # http://localhost:5180Try a sample opens the Declaration of Independence. Otherwise paste anything, or drop in a PDF, EPUB, DOCX, Markdown, HTML or text file.
Fix a word in the centre of a screen and the eye still travels: to the word, then across it to the point where recognition happens. Move the word instead, so that point arrives where the eye already rests, and nothing travels. The difference between the two is not speed. It is whether the eye is doing work that has nothing to do with meaning.
That point is not the middle of the word. O'Regan's work on optimal viewing position established that recognition peaks when the fovea lands slightly left of centre and degrades sharply on either side. The offset is small, measurable, and not optional. Rapid Serial Visual Presentation inverts the geometry — the eye is stationary, so the word must move to put that letter beneath it.
Which letter takes the pivot comes from Spritz's patent, US8903174B2:
| Word length | Pivot letter |
|---|---|
| 3–5 | 2nd |
| 6–9 | 3rd |
| 10–13 | 4th |
| 14–20 | 5th |
The table stops at 20 and starts at 3. Courier defines the rest.
The default is 350 wpm. Research on RSVP is consistent that comprehension falls off above natural reading rate, so the defaults are tuned for reading rather than for a number.
Long words are held longer, sentences and paragraphs get a beat, and the whole schedule is normalised so the rate is accurate. Consideration I made: at the top of the range the display itself becomes the limit; Courier reports you the rate it is actually delivering.
Unpausing rewinds a couple of words, because cold resumes at 900 wpm lose the thread.
E opens the full text with your position tracked. Click any word to move
there.
| Key | |
|---|---|
Space |
play / pause |
← → |
previous / next word |
Shift + ← → |
previous / next sentence |
↑ ↓ |
speed by 25 wpm |
E |
full text view |
R |
back one sentence |
Esc |
pause |
Twelve. Eight carried over from akasha — Midnight, Cosmos, Dracula, Nord, Tokyo Night, Gruvbox, Monokai, Gilded — three paper surfaces for long reading, and Courier's own.
Each theme sets its own pivot colour rather than inheriting the accent. That letter is the single glyph the eye holds for an entire document. It has to carry contrast against its own background without becoming the loudest thing on the page: ink red on paper, not screen red.
Everything is reduced to prose before it reaches the reader.
PDF is the interesting case. getTextContent returns text in content-stream
order, and for a two-column page that order is already the reading order —
column one, then column two. Grouping by vertical position and sorting the page
top to bottom, which is the obvious implementation, interleaves the columns and
produces confetti. Courier does not sort. It also rejoins wrapped lines, closes
up words hyphenated across a break, infers paragraphs from line spacing, and
strips page numbers and running heads. A journal strapline left in means the
reader announces the name of the journal once per page.
EPUB is read in spine order, table of contents skipped. DOCX collects only
w:t, which excludes tracked deletions and field codes — you never hear a
sentence someone deleted. Markdown is stripped, or the reader delivers ## and
**bold** as words.
A scanned PDF holds images, not text. Courier says so rather than opening empty.
Your library and reading position live in your browser. Nothing is uploaded.
Fixed-pivot presentation is claimed in Spritz's patent family (US8903174B2 and continuations).
MIT.





