drop a book in, nothing goes out

"Is this book too hard for me?" is a measurable question.

Drop the file in. It never leaves your laptop.

Give it any EPUB and you get a reading grade level, a reading-ease score, vocabulary richness, and the chart that actually matters to a learner: the coverage curve showing how few distinct words you need to follow most of the book. The EPUB is unzipped in the browser with a native API — no server, no upload, and no third-party libraries.

Analysis results for Alice's Adventures in Wonderland: Grade 6, 26,715 total words, 2,637 unique words, 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.
A real run on the bundled public-domain sample. Alice's Adventures in Wonderland: Grade 6, 26,715 words, and 1,397 distinct words cover 95% of it.
0 bytes

uploaded. The ZIP is decompressed by the browser itself, so the book never touches a network.

0 deps

No unzip library, no charting library, no framework. One HTML file.

1,397

distinct words for 95% coverage of Alice. The top 100 alone carry 59% of the book.

1 click

to try it — a public-domain sample is bundled so you don't need a file to hand.

↓ the trick

An EPUB is a ZIP, and browsers can now unzip

Every EPUB is a ZIP archive of HTML files. The usual way to read one in a web page is to pull in a JavaScript unzip library, and the usual way to analyse a book is to send it to a server. Both are avoidable.

This uses DecompressionStream, a native browser API, to decompress the archive in place. The text is then extracted with the browser's own HTML parser, tokenized and scored. The consequence is the privacy claim: there is no upload path in the code at all, so the promise is architectural rather than a policy you have to believe.

Reading grade

Flesch–Kincaid grade level, plus a 0–100 reading-ease score.

Vocabulary richness

Type–token ratio, with total and unique word counts alongside it.

Top words

The twenty most frequent meaningful words once stopwords are removed.

Coverage curve

How much of the book you can read knowing the N most common words. The most useful chart for a learner.

↓ why the coverage curve

The number a learner actually wants

A grade level compresses a whole book into one figure and tells you almost nothing actionable. The coverage curve answers the real question: how much vocabulary do I need before this stops being exhausting?

For Alice, the answer is 1,397 distinct words for 95%. The top 100 words alone already carry 59%. That shape — steep at first, then a long flat tail — is the same shape I measured across a season of television in the Love Island lexical analysis, which is where this tool came from. That study needed a Python pipeline; this turns the same lens into something anyone can point at their own book.

The full analyzer page at desktop width showing the drop zone at the top and the complete results below, including grade level, statistic cards, word-frequency chart and coverage curve.
The whole tool, top to bottom.

↓ before you drop a file

It works on a phone too

Empty state on the left, phone layout on the right. The drop zone doubles as a file picker on touch devices, and the bundled sample means the tool is usable in one tap without hunting for an EPUB first.

The analyzer's empty state with a drop zone, a Choose a file button and a Try a sample button.
Empty state — drop, pick, or try the sample.
The analyzer on a 390 pixel wide phone screen with the statistic cards stacked and both charts still legible.
390px — cards stack, charts stay readable.

↓ what this cannot tell you

Readability formulas are cruder than they look

Flesch–Kincaid is essentially sentence length and syllable count. It has no idea whether the ideas are hard, whether the vocabulary is archaic, or whether the sentences are doing something structurally difficult. A book of short sentences about difficult things scores as easy.

Type–token ratio is also sensitive to length: longer texts tend to score lower simply because they have more running words. Comparing TTR between a novella and a doorstop is not comparing like with like, and the tool does not correct for it.

The coverage curve is the most robust thing here and even it counts word forms rather than word families, so "run", "running" and "ran" are three words. That inflates the count somewhat against the word-family figures used in language-teaching research.

Finish · what it is built on

Deliberately boring technology

Unzipping
Native DecompressionStream, no third-party library
Text extraction
The browser's own HTML parser over the archive's XHTML files
Scores
Flesch–Kincaid grade and reading ease; type–token ratio for richness
Charts
Drawn on <canvas>
Accepts
.epub and plain text
Sample
Alice's Adventures in Wonderland, Project Gutenberg, public domain
Privacy
No server, no upload, no analytics. There is no code path that sends the file anywhere
Origin
The same lens as the Love Island lexical analysis, made reusable

Find out before you commit to 400 pages