Channel 2 of 5 · Weighted count
How X counts characters in a post
The 280 limit is a weighted count. Here is what each kind of character costs, and why plain counters get it wrong.
X's limit of 280 characters is not a count of letters. It is a weighted count. Each character gets a weight, links get a fixed cost, and the total of those weights has to stay at or under 280. For an ordinary English post with no links or emoji, the weighted count and the letter count are the same, which is why most people never notice. Add a long URL, a few emoji or a sentence in Japanese and the two numbers drift apart quickly.
The rules are published on X's developer documentation and in the configuration file of twitter-text, the open-source library X uses for counting. The Twittermeter dial applies the same rules.
The four rules that decide the count
Here is the whole system, in the order X applies it.
- Normalize the text. Before anything is counted, the text is converted to Unicode Normalization Form C (NFC). Letters with accents that were typed as two pieces, a base letter and a combining mark, are merged into a single character. That way "café" costs 4 whether your keyboard produced it as four code points or five.
- Replace links with a fixed cost. Every URL X recognizes counts as 23 characters, the length of a shortened t.co link. A 120-character link to a news article costs 23. So does a 15-character link to a home page.
- Count emoji as 2. Each emoji counts as 2, however it is built. A family emoji made of several people joined by invisible zero-width joiners is still one emoji and still costs 2. Skin tone modifiers don't add to it.
- Weigh everything else by range. Each remaining code point counts 1 if it falls in one of a few Unicode ranges, and 2 if it doesn't.
The ranges with weight 1 are code points 0 to 4351, which cover Latin, Greek, Cyrillic, Hebrew, Arabic, Devanagari, Thai and a long list of other scripts, plus three small blocks of general punctuation: spaces and dashes (8192 to 8205), quotation marks and bullets (8208 to 8223), and a handful of primes and similar marks (8242 to 8247). Everything outside those ranges has the default weight of 2. That includes Chinese, Japanese and Korean characters, most symbols past the punctuation block, and anything else that isn't listed.
What that means in practice
| You type | Plain length | X weighted count |
|---|---|---|
Meeting moved to 3pm. |
21 | 21 |
See https://example.com/reports/2026/annual-summary-final |
57 | 27 |
Great job 👏👏👏 |
13 | 16 |
東京で会いましょう |
9 | 18 |
Café ☕ (decomposed é) |
7 | 7 |
The middle rows are where a plain character counter goes wrong. It charges the long link its full length, so you trim words you didn't need to cut. It may count each emoji as 1 or as 2 depending on how the browser stores it, and a skin-toned emoji can show up as 4 in a JavaScript length check. For text in Japanese, Chinese or Korean, the effective limit is 140 characters, not 280.
The weight-2 rule applies to more than emoji and CJK. Fancy "bold" or "script" letters copied from Unicode text generators come from the Mathematical Alphanumeric Symbols block, far outside the weight-1 range, so 𝐭𝐡𝐢𝐬 costs 8 rather than 4. Screen readers also tend to read those letters one by one or skip them, which is a second reason to leave them out.
What X recognizes as a link
Anything starting with http:// or https:// is a link. X also turns many bare domains into links, such as example.com or example.org/page, as long as the ending is a real top-level domain. A file name like report.pdf stays text because .pdf isn't a domain ending.
This is the part of the count that is hardest to copy exactly. The twitter-text library uses a long list of top-level domains and some special cases for punctuation at the end of a URL. Twittermeter recognizes links with a protocol and bare domains on the common endings, and trims a trailing period, comma or closing bracket the way X does. If a post sits within two or three characters of the limit and contains an unusual web address, check it in the composer.
What doesn't count
A few things you might expect to cost characters don't:
- Photos, GIFs and videos attached from X's own apps count as 0.
- The @usernames X fills in at the start of a reply count as 0. Any mention you type yourself counts.
- Quote posts add nothing. The link to the quoted post isn't part of your text.
Hashtags count normally, including the # sign. So do line breaks, spaces and double spaces.
The long-post exception
Accounts with an X Premium subscription can publish longer posts. X's help center gives the limit as 25,000 characters. In timelines, a long post shows its opening and then a "Show more" link, so the first 280 or so characters still do most of the work of getting someone to read on. Switch the meter to Premium mode to see roughly where that cut falls in your draft.
Accounts without Premium are still limited to 280. If you write for several accounts, check which limit applies before you draft a long post, because a 600-character post won't go through on a standard account. Splitting it into a thread is the usual workaround.
Common counting surprises
"The composer says I'm over, but my count says 270"
There is almost always a link involved. Either your counter charged it less than 23 (a short link like x.co/a still costs 23) or a bare domain you thought was text became a link.
"I'm under 280 but the post looks cut off"
On a standard account, posts up to 280 are shown in full. If text appears to be missing, check for a stray character that renders as nothing, such as a zero-width space pasted from a document. It still counts.
"My emoji count doesn't match"
Older emoji that started life as text symbols, like ☺ or ✔, sit in ranges where the code point alone would count 2, and X's emoji parser also counts them as 2 when they are shown as emoji. A plain checkmark-like character that isn't an emoji can still count 2, because it lies outside the weight-1 ranges.
The meter shows the plain character count next to the weighted one so you can see the gap. When the two numbers are far apart, the reason is nearly always one of these: links, emoji, or a script that counts double.
Questions
Does a line break count as a character?
Yes. A line break is one character with weight 1, the same as a space. A post with four short paragraphs spends at least six characters on the breaks between them, since each blank line between paragraphs is two line breaks.
Do the @names at the start of a reply count?
Not when X adds them automatically because you pressed reply. Mentions you type yourself anywhere in the text count like any other characters.
Why do some accented letters look the same but count differently in other tools?
An accented letter can be stored as one code point or as a base letter plus a combining accent. X converts text to the composed form (NFC) before counting, so both versions of "café" count as 4. Simple counters that skip that step may count the decomposed version as 5.
Sources
Twittermeter is independent and not affiliated with X Corp. X changes its limits and features from time to time. If something here doesn't match what you see in the app, X's help center has the final word.