Skip to main content

Character Counter

Count characters with platform-specific limits for Twitter, Instagram and more.

Reviewed by · Last reviewed

0
Characters
0
No Spaces
0
Words
0 / 280 characters280 remaining

How to Use the Character Counter

  1. Paste or type your text into the input box at the top. The counters begin updating from the very first keystroke.
  2. Read the live stats displayed immediately beneath the input: total characters, characters excluding spaces, total words, sentences, and paragraphs.
  3. Select a platform preset to pin a character limit. Twitter/X (280), Instagram bio (150), and Meta Description (160) are included out of the box.
  4. Or enter a custom limit in the custom-limit field when you are targeting a less common cap, such as an SMS concatenation boundary or a form-field max-length.
  5. Watch the progress bar. It shifts from green to yellow around 80 percent of the limit and to red when you exceed it, so over-length copy is obvious at a glance.

What This Counter Measures and Why It Matters

The character count is computed with JavaScript's string.length, which returns the number of UTF-16 code units in the string. That detail matters: an emoji such as the face-with-tears (U+1F602) occupies two UTF-16 code units in a browser engine, so it counts as two characters, exactly the way Twitter, Facebook, and most SMS gateways count it. The "characters without spaces" statistic runs a regex replace of /\\s/g on the input and measures the filtered length, which aligns with Microsoft Word's "characters (no spaces)" metric.

Words are counted by splitting on whitespace and filtering empty tokens, giving a result that matches the built-in word counters in Word, Google Docs, and Pages to within one or two on normal prose. Sentences are detected by looking for terminators (., ?, !) followed by a space or end-of-string. All of this runs synchronously on each keystroke through a React-style reactive update, with no debouncing needed because the operations are O(n) on string length.

Where Per-Character Limits Show Up

  • Twitter/X enforces 280 characters per tweet for standard accounts and up to 25,000 for X Premium, with URLs shortened to 23 characters regardless of their real length.
  • Instagram bios cap at 150 characters, and this is a hard limit: the app truncates at exactly 150 without any "see more" expansion.
  • Meta descriptions for SEO render around 155 to 160 characters in Google desktop search results, so Google's own developer documentation advises staying under that cap.
  • SMS messages are 160 characters for a single GSM-7 encoded part; going longer splits the message into concatenated segments that bill separately.
  • LinkedIn headlines allow 220 characters as of the 2024 update, while the profile summary allows 2,600.
  • YouTube video titles permit 100 characters, and descriptions 5,000; shorts titles use the same 100-character rule as long-form.

Edge Cases That Trip Up Character Counting

Emoji are the biggest source of surprise. A zero-width-joiner family emoji like the man-woman-girl-boy sequence is actually a chain of 7 Unicode code points joined by ZWJ characters (U+200D), which means string.length returns 11. Platforms count these differently: Twitter treats most emoji as 2 characters via a "weighted character" system documented in the X developer docs, while SMS gateways may count each code point individually. Combining diacritics also matter: the letter "é" can be a single precomposed character (U+00E9) or two code points (e + U+0301 combining acute), and the second form takes twice the space in .length.

Surrogate pairs cause a subtler bug. The length property counts UTF-16 code units, not Unicode code points, so "𝐇" (U+1D407, Mathematical Bold H) counts as 2 even though a user sees one glyph. For pixel-precise counting of visible graphemes, the modern Intl.Segmenter API with granularity: 'grapheme' is the correct tool, but most platforms intentionally use UTF-16 length because it aligns with their storage cost.

For a primer on how words are counted alongside characters, read about word counting rules and why different tools disagree.

Character Limits in the Unicode Standard

A "character" is an informal word that papers over several technical distinctions. The Unicode Standard (currently version 15.1) defines code points in the range U+0000 to U+10FFFF, of which more than 150,000 are assigned. A code point is not the same as a grapheme cluster (what users perceive as a character) or a UTF-16 code unit (what string.length measures). Unicode Technical Standard #29 specifies how code points combine into extended grapheme clusters and is the reference implementation behind Intl.Segmenter. Meanwhile, RFC 3629 defines UTF-8 encoding, which is what most platforms store on disk. This tool counts UTF-16 code units because that is what the JavaScript engine exposes and what nearly every social platform uses to enforce its cap.

How This Compares to Other Counters

Microsoft Word and Google Docs both show character counts, but they miss the live per-platform feedback that is critical when writing tweets or meta descriptions. Dedicated SEO suites like Yoast and Rank Math include a meta-description counter but only inside a WordPress environment. Command-line tools such as wc -c count bytes, not characters, so a UTF-8 multi-byte emoji will report 4 when you expected 1. Python's len() counts code points (better than UTF-16 length but still not graphemes). For quick platform-specific drafting, a lightweight browser counter with presets is usually the fastest option, and it avoids the privacy concern of pasting draft copy into a spreadsheet plugin that may sync to the cloud.

Frequently Asked Questions

Does character count include spaces by definition?

There are two standard counts: characters with spaces and characters without spaces (sometimes called characters no spaces or CNS). Microsoft Word, Google Docs, and most online counters report both numbers. The default character count by convention includes spaces - "Hello world" is 11 characters with spaces, 10 without. When a publisher or social platform specifies a character limit (Twitter 280, meta description 160, SMS 160), they almost always mean characters with spaces.

What is the difference between characters with spaces and characters without spaces?

Characters with spaces counts every character in the text including ASCII spaces, tabs, and newlines. Characters without spaces removes whitespace from the count and reports only printing glyphs and punctuation. The difference matters for billing (some printing services bill per non-space character) and for content fields where whitespace is normalized server-side. This tool shows both counts side by side.

Does word count include spaces?

Word count counts tokens (groups of non-whitespace characters), not individual characters. Spaces serve as the separator between words but are not counted themselves. So "Hello world" has 2 words, regardless of how many spaces are between them. If you mean character count, that is a separate metric and yes, characters with spaces is the default.

How does this counter handle emoji and Unicode surrogate pairs?

It uses JavaScript string length, the number of UTF-16 code units. Most single emoji take 2 units, while zero-width-joiner sequences (families, skin-tone modifiers) can take 7 or more. This matches how Twitter/X and SMS gateways bill. For the visual grapheme count, the Intl.Segmenter API is the right tool, but almost no platform bills that way.

Why does my Twitter draft hit 280 before the counter says so?

Twitter/X uses weighted character counting. CJK characters (Chinese, Japanese, Korean) are counted as 2 each, and URLs are always 23 because Twitter shortens them with t.co. For plain English, our counter matches Twitter exactly. If your draft includes CJK or URLs, expect Twitter to report a higher number.

Is the 160-character meta description rule still accurate in 2026?

Google does not publish a hard limit. The 155-160 character advice comes from measuring how much of the tag Google renders in a desktop snippet. Mobile snippets often show less (around 120), and Google will sometimes rewrite or ignore your meta entirely. Pin 155 as a safe desktop cap and write the first 120 characters to stand alone on mobile.

Does the counter include hidden characters like zero-width spaces?

Yes. Any character is counted, including zero-width space (U+200B), zero-width non-joiner (U+200C), byte-order mark (U+FEFF), and ideographic space (U+3000). CMS editors and PDF copy operations often insert hidden characters that pad your count. If counts look wrong, scan for hidden whitespace with a regex like <code>[\u200B-\u200D\uFEFF]</code>.

How accurate is the sentence counter on complex punctuation?

It recognizes period, question mark, and exclamation mark as sentence terminators when followed by a space or end-of-string. Abbreviations like "Dr." and "e.g." inflate the count because every period looks like a sentence end. Ellipses count as one sentence end because consecutive terminators merge. For precise linguistic segmentation, a Python NLP tool like spaCy is better.

Does my text ever leave my device?

No. The counter runs entirely inside your browser's JavaScript engine. Each keystroke triggers a local string-length calculation; no fetch call, no WebSocket, no service worker intercepts the text. Open DevTools Network and confirm that typing a 5,000-character draft produces zero network activity. This matters when drafting confidential press releases or legal filings.

Why does the character count differ between this tool and Microsoft Word?

Word counts graphemes (what you see), while this tool counts UTF-16 code units (what platforms bill). For pure ASCII prose the two agree exactly. For emoji-heavy text, Word reports fewer characters because it sees one emoji as one grapheme and JavaScript sees it as 2 or more code units. Combining accents can also cause small divergences.

Can I use a custom limit for a form that allows, say, 500 characters?

Yes. The Custom Limit field accepts any positive integer. Enter 500 and the progress bar recalibrates so that 400 is yellow and 501 is red. This is useful for CRM form fields, an ATS that caps resume summary at 2,000 characters, or a ticketing description field. The preset list is a starting point.

How does the counter treat newlines and tab characters?

Newlines (<code>\n</code>, <code>\r\n</code>) and tabs (<code>\t</code>) count as one character each in the total and are removed in the "no spaces" count. On SMS, a literal newline adds one character to the 160-cap segment. Markdown and some WYSIWYG editors insert two spaces plus a newline for soft breaks, which is three characters of overhead per break.

Why are words sometimes off by one compared to Google Docs?

Google Docs applies locale-specific rules and treats certain hyphens as word boundaries. Our counter splits strictly on whitespace, so "state-of-the-art" counts as one word here and three in Docs if its dictionary decides the hyphens are breaks. For blog-length prose the difference is under 1 percent, and no universal rule exists.

Does the paragraph counter respect blank lines?

Yes. A paragraph is a run of non-empty lines separated from the next run by one or more blank lines. This matches the Markdown paragraph rule in the CommonMark specification and how most CMSes render body copy. A document with single newlines for line breaks (terminal output paste) will be seen as one paragraph.

More Text Tools