Everyday · TextRuns locally

Word & Character Counter

Paste or type text to see useful writing statistics. Foxger counts words, visible characters, sentences, paragraphs, lines, and more locally in your browser.

New to word counts? Read the step-by-step beginner guide

Private writing statistics

Count your text

Statistics refresh shortly after you pause typing. No submission is needed.

500,000 character limit

Text remains in this page only until you clear it, replace it, or leave the page.

0 / 500,000 characters

Add text to begin counting.

Writing statistics

Values update together after the short counting delay.

Words
0
Grapheme clusters (user-perceived characters)
0
Characters including whitespace
0
Characters excluding whitespace
0
Sentences
0
Paragraphs
0
Lines
0
UTF-8 bytes
0
Unique words
0
Estimated reading time
0 min
Estimated speaking time
0 min
Advanced settings

Locale helps the browser find language-appropriate boundaries. Speeds affect only the two time estimates.

Enter a BCP 47 language tag, or leave empty to use the browser locale.

Browser locale will be used.

Words per minute, from 50 to 1,000.

Words per minute, from 50 to 1,000.

Foxger will use this browser’s text-segmentation support when counting begins.

Try the built-in example

Two short paragraphs, several kinds of text

Café notes help 3 students plan a project. 🙂 They read together.

Tomorrow, the group will share its ideas and ask questions.

The example includes punctuation, the number 3, an emoji, and the accented wordCafé. Select Load example to let your browser calculate its totals.

Honest limits

Counts are useful measurements, not writing judgments

  • Word boundaries and sentence detection can differ by language and browser.
  • Another editor may use different rules for punctuation, emoji, or hyphenated words.
  • Reading and speaking times are estimates based on the selected speeds.
  • An emoji may contain several code points while appearing as one grapheme.
  • Foxger does not judge grammar, spelling, meaning, or writing quality.
  • Foxger does not save the entered text.
Understand the totals

Learn what each statistic means

The guide explains words, graphemes, whitespace, bytes, multilingual boundaries, and time estimates in plain language. It also shows why two programs can report different totals.

New to word counts? Read the step-by-step guide
Step-by-step guide

Understand word and character counts from the beginning

This guide explains each total in the counter, how language can change boundaries, and how to read estimates without treating them as exact predictions. No previous Unicode or writing software knowledge is needed.

Back to the counter
Beginner guide contents
Start here

Word counting in one minute

A word counter measures pieces of text. Paste a draft into the box near the top of this page, pause briefly, and read the statistics. The input is not rewritten.

The word total answers one question, while character, sentence, paragraph, line, byte, and time totals answer other questions. Start with the limit or goal you were given, then choose the matching statistic.

Choose the right task

Do you need this tool?

The counter helps when you need length or structure measurements. It does not review the writing.

It may help when

  • an assignment has a word or character limit;
  • a speech needs a rough duration;
  • a publishing field has a text-length limit;
  • you need line, paragraph, or UTF-8 byte totals;
  • you want to compare the structure of two drafts.

It is not the whole task when

  • you need spelling or grammar feedback;
  • you need to check facts or meaning;
  • a school or publisher defines its own counting rules;
  • you need an exact speaking time for a particular person;
  • you need to edit, translate, or summarize the text.
Word boundaries

What counts as a word?

Foxger asks Intl.Segmenter, when available, to divide text into word-like parts for the resolved locale. It does not count by splitting only at ordinary spaces. That matters for punctuation and for languages that do not place a space between every word.

Repeated spacesone   two still has two word-like parts.
ApostrophesA browser may keep don’t together as one word-like segment.
HyphensSoftware can disagree about whether well-known is one or two words.
NumbersA number such as 2026 can be marked as word-like.

When Intl.Segmenter is unavailable, Foxger uses a smaller local fallback based on letters, marks, numbers, and internal apostrophes. The tool identifies that fallback in Advanced settings.

Text units

Character versus visible character

People often say “character” for anything typed. Computers need more precise units. Foxger’sVisible characters statistic counts grapheme clusters: units a reader usually sees as one character.

One accented letter

é can be stored as one code point or as e plus a combining accent. Both can appear as one grapheme.

One family emoji

👨‍👩‍👧‍👦 joins several people with invisible joiners, yet a reader commonly sees one family symbol.

Characters including whitespace and excluding whitespacecount Unicode code points. They are useful technical totals, but the visible-character total is the better first choice when a displayed character should count once.

Invisible structure

Spaces and whitespace

Whitespace is the group of characters used to separate or arrange text. It includes ordinary spaces, tabs, and line breaks. Some writing systems also use less familiar space characters.

  • Including whitespace counts those characters.
  • Excluding whitespace leaves them out.
  • Visible characters still counts a space as a grapheme boundary unit.
  • Words do not increase merely because several spaces appear together.
Sentence boundaries

Sentences

A sentence is a unit of expression, often ending with a full stop, question mark, or exclamation mark. The browser uses language-sensitive boundary rules, not punctuation alone.

Sentence detection remains an estimate. Abbreviations such as Dr., initials, decimal numbers, dialogue punctuation, and incomplete notes can be interpreted differently by different programs.

Document structure

Paragraphs and lines

A line is text between line breaks. Foxger counts a non-empty text as one line, then adds a line for each line break. A final line break therefore creates another empty line.

A paragraph is a non-empty block separated from another block by at least one blank line. A single line break inside a block changes the line total but keeps one paragraph.

First paragraph, line one.
Line two of the same paragraph.

Second paragraph.
Encoded size

Bytes and file size

A byte measures digital data. Foxger uses TextEncoder to measure the input after UTF-8 encoding. Ordinary English letters often need one byte each, while accented letters, non-Latin writing, and emoji can need more.

The byte total measures the text content, not a complete saved file. A file can also contain metadata or a byte-order mark, and another encoding can produce a different size.

Planning time

Reading and speaking estimates

Foxger divides the word total by a speed in words per minute. The default reading speed is 225 words per minute. The default speaking speed is 130 words per minute.

Zero words produces 0 min. Short text produces Less than 1 minute. Longer results round upward to a readable whole-minute estimate. You can enter a speed from 50 to 1,000 under Advanced settings.

Read every control

Understand every statistic

These labels and controls appear in the counter near the top of the page.

Text to count

Accepts the original text. Counting does not replace or reformat it.

Words

Counts word-like segments for the resolved locale.

Visible characters

Counts grapheme clusters, including combined emoji and accented forms as readers commonly perceive them.

Characters including whitespace

Counts Unicode code points, including spaces, tabs, and line breaks.

Characters excluding whitespace

Counts the same code-point units after leaving out whitespace.

Sentences

Counts language-sensitive sentence segments that contain non-whitespace text.

Paragraphs and lines

Paragraphs use blank-line separation. Lines use every line break.

UTF-8 bytes

Measures how many bytes the entered text requires in UTF-8.

Unique words

Counts distinct word-like segments without treating letter case as a difference. Unicode-equivalent accents are normalized for this comparison.

Estimated times

Divide words by the reading and speaking speeds shown in Advanced settings.

Locale

Accepts an optional BCP 47 tag such as en, es, ja, or th. The resolved locale is shown below the field.

Copy, Download, Load example, and Clear

Copy and Download use the unchanged input. Load example replaces the input with the documented example. Clear removes the input after you select it.

One example throughout

Complete example

The tool and this guide use the following text:

Café notes help 3 students plan a project. 🙂 They read together.

Tomorrow, the group will share its ideas and ask questions.

It has two paragraphs and includes punctuation, the number 3, an emoji, and an accented letter. Select Load example in the counter to see totals from your browser.

Follow the task

Step-by-step walkthrough

Use these steps with the complete example or your own text.

  1. Choose the text you want to measure

    Use a draft, speech, homework answer, message, or other text whose length you need to understand. Keep a separate copy when the original matters.

  2. Paste or type it in the input

    Place the text in the “Text to count” box. The counter waits briefly after typing, then refreshes every statistic together.

  3. Read the word and visible-character totals

    Words help with assignment or publishing limits. Visible characters are useful when one displayed emoji or accented letter should count as one unit.

  4. Check structure totals

    Sentences, paragraphs, and lines describe different parts of the layout. A line break is not automatically a new paragraph.

  5. Open Advanced settings when language matters

    Enter a locale such as en, es, ja, or th. Leave the field empty when the browser locale is suitable.

  6. Adjust time estimates when needed

    Change reading or speaking words per minute only when you have a useful speed to test. The range is 50 to 1,000.

  7. Compare the result with the requirement

    Check which statistic the requirement names. A “500-word limit” is different from a “500-character limit.”

  8. Copy or download the original text

    Copy sends the unchanged input to your clipboard. Download creates a local UTF-8 text file named foxger-word-counter-text.txt.

Back to the counter

Compare carefully

Why different programs may show different totals

Text counting has choices. Two programs can disagree without either program losing text.

  • One program may split hyphenated words while another keeps them together.
  • Apostrophes, numbers, web addresses, and abbreviations need boundary decisions.
  • Sentence rules can interpret initials and punctuation differently.
  • Emoji and combining marks can be counted as code points or graphemes.
  • Language dictionaries and browser segmentation data can differ by version.
  • A school, publisher, or social platform may define a custom rule.

When a formal limit matters, use the counting method named by the person or system that set it.

Language-sensitive boundaries

Multilingual text

Languages do not all mark words and sentences in the same way. Japanese, Chinese, and Thai can need boundary rules that do not depend on ordinary spaces. Arabic and other right-to-left scripts also remain valid Unicode input.

Enter the main language’s locale under Advanced settings when it is known. Mixed-language text still has one selected locale, so no single choice describes every part equally well. Foxger does not install a large language polyfill in this release.

Avoid confusion

Common mistakes

  • Reading the wrong totalCheck whether the task asks for words, visible characters, all characters, or bytes.
  • Treating spaces as wordsSpaces separate many words, but a run of spaces does not create extra words.
  • Assuming every line is a paragraphA paragraph is normally separated by a blank line; a single line break can remain inside one paragraph.
  • Treating code points as visible charactersA combined emoji or accented letter may use several code points while appearing as one grapheme.
  • Using the time estimate as a deadlineThe estimate is a planning aid based on a selected average speed.
  • Expecting identical totals everywhereDifferent software can use different language and punctuation rules.
  • Choosing a locale by country aloneA locale begins with a language, such as en or es. A region may follow, as in en-GB.
  • Expecting writing feedbackA mechanical count cannot decide whether the writing is accurate, clear, or suitable.
When a result surprises you

Troubleshooting

The statistics do not update

Pause briefly after typing. If nothing changes, confirm JavaScript is enabled and reload the page. The guide remains readable without JavaScript.

The locale is rejected

Use a BCP 47 tag such as en or en-GB, with a hyphen rather than an underscore. Foxger shows the fallback locale it used.

The count differs from another editor

Check the selected locale and the kind of statistic. Apostrophes, hyphens, emoji, abbreviations, and language rules are common reasons for a difference.

The time estimate looks too short or long

Open Advanced settings and enter a more suitable words-per-minute value from 50 to 1,000. Treat the result as a planning estimate.

Counting pauses for a large input

The hard limit is 500,000 characters. Your text remains in the input. Copy, download, or shorten it to resume counting.

Words used in this guide

Glossary

Word
A word-like segment found using the selected locale and the browser’s segmentation rules.
Character
A general term for a text unit. Software may mean a grapheme, code point, or code unit, so check the definition beside a limit.
Grapheme
A user-perceived character: the unit a reader commonly sees as one character.
Code point
A numbered value in Unicode. Several code points can combine into one visible grapheme.
Whitespace
Characters used for spacing or layout, including spaces, tabs, and line breaks.
Sentence
A segment the browser identifies as a sentence using language-sensitive rules and punctuation clues.
Paragraph
One or more non-empty lines separated from another block by at least one blank line.
Line
Text between line-break characters. A final line break creates an additional empty line in the line total.
Byte
A unit used to measure encoded digital data. Different characters can require different numbers of UTF-8 bytes.
Locale
A language tag, sometimes with script or region information, used by software to apply language-sensitive rules.
Reading speed
The number of words per minute used to estimate how long reading may take.
Unicode
A standard that assigns code points to text used across many languages and symbol systems.
Try it yourself

Practice exercise

Open the exercise
  1. Select Load example in the counter.
  2. Find the words, visible characters, paragraphs, lines, and UTF-8 bytes.
  3. Add the family emoji 👨‍👩‍👧‍👦 to the end.
  4. Notice how the visible-character and byte totals change by different amounts.
  5. Set reading speed to 100 words per minute and review the estimate.
  6. Clear the text when the exercise is complete.

Question: Why can one new visible symbol add several code points and bytes?

Answer: A displayed emoji can be a grapheme built from several Unicode code points, and each code point needs bytes when encoded as UTF-8.

Before using a total

Final checklist

  • I know whether the requirement means words, visible characters, all characters, or bytes.
  • I selected a useful locale or accepted the browser locale.
  • I understand that sentence and word boundaries can vary.
  • I treat reading and speaking times as estimates.
  • I checked the highlighted warnings for locale, speed, or input size.
  • I kept a separate copy when the original text matters.
  • I do not expect the counter to judge facts, grammar, spelling, or meaning.
Back to the Word & Character Counter
Common questions

Word and character counter FAQ

What does Foxger count as a word?

Foxger uses the browser’s locale-sensitive Intl.Segmenter word boundaries when available and counts segments the browser marks as word-like. An older browser receives a documented local fallback, so another editor may show a slightly different total.

What is a visible character or grapheme?

A grapheme is what a reader usually sees as one character. One emoji or an accented letter can be built from several Unicode code points while still appearing as one visible character.

Why are there two other character totals?

Characters including whitespace count Unicode code points such as letters, punctuation, spaces, and line breaks. Characters excluding whitespace leave out spaces, tabs, and line breaks. The visible-character total instead follows grapheme boundaries.

Why can Foxger disagree with Microsoft Word or Google Docs?

Programs can use different rules for apostrophes, hyphens, numbers, emoji, abbreviations, and languages without spaces. Browser versions and selected locales can also affect segmentation.

How are reading and speaking times estimated?

Foxger divides the word total by the selected speed. The defaults are 225 words per minute for reading and 130 for speaking. These are planning estimates, not measurements of a particular person.

Does the counter judge spelling or writing quality?

No. It reports mechanical statistics. It does not check facts, grammar, spelling, tone, clarity, or whether the writing suits its audience.

Is my text uploaded or saved?

No. Counting runs locally in your browser. Foxger does not upload the text, add it to the page URL, or store it in local storage, session storage, cookies, or a database.

What happens with very large text?

Foxger warns after 100,000 characters and stops counting above 500,000 characters to protect the browser tab. The entered text remains in the input so you can shorten, copy, or download it.

Back to the counter

Optional support

Help keep Foxger useful

Foxger tools are free, private, and built without display ads. Optional support helps keep them maintained, tested, and documented.

Support Foxger