X (formerly Twitter) limits standard posts to 280 characters; X Premium subscribers can post up to 25,000 characters in a single post. URLs always count as 23 characters regardless of length, most emojis count as 2, CJK characters (Chinese, Japanese, Korean) also count as 2, and mentions and hashtags count their full literal length. Those six rules are the entire X character-counting system. Understanding them changes how you draft, why some posts mysteriously hit the cap before they "look" full, and how to use X Premium's 25,000-char budget without burying the point.
This guide is the complete 2026 reference: the 280 and 25,000 rules, every edge case (URLs, emojis, CJK, mentions, hashtags), the other X length limits you need to know (bio, display name, DMs), practical writing tactics, and how X compares with every other major platform. For drafting, the Twitter character counter shows the live count for any text including all the special-case rules.
The 280 character rule (free tier)
The free X post limit has been 280 characters since November 2017. Before that, the limit was 140 (the famous original), which dated back to X's SMS-era roots when text messages had a 160-character total minus 20 reserved for the username. The 2017 doubling to 280 was justified by a study of "tweet length cramming": users frequently rewriting posts to fit 140 and losing meaning in the process. Removing the cramming requirement, X said, would let users say what they actually meant.
The 280 limit applies to: standard posts, replies, quote posts, poll text, and community posts. It does not apply to: direct messages (10,000 cap), bios (160), display names (50), or X Premium long posts (25,000). Within the 280 budget, every character counts including spaces, line breaks, punctuation, and the special-case rules below.
X Premium 25,000 character limit
In 2023 X introduced a paid tier (then called Twitter Blue, now X Premium and X Premium Plus) that lifted the post limit to 25,000 characters per post. The 25,000 limit applies to standard posts, replies, and quote posts for active Premium subscribers. It does not apply to non-subscribers, and a Premium user replying to a non-Premium post still uses the 25,000 budget if they want it.
A 25,000-character post is roughly 4,000 words, the length of a medium-format blog article. In practice most Premium users use the long format for: threaded-essay alternatives (one long post instead of a 30-post thread), technical analyses with code or data, and announcements where context matters more than virality. The first 280 characters appear above the "Show more" fold in the timeline; the rest expands on click.
The 25,000 limit does not change how URLs, emojis, or CJK count. A long Premium post with 50 URLs still counts each URL as 23 characters. A long Premium post in Japanese still counts each character as 2.
How URLs are counted (t.co wrapping)
Every URL on X is automatically wrapped through the t.co URL shortener at post time. The wrapped URL is exactly 23 characters long: https://t.co/ plus 10 unique characters. The original URL is preserved internally and shown in full when the post is viewed, but for character-count purposes only the 23- character wrapped form is counted.
This is true regardless of the actual URL length. A 30-character URL counts as 23. A 300-character URL with query parameters and UTM tags also counts as 23. This is one of the few generous rules in X character counting: long marketing URLs do not eat budget the way they do on other platforms.
A small consequence: every URL costs 23 characters even when the URL is short and you would prefer to show it in full. The X character counter (and our own Twitter character counter) handles this automatically; estimating by visible URL length will be inaccurate for anything shorter than 23 characters.
How emojis are counted
Most emojis count as 2 characters because they are encoded as multi-byte Unicode code points. A standard smile, heart, or thumbs-up emoji takes 2 of your 280 budget. Variant emojis (with skin-tone modifiers, gender variants, or zero-width joiners that combine multiple base emojis into one display) count as more, sometimes 4, 6, 8, or 11 characters for the heaviest compounds.
For example, a basic smile emoji is 2 characters. A skin-tone modified thumbs-up is 4 characters. A family-of-four emoji (which is a compound of four separate person emojis joined by zero-width joiners) is up to 11 characters. These numbers are not visible in the X composer until you have already typed the emoji, so a post that "looks" like it should fit can suddenly run out of room with one decorative compound emoji.
The practical takeaway: budget 2 characters per visible emoji as a safe default, and check the live counter after adding any skin-tone or family emoji. If you are using emojis as section dividers in a long Premium post, the cost is negligible. If you are using them for emphasis in a 280-char standard post, they can be the difference between fitting and not.
How CJK and non-Latin characters are counted
Chinese, Japanese, and Korean characters count as 2 characters each in X. That means a Chinese post of 140 characters uses 280 of the 280 budget, leaving no room for additional content. A 100-character Japanese post uses 200, leaving only 80 for hashtags, mentions, and any URLs. This 2-for-1 rule is one of the most common surprises for non-English X users.
The 2-for-1 rule is not a punishment; it reflects the information density of CJK glyphs. A single Chinese character often carries the meaning of an entire English word, so 140 Chinese characters can convey roughly the same content as 280 English characters. The character budget is calibrated so that posts in CJK and English carry roughly equal information per post.
Other non-Latin scripts generally count as 1 character per code point: Arabic, Hebrew, Devanagari (Hindi, Marathi), Cyrillic (Russian), and Thai all count close to 1 each, with occasional variation for diacritical marks and compound glyphs. The CJK 2x rule is the only one that materially changes the working budget.
How mentions and hashtags are counted
Mentions (like @example) and hashtags (like #marketing) count their full literal length, including the @ or # symbol. Unlike URLs, there is no special discount or character cap. A mention of @example is 8 characters. A hashtag like #digitalmarketing is 16 characters. A post with 10 hashtags can easily consume 100 to 150 of the 280 budget before any actual content.
This is one of the most common reasons posts feel "tight" without obvious cause: the writer counts the visible words and ignores the mentions and hashtags. A draft like "@example check out this great new feature from @brand and let me know what you think #saas #b2b #productlaunch #marketing #seo" uses 137 characters across the words and another 50+ on the mentions and hashtags.
Practical rule: budget mentions and hashtags first, then write the body to fit what is left. For high-hashtag posts, consider moving hashtags into a reply instead of the main post, which preserves the main post's character budget while keeping the discoverability benefit.
Display vs character count (line wrapping)
The 280-character limit is about characters, not display lines. A 280-character post can wrap to 6, 8, or 10 visible lines depending on the device and the user's text size settings. The post does not get truncated for line count; it just looks longer or shorter depending on how it wraps.
The exception is the timeline preview for long-form Premium posts (25,000 char limit). Those collapse to roughly the first 280 characters with a "Show more" link. So even on a Premium account, the first 280 characters are doing the heavy lifting for first-impression and click-to-expand decisions. Treat the first 280 as the hook even when you have 25,000 to work with.
Practical writing tactics under 280
A 280-character budget is tight. These tactics consistently fit more meaning in:
Drop articles where the meaning survives. "The team launched a new feature" becomes "Team launched new feature" (saves 7 characters with no loss of meaning).
Use ampersand for "and" in casual contexts. "&" saves 2 characters per instance. Not appropriate for formal posts, but useful for casual ones.
Move hashtags to a reply. A reply to your own post gets nearly the same discoverability and frees up 50 to 100 characters in the main post.
Use one URL or none. Each URL costs 23 characters. Two URLs cost 46. For most posts, one URL plus the right anchor text in the body is better than two URLs with thin context.
Cut redundant emojis. Each visible emoji is at least 2 characters. Three decorative emojis at the end of a post cost 6 to 30 characters depending on type. Pick one.
Write a draft over 280, then cut by 10%. Drafting tight from the start often produces stilted copy. Drafting at 320 and then cutting 40 chars usually reads better than drafting at 280 from the start.
Polls, threads, and replies
The 280 character limit applies separately to each post in a thread, to each reply, and to the parent of a poll. A 10-post thread has a total budget of 2,800 characters across all posts; a single Premium long post can cover the same ground in one post.
Polls follow a slightly different structure: the parent post still gets 280 characters, and each poll option gets 25 characters separately. Up to 4 options per poll. The 25-character option limit is one of the tightest budgets on X and rewards short, parallel option phrasing ("yes / no / maybe / depends" rather than full sentences).
Replies use the same 280 (or 25,000 for Premium) limit as standard posts. The @ handle of the person you are replying to does not count against the budget if you reply through the threaded interface, but does count if you type the @ handle into a fresh post.
Other X length limits
Beyond the post limit, several other fields have their own caps. Knowing these in advance saves debugging time when "the form will not save".
| Field or tier | Character limit | Notes |
|---|---|---|
| Free account post | 280 characters | Includes replies, quotes, polls |
| X Premium post | 25,000 characters | Collapsed with "Show more" in the timeline |
| X Premium Plus post | 25,000 characters | Same as Premium; no further extension as of 2026 |
| Direct message (free) | 10,000 characters | Separate budget from public posts |
| Display name | 50 characters | Includes spaces and emojis |
| Bio | 160 characters | Same as a meta description target |
| Username | 15 characters | Letters, numbers, underscore only |
| Poll option | 25 characters per option | 2 to 4 options per poll |
The bio at 160 characters is exactly the same length budget as a Google meta description, which is not coincidence: both are designed to be a one-line pitch that fits on a phone without scrolling. Writing the bio as a meta-description- style elevator pitch (hook plus credential plus link) is a useful translation of the SEO formula to social profiles. For drafting that bio against the same pixel-aware rules Google uses, the meta description length checker works perfectly: same 160-char ceiling, same readability target.
X length limits for developers and API users
For anyone building tools that post to X via the API, the character limits in the API match the limits in the consumer apps with a few extra quirks. The v2 Tweets endpoint enforces the same 280 character limit for free-tier user contexts and the same 25,000 for Premium contexts. The error response when a post exceeds the limit returns code 322 (or 186 in older API versions); a client built for the platform should handle that error gracefully.
URLs in API posts are still wrapped through t.co exactly as they are in the consumer apps, and the wrapped URL is what counts against the 280. This is worth coding against carefully: the character count of the raw URL submitted to the API differs from the count consumed in the post. For long URLs you can save effort by submitting a t.co-wrapped form yourself, but the platform will rewrap and the count will still be 23.
For drafting and validation outside the API, a free tool like the Twitter character counter applies the same special-case rules without an API call.
Detailed counting reference
For ambiguous cases, this is how X counts each element type. The counter inside the X composer follows these rules exactly.
| Element | Counts as | Note |
|---|---|---|
| Plain English letters | 1 character each | Standard alphabet, digits, punctuation |
| URL (any length) | 23 characters | Wrapped via t.co automatically |
| Simple emoji | 2 characters | Most face, hand, and object emojis |
| Compound emoji | 4 to 11 characters | Family, skin-tone, profession variants |
| CJK character | 2 characters | Chinese, Japanese, Korean glyphs |
| Arabic / Hebrew character | 1 character | Same as Latin generally |
| Mention (@username) | Full length including @ | No discount; mentions count |
| Hashtag (#tag) | Full length including # | No discount; hashtags count |
| Line break | 1 character | Single newline counts as 1 |
Comparison with other social platforms
X has the tightest standard-post limit of any major platform (280) and the highest paid-tier ceiling (25,000). Here is how it compares with the rest.
| Platform | Limit | Notes |
|---|---|---|
| X (free) | 280 chars | URLs always 23; CJK 2x; Premium 25,000 |
| Facebook post | 63,206 chars | Truncated at 477 in feed; "See more" expands |
| Instagram caption | 2,200 chars | 30 hashtags max; truncated at 125 chars in feed |
| LinkedIn post | 3,000 chars | Truncated at 140 in feed; comments cap 1,250 |
| TikTok caption | 4,000 chars | Increased from 300 in 2024; hashtags count |
| Threads post | 500 chars | Meta X competitor; no Premium tier |
| Bluesky post | 300 chars | Slightly longer than X free, no link wrapping |
| Mastodon post | 500 chars (default) | Per-server; some allow 5,000+ |
Notice that even X's free 280 limit is roughly half of Bluesky's 300 and well under Threads' 500. The 280 limit is now a signature constraint of the X user experience, not a technical necessity. For a fuller cross-platform view of length limits, see the character limits cheat sheet. For meta-description style writing for the X bio, see the meta description character limit guide.
The honest summary
X (Twitter) caps free posts at 280 characters and Premium posts at 25,000. URLs always count as 23 regardless of length. Most emojis count as 2; compound emojis count more. CJK characters count as 2 each. Mentions and hashtags count their full length. Everything else (Latin letters, spaces, punctuation) counts as 1 per character.
Knowing the special-case rules is the difference between drafts that fit and drafts that mysteriously hit the cap. Budget URLs at 23, hashtags by their actual length, and CJK at 2x. Then write the body to fit what is left. For a live count that handles every special case automatically, the Twitter character counter shows the exact deduction in real time.