ALLYX ONE
Tools Writing Character Counter Writing
100% browser · zero uploads

Character Counter

Count characters, graphemes, UTF-8 bytes, words, and SMS segments in real time. Validate against 18 platform limits — X, Threads, LinkedIn, SEO title, meta description, SMS, and more — in one place.

X / Twitter post · limit 280 chars

00%Empty

280 characters remaining · Standard post; X Premium allows up to 25 000.

Counts

0

Characters

Including spaces & newlines

0

No spaces

Whitespace stripped

0

Graphemes

User-perceived chars (emoji = 1)

0

UTF-8 bytes

Database / payload size

0

UTF-16 units

JavaScript string.length

0

Words

Whitespace-separated

0

Sentences

Terminated by . ! ?

0

Paragraphs

Separated by blank lines

0

Lines

Total \n-separated rows

0

Longest line

Useful for code & SRT

SMS segments

Encoding

GSM-7(plain Latin)

Segments

0(160 chars / segment)

SMS length

0

Space in current segment

160

GSM-7 SMS uses 160 chars per single message; multi-part messages drop to 153 chars each to leave room for the user-data header. A single non-GSM character (an emoji, an accented vowel outside GSM, a smart quote) forces the entire message into UCS-2: 70 chars single / 67 chars per multi-part segment. Each extra segment is billed separately by most carriers.

Where does your text fit?

Character composition

0

Letters

0% of text

0

Digits

0% of text

0

Whitespace

0% of text

0

Punctuation

0% of text

0

Emoji / other

0% of text

Categories use Unicode property classes: \p{L} for letters, \p{N} for digits, \p{P} for punctuation, and \p{Extended_Pictographic} for emoji — so French accents, Arabic letters, and Chinese ideographs all count correctly.

How It Works

1

Paste your text

Drop in a draft tweet, SEO title, LinkedIn post, or SMS message. Your text stays in browser memory only — nothing is uploaded.

2

Counts compute locally

JavaScript measures characters, words, sentences, and lines; Intl.Segmenter collapses emoji and ZWJ sequences into single graphemes; TextEncoder reports exact UTF-8 byte size.

3

Platform limits check

Your character count is compared in parallel against 18 presets — X, Threads, Bluesky, LinkedIn, Instagram, SEO title / meta description, YouTube, TikTok, Reddit, and Pinterest.

4

SMS segments resolve

GSM-7 vs UCS-2 detection: a single emoji or smart quote drops capacity to 70 chars per segment. The panel shows encoding, segment count, and remaining space in the current part.

How to Use the Character Counter

  1. Paste or type any draft — a tweet, SEO title, meta description, LinkedIn post, SMS message, app store subtitle, or YouTube description — into the input area.
  2. Pick a platform limit from the dropdown. The headline counter, percentage, and progress bar update instantly, and the status flips from Under limit to Near limit to Over limit as you type.
  3. Scroll to the "Where does your text fit?" grid to see every platform side-by-side — useful when the same caption needs to ship to Threads, Bluesky, and LinkedIn at once.
  4. Check the SMS segments panel before paying per multi-part SMS — a single emoji can drop capacity from 160 to 70 chars per segment.
  5. Hit Trim to limit to truncate the text to the selected platform cap, or Copy text to paste the validated message straight into your composer.

Character Limits at a Glance

Every social platform, search engine, and SMS carrier counts characters slightly differently. The table below summarises the limits the tool checks in real time — all sourced from the platforms' own 2025–2026 documentation. URLs on X are always counted as 23 characters regardless of length, and Twitter Premium ($8/month) raises the post cap to 25 000 characters but keeps the standard 280-char rule for everyone else.

Surface Character limit Best practice
X / Twitter post280Aim for 70–100 — short posts earn ~17% more engagement.
Bluesky post300Hard limit; URLs count fully.
Threads post500Long-form does well — use the full budget for narratives.
Mastodon toot500Instance admins can raise this; check before counting.
Instagram bio150Lead with the value prop; emoji compress meaning.
Instagram caption2 200Front-load the first 125 chars — the rest is hidden behind "more".
LinkedIn headline220Up from 120 in 2020 — use it for keywords + tagline.
LinkedIn About2 600First 3 lines (~265 chars) preview before "see more".
LinkedIn post3 000~210 chars preview before "see more"; front-load the hook.
YouTube title100Mobile cuts at 60–70 — keep keywords in the first 50.
YouTube description5 000First 100–150 chars appear above the fold.
TikTok caption2 200Some regions allow 4 000; viewers see ~100 chars at a glance.
Pinterest pin description500First 50–60 chars dominate Pinterest search.
Reddit post title300Subreddit rules often shorten this further.
SEO <title> tag60Google truncates around 580–600 px ≈ 60 chars on desktop.
SEO meta description160Truncation at 155–160 chars; mobile at ~120.
Open Graph og:title90Facebook's recommended length for OG previews.
Open Graph og:description200Facebook's recommended length for OG previews.

SMS Segments — Why a Single Emoji Doubles Your Bill

SMS messages are encoded in one of two character sets defined by the 3GPP TS 23.038 standard:

  • GSM-7 — the default 7-bit alphabet covering Latin letters, digits, and a small set of European symbols. A single SMS holds 160 chars; multi-part messages drop to 153 chars each to reserve room for a User-Data Header that lets the receiver reassemble the parts in order.
  • UCS-2 — a 16-bit Unicode subset used the moment your text contains a single character outside GSM-7. A single SMS holds 70 chars; multi-part segments drop to 67 chars each.

The everyday "gotchas" that silently switch a message to UCS-2 are:

  • Any emoji (🎉, 😅, ❤️).
  • Smart quotes — curly “ ” ‘ ’ instead of straight " '.
  • Em dash (—) or en dash (–) — replace with two hyphens or a single hyphen.
  • Accented characters outside the GSM table (ă, ą, č, ě, ş, ý, etc.).
  • Bullet glyphs (•) — substitute with a hyphen or asterisk.

Twelve characters of GSM-7 text cost 1 segment. Twelve characters that include a 😀 emoji cost 1 segment but capacity drops to 70 chars total, so a 75-char promotional message with one emoji is suddenly billed as 2 SMS segments. The SMS panel in this tool shows live encoding, segment count, and remaining space so you can avoid that.

Characters vs Graphemes vs Bytes — Pick the Right Count

For most platforms, what the user sees is a grapheme: a flag, a family emoji, or a skin-tone variant is one user-perceived character even though it is built from several Unicode code points joined by zero-width joiners. JavaScript's string.length reports UTF-16 code units, which is usually the same as graphemes for ASCII text but inflates dramatically for emoji.

  • Use Graphemes (Intl.Segmenter) when you want what a reader sees on screen — best match for Twitter, Threads, and SMS counters that are emoji-aware.
  • Use Characters (UTF-16 code units) when you need to match JavaScript's string.length — what most APIs measure.
  • Use UTF-8 bytes when you need to fit text into a database VARCHAR(N) column, an HTTP cookie (4 KB), or a JSON payload — UTF-8 is what most network transports actually store.
  • Use UTF-16 code units when the receiving system is .NET, Java, or another runtime whose default string is UTF-16.

When to Use This Character Counter

  • Drafting tweets and bios — see exactly how much budget is left for an emoji or a link without losing characters mid-thought.
  • SEO copywriting — write title tags and meta descriptions that don't get truncated in Google's search results.
  • SMS marketing — preview segment count to avoid surprise charges on promotional or transactional campaigns.
  • LinkedIn profile optimization — keep your headline under 220 and your About section under 2 600 without copying into a separate counter.
  • App Store / Google Play listings — keep app names under 30, subtitles under 30, and promotional text under 170 characters.
  • Form field validation testing — confirm test fixtures fit varchar(255), TEXT, or arbitrary application limits.
  • Translation and localisation — Russian, German, and Arabic translations often run 30–40% longer; verify they still fit before shipping.

Tips for Hitting Limits Honestly

  • Replace smart quotes with straight quotes to keep SMS in GSM-7.
  • Reserve the last 10–15% of your budget — platforms often append your username, retweet header, or link preview that eats into the visible total.
  • Front-load the first 100–150 characters of long captions — that's the preview window most users actually read.
  • Avoid em dashes in SMS; use a hyphen or comma. Avoid accent-only swaps ("café" → "cafe") if the audience expects diacritics.
  • For multilingual sites, run each translation through the counter — German often blows past English by 35%.

Frequently Asked Questions

How does the character counter handle emoji?

The "Characters" count uses JavaScript string length, which treats most emoji as 2 (a UTF-16 surrogate pair) and family / flag / skin-tone emoji as 4–7. The "Graphemes" count uses Intl.Segmenter to count user-perceived characters, so the 👨‍👩‍👧 family emoji is 1 grapheme but 11 code units. Use graphemes when you want what a reader sees, and characters when you need exact JavaScript-style string length.

Why does my text need 2 SMS segments?

A single SMS holds 160 GSM-7 characters or 70 UCS-2 (Unicode) characters. Once you exceed that, the message is split into multi-part segments — 153 chars each for GSM-7 or 67 each for UCS-2 — because a User-Data Header is reserved in every part for reassembly. A single emoji, smart quote (curly quote), em dash, or accented character outside the GSM-7 set forces the entire message into UCS-2 and drops capacity to 70 chars per segment.

What is the recommended character count for an SEO title tag and meta description?

Google truncates desktop SERP titles around 60 characters and meta descriptions around 155–160 characters. Mobile is tighter on titles (typically 50–55 chars). The tool flags the SEO title preset at 60 and meta description at 160 with progress bars so you can land safely under both caps.

What is the current X / Twitter character limit?

Standard X / Twitter posts cap at 280 characters; X Premium subscribers can post up to 25 000 characters. URLs are counted as a fixed 23 characters by X regardless of their actual length, so a 60-character link still costs 23.

What is the difference between characters, graphemes, UTF-8 bytes, and UTF-16 code units?

Characters = the number of UTF-16 code units (JavaScript string.length). Graphemes = the number of user-perceived characters using Intl.Segmenter — a family emoji or flag is 1 grapheme. UTF-8 bytes = the size your text occupies when stored in a database or sent over the network. UTF-16 code units = the same as JavaScript string.length. ASCII text gives the same number for all four; emoji and non-Latin scripts diverge.

Is my text uploaded anywhere?

No. Every count is computed locally in your browser using JavaScript. The page makes no network requests after it loads, so your draft posts, bios, and SMS messages never reach any server.

Does it work for languages other than English?

Yes. Counts use Unicode property classes — \p{L} for letters, \p{N} for digits — so Spanish accents, Arabic letters, Chinese ideographs, and Hindi syllables all count correctly. Word counting is whitespace-based, which suits Latin and Cyrillic scripts; for Chinese, Japanese, and Thai use the Characters or Graphemes count instead.

Does the character counter work offline?

Yes. The tool is pure client-side JavaScript — no network requests are made once the page has loaded. It works fully offline.

Privacy & Security

All character counting, grapheme segmentation, byte sizing, and SMS analysis happens locally in your browser using JavaScript, Intl.Segmenter, and TextEncoder. Your text is never transmitted to any server — no upload, no API call, no logs.