runs in the browser, uploads nothing

A browser tool for readers and language learners

Drop in a book and see how hard it is to read.

Give it an EPUB or a text file and it reports a Flesch-Kincaid grade, a reading-ease score, vocabulary richness, the most frequent words, and a coverage curve: how many distinct words you need to know to follow most of the book. The browser's own DecompressionStream unzips the EPUB, so the file never leaves your device.

On the bundled Alice's Adventures in Wonderland it returns grade 5.9 and reading ease 82, and shows that 1,397 of the book's 2,637 distinct words cover 95% of its 26,715 words.

At a glance

Does
Scores an EPUB or text file for Flesch-Kincaid grade, reading ease, type-token ratio, top 20 words and a vocabulary coverage curve.
Runs
One index.html, no libraries, no server; the browser's DecompressionStream unzips the book.
Sample
Alice: grade 5.9, ease 82, 26,715 words, 2,637 distinct, 95% coverage at 1,397 words.
Tested
No automated test suite. This page reruns the tool's scoring code on the sample each time it loads and draws the coverage curve from that run.
Limits
English only; Flesch-Kincaid sees only sentence and word length; coverage counts word forms, not families.

The tool's own formula and syllable heuristic, copied from index.html: grade = 0.39 × (words per sentence) + 11.8 × (syllables per word) − 15.59. The opening of Alice is two sentences of 113 words between them, which scores grade 22.3 against the whole book's 5.9. Split them up and watch it fall.

The coverage curve

1,397 words cover 95% of Alice

A grade level squeezes a book into one figure that a learner can't do much with. The coverage curve asks how much vocabulary you need before the book stops being a slog, and gives a word count you can work toward. For the bundled Alice's Adventures in Wonderland, 58 distinct words already cover half the text and the top 100 carry 59%.

Loading the sample…

Computed in your browser when the page loads: the tool's analyze() run on sample-alice-in-wonderland.txt from the repo. Word forms, not families, so "said" and "say" count separately.

58words cover 50%
385cover 80%
1,397cover 95%
2,103cover 98%

I measured the same steep-then-flat shape across a season of television in the Love Island lexical analysis. That study needed a Python pipeline; this tool puts the measurement in a web page that works on any book.

How it works

An EPUB is a ZIP, and browsers can unzip

Every EPUB is a ZIP archive of XHTML files. Reading one in a web page usually means bundling a JavaScript unzip library, and analyzing a book usually means sending it to a server. This tool does neither.

A ZIP reader of about 30 lines finds the central directory, then inflates each chapter with DecompressionStream('deflate-raw'). The browser's DOMParser extracts the text, and the scoring runs in the same page. The only network call loads the bundled sample, so the privacy claim can be checked by reading the source.

The analyzer's result for Alice's Adventures in Wonderland: Grade 6, Flesch-Kincaid 5.9, 26,715 total words, 2,637 unique, 9.9% vocabulary richness, reading ease 82, a bar chart of the twenty most frequent words led by said and alice, and a coverage curve crossing 95% at 1,397 words.
The tool's result for the sample, captured 2026-10-28.

Index of frequent words, Alice's Adventures in Wonderland

said462 alice386 all182 had178 what136 little128 out117 one103 down102 up100 about94 know87 like85 would83 went83 again83 herself83 have80 when79 could77

The tool's top-20 list for the sample after stopwords, in rank order, with counts.

On a phone

It works at 390 pixels

The drop zone doubles as a file picker on touch devices, and the bundled sample lets someone try the tool in one tap without finding an EPUB first. The charts take their colors from the page, so they follow the phone's light or dark mode.

The analyzer on a 390 pixel wide phone screen: Grade 6 for the sample, the four statistics in a two-by-two grid, and both charts legible.
The sample result at 390px wide.

Limitations

Readability formulas are crude

Flesch-Kincaid uses sentence length and syllables per word, nothing else. It can't tell whether the ideas are hard or the vocabulary archaic, so a book of short sentences about difficult things scores as easy. The syllable count is a vowel-group heuristic, and it miscounts some words.

Type-token ratio falls as texts get longer, which makes a comparison between a novella and a long novel unfair, and the tool does not correct for length.

The coverage curve counts word forms, so "run", "running" and "ran" are three words, and its counts come out higher than the word-family figures used in language-teaching research. Only English is handled; the tokenizer keeps the letters a to z.

Built on

One HTML file, no dependencies

Unzipping
A hand-written ZIP central-directory reader and native DecompressionStream
Text
The browser's DOMParser over the archive's XHTML files, in filename order
Charts
Drawn on <canvas> without a charting library, colored from the page's CSS variables
Accepts
.epub and plain text
Sample
Alice's Adventures in Wonderland, Project Gutenberg, public domain
Privacy
Everything runs on your device; there is no server, upload or analytics