WordBench methodology

How WordBench counts

Every rule this site applies to your text is written out below, with the source for every number it uses. If two character counters disagree about the same sentence, this page explains why, and it is the page to check WordBench against.

What counts as a word

A word is any unbroken run of non-whitespace characters. The implementation is a single regular expression, /[^\s]+/g, applied to the trimmed text.

That definition has consequences worth knowing. can’t is one word. state-of-the-art is one word. A standalone emoji with spaces either side is one word. Two words joined by a dash without spaces are one word here and often two in a word processor. A page number on its own line is one word.

Average word length is measured differently, on purpose: it strips punctuation from each word first, so that the average reflects letters and digits rather than quotation marks.

How sentences, paragraphs and lines are detected

  • Sentences. A run of characters ending in a full stop, question mark or exclamation mark, plus any trailing run without one. Abbreviations such as e.g. and Dr. will therefore be over-counted, which is the standard limitation of every rule-based sentence splitter.
  • Paragraphs. Blocks separated by one or more blank lines. A single line break inside a paragraph does not start a new one.
  • Lines. Every newline, blank ones included, in text that is not entirely whitespace.

How characters are counted, four ways

This is the single largest source of disagreement between character counters, so WordBench shows all four numbers rather than picking one and hoping.

The same emoji, measured four ways. The thumbs-up with a medium skin tone is built from two code points joined by a modifier.
UnitWhat it measuresThumbs-up with skin tone
GraphemesUser-perceived characters. What a reader would point at and call one character.1
Code pointsUnicode scalar values. The base emoji plus its skin-tone modifier.2
UTF-16 unitsWhat JavaScript’s .length returns, and what many web forms enforce.4
UTF-8 bytesStorage and transmission size. What byte-based limits such as Bluesky’s second ceiling measure.8

The plain Characters figure on the counter is the UTF-16 length, because that is what most platforms enforce in the field itself. Where a platform counts something else, the limit pagescount in that platform’s own unit instead, and say which one it is. Platform limits were last verified on 23 July 2026.

X is the clearest example of why this matters. It counts weighted units: most Latin text costs 1, every emoji and CJK character costs 2, and any link costs a flat 23 regardless of length. A counter reporting plain characters against the 280 limit is wrong on all three counts.

The limits as open data

The limit table is also published as a dataset, generated from the same source as the pages at build time: limits.json and limits.csv. It has one row per field, 15 in all, each with the platform, the field, the limit as a whole number, the unit it is counted in, a note, the source document and its URL, and verified, the date the row was last checked (23 July 2026). The CSV follows RFC 4180, so a field that contains a comma is quoted. Both files are licensed CC BY 4.0: reuse them freely, with credit to WordBench.

How text is trimmed to fit a limit

When text runs over a limit on the word counter or the character counter, the row for that field shows where the text has to end and offers a copy trimmed to fit. That copy is the longest start of your text that is still within the limit, measured in the unit that field counts in: X weighted units for an X post, graphemes for a Bluesky post, segments for an SMS, characters (Unicode code points, the same count the limit bars use) for the other fields, and words or characters, whichever you picked, for a limit of your own.

The text is only ever cut between grapheme clusters, the user-perceived characters defined in UAX 29, so an emoji, a flag or a letter with a combining accent is kept or dropped whole. To find the cut, the length of the kept part doubles until it no longer fits (1, 3, 7, 15 graphemes and so on) and is then halved down, so even a long text is measured only a few dozen times. The search ends on a start that fits where one more grapheme would not.

The cut then moves back to the end of the last whole word, and the spaces before it are dropped, so no word is split in half. When not even the first word fits, as with one long link, the cut stays inside that word so there is still something to copy, and the row says so. For an SMS the limit is one segment, so the trimmed copy is sent as a single message in whichever encoding it needs. An automated check holds every trimmed copy to these rules: within the limit in the field’s own unit, one grapheme short of going over, never ending inside a grapheme and, in whole-word mode, never ending halfway through a word. The text in the editor is never changed; only the copy is shortened.

Reading time, speaking time and word length

Every benchmark figure the site states, with what it rests on. Where a figure is a convention rather than a measurement, the table says so instead of dressing it up as research.

Benchmark figures used across WordBench, with the basis for each and whether the source is peer reviewed.
ValueWhat it measuresBasisPeer reviewed
238words per minute, silent reading, adult, English non-fictionMeta-analysis of 190 studies covering 18,573 participants. This is the figure the counter uses for every reading-time estimate on the site. Brysbaert (2019), How many words do we read per minute? A review and meta-analysis of reading rate, Journal of Memory and LanguageYes
260words per minute, silent reading, adult, English fictionSame meta-analysis. Fiction runs faster, most likely because its words and sentences are shorter and more predictable than non-fiction. Brysbaert (2019), Journal of Memory and LanguageYes
183words per minute, reading English aloudBrysbaert's review also covers oral reading rate, which is slower than silent reading because speech has to be articulated rather than scanned. Brysbaert (2019), Journal of Memory and LanguageYes
130words per minute, presenting to a roomA conservative presentation pace, not a peer-reviewed benchmark. It is deliberately slower than Brysbaert's 183 wpm oral reading rate because a presenter pauses, breathes and lets a point land. Treat it as a rough planning figure for a script, not as a measurement. WordBench convention, documented on /methodologyNo
5characters per word, typing-test conventionA definition, not a measurement. Typing tests needed a unit that did not depend on which words were typed, so they fixed a word at five characters including the space after it. Words per minute, WikipediaNo
4.7characters per English word, excluding the space after itA corpus measurement rather than a convention. Add the trailing space and a word costs about 5.7 characters in running text, which is why 500 characters lands nearer 88 words than 100. Garbe, The average word length in English language is 4.7No

Reading time is word count divided by 238, rendered as minutes and seconds. Speaking time is word count divided by 130. Both scale linearly, so both are estimates and neither accounts for how hard the text is to read.

Words to pages

The words-per-page figures behind the words per page guide assume US Letter with one-inch margins, and vary with typeface, point size and line spacing.

Words that fit on one page, by typeface, size and line spacing. Every figure is rounded to the nearest 25 and is an estimate, not a constant.
TypefaceSizeSpacingWords per pageWhy
Times New Roman12ptdouble250The standard manuscript page. 250 words is the figure publishers, journals and university departments use when they ask for a page count.
Times New Roman12ptsingle500The same page with the line spacing halved holds twice the lines, so twice the words.
Times New Roman12pt1.5333Between the two, proportional to line spacing.
Arial12ptdouble225Arial is wider than Times at the same point size, so fewer words fit on a line.
Arial12ptsingle450Arial, single spaced, same margins.
Calibri11ptdouble275The Word default. Smaller point size and a narrow face fit more words than 12pt Times.
Calibri11ptsingle550The Word default, single spaced.
Courier New12ptdouble250Courier is monospaced, which is precisely why the 250-word page became the standard: every page holds the same amount.

The 250-word double-spaced page is a publishing convention, not a physical constant. Real pages vary with the words you use: a page of dialogue holds far fewer words than a page of solid prose. Every figure in this table is rounded to the nearest 25 and should be read as an estimate. Manuscript format, Wikipedia

Readability

Two published formulas, applied exactly as published. The differentiator is not the score, it is that you can check it.

  • Flesch Reading Ease = 206.835 minus 1.015 times (words per sentence) minus 84.6 times (syllables per word). Higher is easier; 60 to 70 is plain English.
  • Flesch-Kincaid Grade Level = 0.39 times (words per sentence) plus 11.8 times (syllables per word) minus 15.59. The result is a US school grade.

Syllables are counted with the standard vowel-group heuristic: count runs of vowels, drop a silent trailing e, keep a trailing le after a consonant as its own syllable, and never return less than one. It is a heuristic and not a pronunciation dictionary, so it gets words such as business and queue wrong, exactly like every other implementation that does not ship a dictionary. Under 100 words the scores are marked unreliable, because one long sentence swings them by ten points.

Dale-Chall is deliberately not implemented. It needs the 3,000-word list of familiar words, and shipping a truncated or guessed version of that list would produce a number that looks authoritative and is not.

Keyword density and the full stop-word list

Density is the count of a term divided by the total number of words of two characters or more, as a percentage. Words are lowercased and stripped to letters, digits and apostrophes first. Single characters are excluded.

These 73 words are filtered out. This is the complete list, not a sample:

a about an and are as at be been being but by can could did do does for from had has have he her here his how i if in into is it its me my no not of on or our out she should so than that the their them then there these they this those to up us was we were what when where which who will with would you your

The word frequency counter counts these words by default, because for some purposes, such as checking whether a draft leans on the and that, they are exactly what you want to see. Its Skip common words option takes out a word on this list, or a phrase made only of these words.

How words and phrases are counted for frequency

The word frequency counter splits the text into sentences first. A sentence ends at a question mark, an exclamation mark, a line break, or a full stop that is not followed by a digit. Commas, colons and semicolons do not end one.

Within a sentence, a word is a run of letters, digits, apostrophes and hyphens, and a number written with a separator, such as 3.5 or 1,000, is one word. Apostrophes and hyphens at the edge of a word are dropped; inside a word, as in don’t and follow-up, they are kept. With Ignore case on, every word is lowercased before counting.

A 2-word or 3-word phrase, also called an n-gram, is any run of two or three consecutive words inside one sentence, so the last word of one sentence and the first word of the next never form a phrase. Every position counts, overlapping phrases included. Share is a count divided by the total for that phrase length, entries with the same count share a rank, and ties are listed alphabetically. Skip common words removes an entry only when every word in it is on the stop-word list above, and the shares are still worked out against the full total.

How lists are sorted

A to Z and Z to A on Alphabetize a Listcompare lines with the browser’s Unicode collation (Intl.Collator) in numeric mode, which is natural sort order: a run of digits is compared by its value, so item 2 comes before item 10. Capitals and accents are ignored, so lines that differ only in case keep the order you gave them. With Case sensitive on, those lines are ordered capital first, Apple before apple, while the list as a whole stays alphabetical.

Ignore articles compares each line as if a leading the, a or an were not there, but only when another word follows it, so The Beatles is filed under B. Sort by last name compares the last word of each line first, with any punctuation around it removed, and the words before it second, so Jane Doe is filed under D. Both options change only the comparison: every line is printed exactly as you typed it. Lines that still compare equal keep their input order.

Remove empty lines drops blank and whitespace-only lines before sorting. Shortest first and Longest first compare line lengths in UTF-16 code units, the length JavaScript reports, and Reverse order flips the list without comparing anything.

How line breaks and extra spaces are removed

Join lines on Remove Line Breaks and Extra Spaces turns each line break, together with the spaces and tabs around it, into a single space, so two words are never run together. Join everything does that for every line break in the text. Keep paragraphs first splits the text into paragraphs at every blank line, where a line that holds only spaces or tabs counts as blank, then joins the lines inside each paragraph and puts exactly one blank line between paragraphs. Windows and old Mac line endings are treated as one line break.

Collapse extra spaces then turns any run of two or more spaces or tabs into one space, removes spaces and tabs at the start and end of every line, and reduces three or more line breaks in a row to one blank line. The line under the result reports how many line breaks the text lost and how many spaces and tabs were removed; the spaces that replace joined line breaks are new, so they are not subtracted from that count.

Where the upside down and small caps tables come from

Both tools work from a fixed table of characters, and the tables on the upside down text and small caps pages are generated from those same tables when the site is built. Every code point is read from the character itself with codePointAt rather than typed in, so a table can never list a character the tool does not output.

The upside down table has 87 entries, and every result is exactly one code point. A character without a convincing single-character lookalike is left out rather than faked: of the 94 printable ASCII characters, WordBench leaves $, *, ;, @, Q, ^ and ` as typed. The small caps table has 25 letters; WordBench writes q as an ordinary capital Q and x as an ordinary lowercase x. Mirror mode uses its own, shorter table of mirrored lookalikes, and leaves letters that are already symmetrical, such as A, H and O, as they are.

What never happens to your text

Every function described on this page runs as JavaScript in your own browser. There is no backend, no database, no API endpoint and no logging. Your text is not uploaded and not sent to a third party, and there is nothing to opt out of because there is nothing collecting anything. The only copies are the ones kept in your own browser: the text each tool keeps in local storage so a refresh does not lose it, which Clear deletes, and any drafts you save on the word counter, which live in this browser's IndexedDB until you delete them. Files you export or download are built inside the page and handed straight to your browser. Details on the privacy page.

Frequently asked questions

Why does my word count differ from Microsoft Word? Because a word is a definition, not a fact. WordBench counts any unbroken run of non-whitespace characters, so an em-dash between two words without spaces counts as one word here and often as two in Word. Numbers, standalone punctuation and emoji separated by spaces each count as one word here. Neither is wrong; they answer slightly different questions.

Why does my word count differ from Microsoft Word?

Because a word is a definition, not a fact. WordBench counts any unbroken run of non-whitespace characters, so an em-dash between two words without spaces counts as one word here and often as two in Word. Numbers, standalone punctuation and emoji separated by spaces each count as one word here. Neither is wrong; they answer slightly different questions.

Why does my character count differ from another counter?

Almost always because the two tools count different units. WordBench shows four numbers side by side: graphemes (what a reader sees), code points, UTF-16 units (what JavaScript's .length returns) and UTF-8 bytes (what storage costs). A thumbs-up with a skin tone is one grapheme, two code points, four UTF-16 units and eight UTF-8 bytes. A counter that reports only one of these will disagree with a counter that reports another.

Which reading speed does WordBench use?

238 words per minute for silent reading, from Brysbaert's 2019 meta-analysis of 190 studies and 18,573 participants. Speaking time uses 130 words per minute, which is a presentation-pace convention rather than a research figure, and this page says so rather than implying a citation it does not have.

Which words are excluded from keyword density?

The full stop-word list is published on this page, all of it. A density figure calculated against a word list nobody can see is not a reproducible number, so the list is shown rather than described.

Is any of my text sent to a server?

No. Every function described on this page runs as JavaScript in your own browser tab. There is no backend, no API and no logging. Each tool keeps your text in this browser's local storage so a refresh does not lose it, and Clear deletes that copy.

Sources