Word & Character Counter
Count words, characters, Unicode grapheme clusters, sentences, paragraphs, reading/speaking duration, and platform limits instantly in your browser.
Adjustable Reading & Speaking Speeds (WPM)
Default 238 WPM (Brysbaert 2019 adult non-fiction benchmark)
Default 140 WPM (conversational & presentation pace)
Platform Character-Limit Progress Indicators
Browser-local processing: Text is analyzed directly in memory and is not sent to PeekAndDo servers or stored in browser storage. Standard device/browser security (such as clipboard access or installed extensions) still applies.
Unicode Character & Encoding Breakdown
Intl.SegmenterTop Word Frequency & Density
Enter at least two words to view frequency breakdown.
Counting Methodology & Unicode Segmentation
The Word & Character Counter measures total words, characters with and without spaces, Unicode grapheme clusters, scalar code points, UTF-16 code units, sentences, paragraphs, reading/speaking time, and platform limit utilization.
Text is segmented using the ECMAScript Intl.Segmenter API (implementing Unicode Standard Annex #29) where available, with a deterministic Unicode property-escape fallback. User-perceived characters are counted as extended grapheme clusters so accented characters and multi-person emojis count as single visual characters, while scalar Unicode code points and UTF-16 code units are reported alongside as explicit secondary metrics.
Assumptions & Counting Rules
- Primary character counts measure Unicode extended grapheme clusters (UAX #29), matching human visual perception of characters.
- Secondary encoding metrics explicitly distinguish Unicode scalar code points (Array.from(text).length) and UTF-16 code units (text.length).
- Default silent reading speed is 238 words per minute (Brysbaert 2019 meta-analysis for adult non-fiction reading); user-adjustable from 1 to 2,000 WPM.
- Default speaking speed is 140 words per minute (conversational and presentation benchmark); user-adjustable from 1 to 2,000 WPM.
- Whitespace normalization only executes when the user explicitly activates 'Normalize Whitespace' and never modifies text silently.
Text: "Hello world! π¨βπ©βπ§βπ¦" (two words plus one compound family emoji)
Words (Intl.Segmenter word-like tokens): 2 words ('Hello', 'world').
Unicode Grapheme Clusters (with spaces): 14 characters (12 ASCII chars + 1 space + 1 family emoji cluster).
Unicode Code Points: 20 scalar values (the family emoji consists of 4 person code points joined by 3 Zero-Width Joiners = 7 code points).
UTF-16 Code Units: 24 units (each of the 4 person emojis is a surrogate pair of 2 UTF-16 units).
Result: 2 words, 14 grapheme clusters (12 without spaces), 20 code points, 24 UTF-16 code units.
A 476-word article read silently at 238 WPM and spoken aloud at 140 WPM.
Silent reading duration: (476 Γ· 238) Γ 60 = 120 seconds = 2m 0s.
Speaking duration: ceil((476 Γ· 140) Γ 60) = ceil(204) = 204 seconds = 3m 24s.
Result: Reading time: 2m | Speaking time: 3m 24s.
Authoritative Standards & Sources
- Unicode Standard Annex #29: Unicode Text Segmentation β Unicode Consortium
- How many words do we read per minute? A review and meta-analysis of reading rate (2019) β Journal of Memory and Language (Marc Brysbaert)
- Counting Characters on X (Developer Platform Documentation) β X Developer Platform
Frequently Asked Questions
Why do Unicode grapheme clusters, code points, and UTF-16 code units differ?
A single visual character (grapheme cluster) such as a family emoji (π¨βπ©βπ§βπ¦) or a letter with combining accents is perceived by readers as 1 character, but is composed of multiple Unicode scalar code points and even more 16-bit UTF-16 code units in JavaScript.
How are reading time and speaking time calculated?
Reading time divides total words by the reading speed (default 238 WPM based on Marc Brysbaert's 2019 meta-analysis of adult reading rates). Speaking time divides total words by the speaking speed (default 140 WPM for clear presentations). Both speeds can be customized.
Does this tool save or transmit my text?
No. Text analysis runs locally in your browser's memory without sending your text to PeekAndDo servers or saving it to localStorage. Keep in mind that standard operating-system clipboard history or third-party browser extensions you have installed operate under your device's own environment.