Free Character Counter
Count characters, words, sentences, paragraphs and estimate reading time.
About Character Counter
Our character counter gives you instant statistics about your text. Use it to check Twitter/X post limits (280 characters), SEO title lengths (60 characters), meta descriptions (160 characters), or any other character-limited content. All processing happens in your browser · nothing is sent to any server.
Common Character Limits
Twitter/X post: 280 characters
Instagram bio: 150 characters
SEO title: 50-60 characters
Meta description: 150-160 characters
YouTube title: 100 characters
SMS message: 160 characters
How It Works
- Type or paste your text into the textarea. The counter updates live on every keystroke, there is no "Calculate" button to press.
- Read the live stats. Characters with spaces, characters without spaces, words, sentences, paragraphs, lines, average word length, plus reading and speaking time estimates all recompute as you edit.
- Set an optional character limit for the platform you're writing for (Twitter 280, SMS 160, Bluesky 300, etc.) and watch the progress bar fill up. The bar turns amber as you approach the cap and red when you cross it.
- Copy or clear when done. Copy Text drops the contents into your clipboard; Clear empties the box. Nothing is sent anywhere, the entire counter runs in your browser.
Character Limits That Matter in 2026
Every platform has its own ceiling, and several have hidden rules, the ones that bite are usually visibility limits (text past a certain point gets hidden behind "…more") and per-channel encoding rules.
| Platform | Field | Limit | Notes |
|---|---|---|---|
| Twitter / X | Standard post | 280 | URLs always count as 23. CJK and emoji count as 2 each. |
| X Premium | Long post | 25,000 | Roughly a 4,000-word article. |
| Bluesky | Post | 300 | URLs count as 22; bio 256, display name 64, alt text 2,000. |
| Threads | Post | 500 | Long-text attachments allow much more, separately. |
| Mastodon | Toot | 500 (default) | Per-instance, many run 1,000+ or 5,000+. |
| Post | 3,000 | Headline 220, About / Summary 2,600. | |
| Discord | Message | 2,000 | 4,000 with Nitro. Longer messages convert to a text-file attachment. |
| Title / Body / Comment | 300 / 40,000 / 10,000 | Titles cannot be edited after submission. | |
| Caption / Bio | 2,200 / 150 | Captions truncate after ~125 chars in the feed. | |
| YouTube | Title / Description | 100 / 5,000 | Search results show only ~60 of the title. |
| SMS (GSM-7) | Single segment / multi | 160 / 153 | Multi loses 7 chars per segment to the User Data Header. |
| SMS (UCS-2) | Single segment / multi | 70 / 67 | Triggered by any non-GSM character. |
| SEO title | <title> | ~50–60 | Google has no hard limit; truncation is by pixel width (~580 px). |
| SEO meta description | <meta description> | ~150–160 desktop / ~120 mobile | Truncation, again, is pixel-based; length does not affect ranking. |
The SMS Encoding Trap
SMS is the only common channel where one character can change the cost of every other character in your message. The GSM 7-bit default alphabet contains exactly 128 characters, basic Latin letters, digits, common punctuation, a handful of accented characters and currency symbols. Anything outside it (a curly apostrophe ', an em-dash, an emoji, any non-Latin script) downgrades the entire message to UCS-2 16-bit encoding, dropping the per-segment ceiling from 160 GSM-7 characters to 70 UCS-2 characters. A 161-character message becomes two segments, billed as two messages; one stray emoji in an otherwise clean message can cut your effective limit in half. Tools like Twilio's "Smart Encoding" auto-substitute curly quotes for straight ones to keep marketing campaigns in the cheaper encoding.
What Counts as "a Character"? It Depends.
Modern Unicode separates the intuitive idea of "a character" into three different concepts that count differently:
- Code unit, the storage unit of a particular encoding (1 byte for an ASCII character in UTF-8; 2 bytes for a Basic Multilingual Plane character in UTF-16; 4 bytes for an emoji in UTF-16 because it needs a surrogate pair).
- Code point, a single Unicode scalar value (e.g. U+1F926 face palm). Most characters are one code point, but some "single" visual emoji are stitched together from several.
- Extended grapheme cluster, what users actually perceive as one character. Defined formally in Unicode Standard Annex #29.
JavaScript's String.prototype.length returns UTF-16 code units, not graphemes. MDN states this directly: "contains the length of the string in UTF-16 code units." That is why a single emoji like 😄 reports a length of 2 (it lives in the supplementary plane and needs a surrogate pair), and the family ZWJ sequence 👨👩👧👦 reports a length of 11 (four person emojis plus three zero-width joiners). The same one-character family emoji counts as 11 in JavaScript, 5 in Python, and 1 in Swift, depending on which definition each language picks.
For correct grapheme counts in modern JavaScript, the standard answer is Intl.Segmenter:
const seg = new Intl.Segmenter("en", { granularity: "grapheme" });
[...seg.segment("👨👩👧👦")].length; // 1
This counter uses Intl.Segmenter where supported (every evergreen browser as of 2026) so the visible character count matches what a human eye would count, not what UTF-16 code units would.
Reading Time and Speaking Time
Reading time is calculated using the most rigorous modern source available: Marc Brysbaert's 2019 meta-analysis ("How many words do we read per minute?", Journal of Memory and Language) which pulled 190 studies covering 18,573 participants. The headline finding was lower than the long-cited folk wisdom of 300 wpm, silent reading of non-fiction averages 238 words per minute, fiction averages 260 wpm, and reading aloud drops to 183 wpm. The counter uses 238 wpm for the silent reading-time estimate, which is the right number for documentation, articles, and most general content.
Speaking time uses the American Speech-Language-Hearing Association's 130 wpm formal-presentation pace, slower than conversational speech (around 150 wpm) because audiences need extra processing time and presenters need to pause for emphasis. If you're drafting a podcast script, an audiobook chapter, or a live talk, 130 wpm is the safer planning number.
SEO Title and Meta Description Lengths
Google Search Central is unambiguous: there is no hard maximum length for either the <title> element or the <meta name="description"> tag. Snippets are simply truncated to fit the available width on the device showing the result. The 50–60 character title and 150–160 character description recommendations are industry conventions derived from observed pixel widths (~580 px on desktop), not from any official cap. Truncation is decided by pixel width, so a title full of wide letters like W, M, and capital A will truncate sooner than one full of narrow letters like i, l, and t. Length doesn't affect ranking; it only affects how much of your snippet a searcher sees before clicking.
Why Counting in the Browser Matters
Many text counters are server-side: you paste, they POST your text to a backend, and they return the counts. Anything you paste is then in that company's transit logs, server logs, and (depending on terms) potentially their training data. That is fine for tweet drafts; it is not fine for confidential employee communications, legal drafts under privilege, unpublished manuscripts, medical or financial records, or PII you're handling on someone else's behalf. This counter runs entirely in your browser, every count is computed by JavaScript on your own device, the textarea contents never leave the page, and once the page is cached the tool works offline.
Common Use Cases
- Drafting social posts against a hard cap with a live progress bar (X 280, Bluesky 300, Threads 500, Mastodon 500).
- Writing SMS marketing copy that has to stay inside 160 GSM-7 characters per segment to keep delivery costs predictable.
- Tuning SEO meta tags, title around 60 characters, description around 155, without bouncing to a separate SERP-preview tool.
- Hitting academic abstract limits (APA 150–250 words, Nature 150, Science 125) without exporting to Word every revision.
- Checking essay or report word counts against a class minimum or a journal maximum, especially when the original document is locked or in a format you don't want to round-trip.
- Pasting code snippets to estimate how long a code block will take to read or how it will render in chat.
- Writing form-field copy against arbitrary CRM or visa-form character ceilings (the legacy MySQL
VARCHAR(255)default is still surprisingly common).
Common Mistakes
- Confusing characters with bytes. A 280-character X post in English is 280 bytes; the same post containing emoji is well over 280 bytes. Use the dedicated Byte Counter when you need encoded size.
- Forgetting that URLs always count as 23 on X. A short link and a 200-character link both consume 23 of your 280 characters. Don't shorten manually.
- Using a single emoji in an SMS marketing template. One non-GSM character downgrades the whole message to UCS-2, halving the per-segment cap and potentially doubling the bill across a campaign.
- Optimising titles to a character count when truncation is by pixel width. Two 60-character titles can render at very different widths depending on which letters they use.
- Trusting
.lengthin JavaScript for user-visible character counts. UseIntl.Segmenterwithgranularity: "grapheme"if the count is ever shown to a user, otherwise emoji and CJK clusters report misleading numbers. - Pasting confidential text into server-side counters. If the URL says "count" but the network tab shows a POST, your text just left your computer.
Frequently Asked Questions
Does the counter work with non-Latin scripts and emoji?
Yes. The character count uses Intl.Segmenter with grapheme granularity wherever the browser supports it (every evergreen browser as of 2026), so a single emoji counts as 1 even if it is technically several Unicode code points stitched together with zero-width joiners. CJK characters, accented Latin, Devanagari, and Cyrillic all count one cluster per visible character.
Why is my X character count off by one or two?
X applies its own weighting: every emoji counts as 2, every CJK character counts as 2, and every URL is wrapped through the t.co shortener and counts as exactly 23. A pure-Latin draft of 280 characters in this counter is 280 on X too, but a draft with two emoji and a URL will count higher on X than here. For X-specific accuracy, X publishes the twitter-text library that implements its exact counting rules.
Is reading time really 238 words per minute?
For silent reading of non-fiction by an average adult, yes, that is the headline number from Marc Brysbaert's 2019 meta-analysis of 190 prior studies covering 18,573 participants, the most rigorous modern source. Fiction is a bit faster (260 wpm), reading aloud is much slower (183 wpm), and speaking-for-an-audience is slower still (130 wpm per ASHA). The reading-time estimate uses 238 wpm; speaking time uses 130.
Is my text saved or sent anywhere?
No. Counting happens entirely in JavaScript inside your browser. The textarea contents are not transmitted, logged, or cached on any server. Once the page is loaded, the counter works offline.
How does the SMS limit really work?
A single SMS segment is 140 bytes. Encoded with the GSM 7-bit alphabet that's 160 characters; encoded with UCS-2 (16-bit Unicode, used the moment any non-GSM character appears) it drops to 70. Multi-segment messages lose 7 GSM characters or 3 UCS-2 characters per segment to a User Data Header used for re-assembly, so a long GSM message is 153 characters per segment, a long UCS-2 message is 67. Mobile carriers bill per segment, so the encoding choice matters.
What's the right SEO title length?
Google has no hard limit. The industry convention of 50–60 characters comes from the observed pixel-width truncation point in desktop search results (around 580 px). Length itself does not affect ranking; it only affects how much of the title users see before it gets clipped. Keep the most important words at the start, since that's the part guaranteed to show.