Character Counter — Twitter, SMS, meta tag limits
Paste any text to see its character count alongside live progress bars for Twitter / X (280), SMS (160 GSM-7 / 70 UCS-2), meta description (160), Instagram (2,200), LinkedIn (3,000) and more. Three counting methods. Sources cited. No signup, no ads.
How it works
The counter runs three independent character-counting passes over your text, computes SMS segmentation under the GSM 03.38 standard, and applies each platform's documented limit to the correct count. Every measurement is a pure function with no side effects; nothing leaves your browser.
- UTF-16 code units. The value of
text.lengthin JavaScript. This is what Twitter / X counts for Latin text, what SMS gateways measure in UCS-2 mode, and what most APIs use in their limits. A second method walks the string by Unicode iterator and sums each scalar value's code-unit length; when the two methods agree, the "verified" badge lights up. - Unicode code points. Each Unicode scalar value counted once, computed by iterating the string with
for...of. An emoji like 😀 is one code point but two UTF-16 units; a regional-indicator pair like 🇱🇰 is two code points but one grapheme. Use this number when a system documents its limit in "characters" without specifying an encoding. - Grapheme clusters. Computed via
Intl.Segmenterwith grapheme granularity (Unicode TR-29). One grapheme is what a reader perceives as one character — including flag emoji, skin-tone modified emoji, and zero-width-joiner sequences. Twitter / X and Bluesky count graphemes for their published limits, so the corresponding tiles use this number. - SMS segmentation. Per 3GPP TS 23.038 the tool walks the string and checks each character against the GSM-7 default alphabet. If every character is in GSM-7 the segment cap is 160 septets (153 per part for concatenated messages, with 7 septets per part lost to the User Data Header). A single non-GSM character — an emoji, a curly quote, a Sinhala letter — switches the entire message to UCS-2 encoding and drops the cap to 70 (67 concatenated). The tool flags the exact character that triggered the switch so you can decide whether to substitute it.
Platform limits use the counting method each platform documents. Twitter / X uses a "weighted character" rule that maps to graphemes for everything except CJK; the tile uses graphemes for the broadest accuracy. SMS, meta tags, Instagram, LinkedIn, Facebook and most others count UTF-16 code units. Each tile shows its documented source on hover, and the full source list appears below.
The tool is engineered to update on every keystroke even with a megabyte of text in the textarea. Memoised computation means unrelated re-renders do not re-walk the string; the longest hot path on a 100-KB input runs in roughly 5 milliseconds on a mid-range Android phone.
Worked examples
Frequently asked questions
Sources & references
- 3GPP TS 23.038 — Alphabets and language-specific information (SMS)
- X Developer Documentation — Counting characters
- Google Search Central — Title links and length
- Google Search Central — Snippet (meta description) guidance
- Unicode TR-29 — Text segmentation (grapheme clusters)
- Instagram Help Center — Captions and tagging
- LinkedIn Help — Sharing content
All limits and encodings on this page were last verified on 2026-05-11. Platform limits are reviewed quarterly and whenever a major social platform announces a change. If you spot a stale value, please email me — see the share box below.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Spotted a stale platform limit, an edge case, or want to suggest an improvement?
Email me at [email protected] — most fixes ship within 24 hours.