2026-07-02
X does not count characters one for one. This guide explains the weighted counting rules — which scripts cost 2, why every URL costs exactly 23 — and lists every field limit.
X allows 280 characters per post on a free account and 25,000 on a Premium subscription. The Premium figure is less useful than it appears: only the first 280 characters render in the timeline, with the remainder collapsed behind a "Show more" link. For anything that must be read without an extra tap, 280 remains the number that matters.
| Field | Limit |
|---|---|
| Post (free account) | 280 weighted characters |
| Post (X Premium) | 25,000 characters |
| Direct message | 10,000 characters |
| Bio | 160 characters |
| Display name | 50 characters |
| Username (@handle) | 15 characters |
| Location field | 30 characters |
| Poll option | 25 characters each |
| List name | 25 characters |
| List description | 100 characters |
| Image alt text | 1,000 characters |
X is the only major platform that does not count characters one for one. It uses a weighted system, published as part of the open-source twitter-text library, in which each character costs either 1 or 2 units depending on where it falls in Unicode. The 280 limit is a budget of weighted units, not of characters.
The rule itself is simple once stated precisely: characters in the Unicode range U+0000 to U+10FF cost 1 unit, and everything outside that range costs 2. What makes this widely misreported is that the range is far broader than "English" or even "Latin".
| Script | Cost per character |
|---|---|
| Latin (English, French, Vietnamese…) | 1 |
| Greek | 1 |
| Cyrillic (Russian, Ukrainian…) | 1 |
| Hebrew | 1 |
| Arabic | 1 |
| Thai | 1 |
| Devanagari (Hindi, Marathi…) | 1 |
| Japanese (kana and kanji) | 2 |
| Chinese | 2 |
| Korean (hangul) | 2 |
| Emoji | 2 |
The common claim that "non-English characters count as two" is therefore wrong. Arabic, Hebrew, Thai, Hindi, Russian and Greek all count as one, exactly like English. The characters that cost two are, in practice, CJK scripts and emoji.
Because each CJK character costs two units, the effective allowance is 140 characters rather than 280. This is the single most consequential fact about posting on X in these languages, and it is why a Japanese post that fits on Threads will often not fit on X.
| Language | Weighted limit | Characters you can actually type |
|---|---|---|
| English | 280 | 280 |
| Russian | 280 | 280 |
| Arabic | 280 | 280 |
| Japanese | 280 | 140 |
| Chinese | 280 | 140 |
| Korean | 280 | 140 |
Mixed-script posts are charged proportionally. A post combining 100 Latin characters with 50 Japanese characters costs 100 + 100 = 200 units, leaving 80 units — that is, 80 more Latin characters or 40 more Japanese ones.
X automatically rewrites every link through its t.co shortener, and charges a fixed 23 units for it regardless of the original length. This applies whether the URL is 15 characters or 300, and it applies even though the full link is what appears in the rendered post.
The practical rule is to paste long links directly into X and to shorten them everywhere else. Applying the same habit across platforms is the most common source of miscounted drafts.
Mentions typed inside the body of a post, as opposed to the automatic ones at the start of a reply, are counted at their literal length like any other text.
A plain character counter will misreport any X post containing a link, an emoji or CJK text, sometimes by a wide margin — a draft that appears to be 250 characters can be well over the limit once weighting and the 23-unit URL cost are applied.
PostLen implements the weighted rules and the fixed URL cost, so the number shown is the number X will use. It counts the same draft against Threads, Instagram, LinkedIn, YouTube, TikTok and meta descriptions at the same time, which makes the differences between platforms visible while you are still writing.
280 weighted units on a free account and 25,000 for X Premium subscribers. Only the first 280 characters are visible in the timeline before a "Show more" link, regardless of tier.
About 140. Japanese, Chinese and Korean characters each cost two weighted units against the 280 budget.
No — this is a widespread misconception. Only characters above U+10FF cost two, which in practice means CJK scripts and emoji. Arabic, Hebrew, Thai, Hindi, Russian and Greek all count as one, the same as English.
Exactly 23, whatever its actual length, because X routes every link through its t.co shortener. Shortening a URL before posting therefore saves nothing on X.
No. Up to four images, or one GIF or video, can be attached without using any of the 280 units.
Yes, but only the first 280 appear in the timeline before the post is collapsed behind "Show more", so the opening 280 still determine whether anyone reads the rest.
PostLen counts your draft against every platform in this article at the same time.
Try PostLen →