X (Twitter) Character Counter
Counts your draft the way X counts it — every link at 23, CJK and emoji at 2, against the free-tier limit of 280 weighted units. Paste a draft and the number updates as you type.
0
weighted units · limit 280
Counted against the free-tier limit of 280 weighted units. X Premium raises the cap into the thousands, so a Premium account can post far longer than the bar above suggests.
The Four Rules This Counter Applies
Any link costs 23
t.co wrapping means a four-character domain and a 200-character tracking URL are measured identically.
Some characters cost 2
CJK, kana, hangul, emoji and several other scripts weigh double. Latin, Cyrillic, Greek, Arabic and Hebrew weigh 1.
280 weighted units, free tier
Not 280 characters. The two are the same number only when every character you typed weighs 1.
Accents are composed first
X normalises text before measuring, so an e with a separate combining accent becomes a single é and costs 1, not 2.
X Counts Units, Not Characters
The composer's countdown looks like a character count and behaves like something else. What it actually tracks is a weighted length: each character is assigned a cost, the costs are added up, and the total is compared against 280. For an English sentence every cost is 1, the weighted length and the character count are identical, and nobody notices the distinction exists.
It stops being invisible the moment a post contains a link or a character from outside the Latin block. Then the countdown moves faster or slower than your typing, a draft that looked like it had room refuses to send, and a generic character counter — the kind that measures the string and reports the length — tells you the post is fine when X disagrees.
The rules are not secret. X publishes an open-source library, twitter-text, whose configuration file lists the weights, the ranges they apply to, and the length a link is replaced with. That file is what the tool above implements, which is why it and the composer land on the same number.
Every Link Costs 23, However Long It Is
Before a post is measured, X substitutes each link with a t.co wrapper of fixed length. The measurement is taken on the wrapper, so the URL you typed never enters the arithmetic. Twenty-three units is the cost, and it is the same cost for http and https links alike.
That cuts both ways, and the second half is the part people miss. A 200-character URL with five tracking parameters costs 23 — which is why stripping utm_source before posting buys you nothing in the counter, however much it improves the look of the link. But a four-character domain also costs 23, so a post reading x.co is charged nineteen units more than it appears to be. Two short links in a post are 46 units, or about a sixth of the whole limit, before you have written a word about them.
The practical consequence is that the link is a fixed budget line. Decide whether the post carries one at all, then write the remaining 257 units around that decision, rather than writing to 280 and discovering the shortfall when the send button greys out.
The Characters That Count Twice
X defines a small set of code-point ranges that cost 1 unit and charges 2 for everything else. The generous range runs from the start of Unicode up to U+10FF, which takes in Latin, Greek, Cyrillic, Hebrew, Arabic, Devanagari, Thai and Georgian. Three narrow ranges inside General Punctuation are added to it: the typographic spaces and joiners, the dashes and curly quotation marks, and the prime marks.
Everything outside those ranges weighs 2: Chinese, Japanese kana, Korean hangul, and every emoji. A Japanese post therefore has a practical ceiling around 140 characters rather than 280, which is the original limit and not a coincidence — the weighting was introduced so that the 2017 move to 280 gave English-language posts more room without changing what a Japanese post could say.
Emoji are weighed by the character you see rather than the pieces it is built from. A flag is two regional indicators, a family emoji is four people stitched together with zero-width joiners, and a skin-toned wave is a hand plus a modifier — each of them costs 2 units in total, not 2 per component. The breakdown in the tool lists the exact characters that doubled, so you can see whether the culprit is a script or a single stray emoji.
280 Is the Free-Tier Number, Not Everyone's
This tool counts against 280 weighted units because that is the ceiling a free account writes against. X Premium raises it into the thousands, so a Premium subscriber pasting a long draft here will see a red bar that does not reflect any real restriction on their account.
Length being available is a different question from length being read, though. However long a Premium post is allowed to be, the timeline shows a truncated preview with a link to expand, so the opening still has to earn the tap. Treating 280 as a working target even when you are not bound by it is a defensible editing habit rather than a limitation.
How to Read the Breakdown
Compare the two numbers
The large figure is the weighted count X applies. The plain character count sits beside it. When they match, no special rule touched your draft.
Check the link line
It names every link found and what each one cost. If a link you meant to include is missing from that list, X may not treat it as a link either — check the spelling.
Check the doubled line
It counts the characters charged at 2 units and shows a sample of them. One surprise emoji in an otherwise Latin post shows up here immediately.
What This Counter Does Not Claim
It measures text. It does not contact X, so it cannot tell you whether a post will send, whether an account is in good standing, or how a draft will perform. The number is arithmetic on the string in the box, and the composer remains the only authority on what X will accept.
One limitation is worth stating plainly. X recognises bare domains — a link written without http or www — by checking the ending against the full public list of top-level domains, which runs to well over a thousand entries and changes. This page carries the common set rather than shipping that list to your browser, so a bare domain on an unusual ending may be counted as ordinary text here when X would charge 23 for it. The error runs the other way too: an address written with http:// but pointing at something that is not a public domain, a localhost or a raw IP, is charged 23 here where X would leave it as prose. Writing real links with https:// removes the ambiguity, and it is what you should do anyway when the link matters.
Fitting a Real Thought Into 280
Once the arithmetic is settled, the editing problem is the interesting one. The units a post wastes are rarely in the argument — they are in the throat-clearing before it. Openers along the lines of I've been thinking about this for a while, but cost forty-odd units and carry nothing. Cutting them is free.
Hedges are the next cheapest win. Sort of, kind of, arguably, it seems like: each one softens a sentence you presumably meant, and each one is billed at full weight. The compression that follows usually reads better than the draft it replaces, which is the unusual case of a constraint improving the work.
After that, decide about the link deliberately. If the post stands on its own, drop the link and reclaim 23 units. If the link is the point, write a shorter post around it and accept that a sixth of the budget is already committed.
None of this fixes the harder problem, which is that a sharply written post reaches almost nobody from an account with no visible audience — replies and reposts are what carry a post outward, and both are far likelier to come from people who see a following behind the name. Most accounts close that gap slowly by posting through it. Some shorten the runway by buying Twitter followers to put credible social proof behind the handle while the organic reach builds.
Frequently Asked Questions
How many characters can you post on X?↓
280 weighted units on a free account. Weighted is the word that matters: X measures in units rather than characters, some characters cost two units, and any link costs a flat 23. So 280 Latin letters fits exactly, while 280 Japanese characters is more than twice the limit. X Premium raises the cap far above 280.
Do links count towards the X character limit?↓
Yes, and always for the same amount. X routes links through its t.co wrapper and measures the wrapper rather than what you typed, so every link costs 23 units — http or https, a four-character domain or a 200-character URL trailing tracking parameters. Shortening a long URL before you post saves nothing in the counter.
Why does X say my post is longer than the characters I typed?↓
Two rules cause almost every mismatch. Any link is measured as 23 units even when you typed fewer, and characters outside the ranges X treats as weight 1 — CJK, kana, hangul, emoji and several other scripts — cost 2 units each. The counter on this page shows the weighted number and the plain character count side by side, and names which of the two rules moved yours.
Does an emoji count as one character or two on X?↓
Two units. That holds for emoji assembled from several code points as well: a flag, a skin-toned gesture or a family emoji joined with zero-width joiners is one character on screen and costs 2 units in total, not 2 for each piece it is built from.
What is the character limit with X Premium?↓
Well beyond 280 — Premium posts run into the thousands of characters. This tool counts against the free-tier 280 because that is the limit most accounts write against. On Premium the number is still worth watching as a readability guide, since the part of a long post that shows in the timeline before the More link is short.
Does this character counter send my text anywhere?↓
No. The counting happens in your browser in JavaScript, so your draft is never sent anywhere, and nothing you type is stored or tied to an account. Close the tab and the draft is gone, which is the point of doing the arithmetic on the page rather than behind an API.
Why do other character counters give a different number?↓
Because most of them count characters, and X does not. A counter that measures the string directly reports a long URL at its full length and a Japanese sentence at one unit per character, where X reports the first as 23 and the second as two units per character. On plain English with no links the two agree — the gap only opens on the posts where it would actually cost you.
Related Free Tools
NewFollowers
Your post fits. Now make sure someone sees it.
A tight 280 characters still needs an audience behind the handle. Real Twitter / X followers, delivered gradually, with a 30-day refill guarantee.
NewFollowers
Grow your Instagram following
Real Instagram followers, delivered safely from $9.99.
View Instagram PackagesNewFollowers
Grow your TikTok following
Real TikTok followers and views, delivered safely from $8.99.
View TikTok PackagesNewFollowers
Grow your YouTube channel
Real YouTube subscribers and views, delivered safely from $9.99.
View YouTube PackagesNewFollowers
Grow your Twitter / X following
Real Twitter followers, delivered safely from $9.99.
View Twitter / X Packages