Skip to content
ZeroServer.tools

Twitter / X Character Counter

Count characters against the 280-limit as you draft a post.

Weighted Count: 0Remaining Allowance: 280Characters Typed: 0Detected Links: 0
0 typed · 0 link (each counts as 23)0 / 280

How X counts characters

A standard X (Twitter) post allows 280characters, but the count isn't a string length — it's a budget of weight. X's published algorithm charges most Latin, Greek, Cyrillic and Arabic characters 1, and everything else 2. So emoji cost 2 each, and a post written in Chinese or Japanese runs out at 140 characters rather than 280. Every URL — no matter how long — is shortened to a t.co link and charged a flat 23.

Emoji built from several parts are charged per part, not per picture. A family emoji like 👨‍👩‍👧‍👦 is one character to you, but X sees four people joined by three invisible joiners and charges 4×2 + 3×1 = 11. That is why this page shows “Characters Typed” and “Weighted Count” as two separate numbers: the first is what you wrote, the second is what the 280 is spent against. Both are computed in your browser — nothing is sent anywhere.

Built and maintained by Meet Shah · Last updated

What this tool is used for

  • Drafting a post against the character limit as you type.
  • Trimming a post that is slightly over without losing the point.
  • Checking whether a link leaves room for the message.
  • Comparing two drafts on length before choosing which to publish.
  • Checking a post fits before adding it to a scheduling queue.

Frequently Asked Questions

Why does X count some characters as two?
Because it is a weighted budget, not a character count. Latin, Greek and Cyrillic ranges weight 1; everything else — CJK, emoji, most other scripts — weights 2. That is the published `twitter-text` algorithm rather than an approximation of it.
How are URLs counted?
As a flat 23 characters regardless of actual length, because every link is wrapped in the t.co shortener. A 200-character URL and a 20-character one cost the same, which is why shortening a link before posting saves nothing at all.
Does an emoji count as one?
Rarely. `emojiParsingEnabled` does not collapse a zero-width-joiner sequence, so a family emoji costs 11 — each joiner counts. A single-code-point emoji costs 2. This is the detail that makes `.length` and a grapheme count both wrong.
Why do three different length measurements disagree?
Because they answer different questions. `.length` counts UTF-16 code units, `Array.from().length` counts code points, a grapheme count counts what a human sees — and none of them is the weighted budget X actually enforces.
What is the current limit?
280 weighted units for a standard post, with a much higher ceiling for subscribers. The limit is on the weighted total, so a post in Japanese fits roughly half as many characters as one in English — which is what the weighting was designed to equalise.

Common errors and gotchas

  • Counting a link at its literal length, when the platform substitutes a fixed length for every URL.
  • Counting emoji and CJK characters as one unit each, which the platform weights differently.
  • Forgetting a leading mention behaves differently from one mid-post.
  • Assuming the limit is stable, since it has changed and differs by account type.
  • Writing to the limit rather than to the point.

Related Web & SEO tools

Private & free — this tool runs entirely in your browser.

NamecheapRegister a domain for your next project — from $1.98/yr.affiliate