A post on X can hold 280 characters, but X does not count characters the way a word processor does. A link always counts as 23, whatever its length. Every emoji counts as 2. Chinese, Japanese and Korean characters count as 2 each, so those posts fit about 140. That is why a post that looks short can still be over the limit.
This page lists every text limit on X with the source for each one, explains the weighting rules from X's character counting documentation, and covers what to do when you have more to say than one post allows.
Every text limit on X
| Field | Limit | Source |
|---|---|---|
| Post | 280 characters | X counting characters |
| Longer post (X Premium) | 25,000 characters | About X Premium |
| Bio | 160 characters | How to customize your profile |
| Display name | 50 characters | Help with username registration |
| Username (handle) | 15 characters at most; letters, numbers and underscores only | Help with username registration |
The post limit is weighted, which the next section explains. The profile limits behave more simply: X's help pages say a bio over 160 characters cannot be saved, and a username cannot contain spaces. The username checker tests a handle against those rules as you type.
How X weights characters in a post
X counts each character with a weight of 1 or 2 and adds them up. The 280 limit applies to that weighted total, not to the number of symbols you see.
| Character type | Weight | How many fit in one post |
|---|---|---|
| Latin letters, digits, punctuation, spaces, common symbols | 1 | 280 |
| Emoji | 2 | 140 |
| Chinese, Japanese and Korean characters | 2 | 140 |
| Other Unicode | 2 by default | Varies |
- An emoji is always 2. A skin tone modifier does not add to it, and neither does a family or profession emoji built from several emoji joined together. X's documentation counts the four-person family emoji as 2.
- Accented letters count once. X normalises text before counting, so an é typed as one character or as e plus an accent both count as one.
- Styled letters usually count as 2. The bold and italic letters made by font generators are special Unicode symbols outside the ranges X weights as 1, so a word in fancy letters uses about twice the space. The font generator shows each style's count before you copy it.
Links, mentions, hashtags and media
| Content | How X counts it |
|---|---|
| Any URL | 23 characters, whatever its real length, because X wraps it with t.co |
| Mentions added automatically at the start of a reply | 0 |
| Mentions you type yourself | Counted normally, letter by letter |
| Hashtags | Counted normally: the # plus the text |
| Attached photos, GIFs and video | 0 |
Two consequences people miss. A short link such as example.com still uses 23, so shortening a URL by hand saves nothing. And a long URL costs no more than a short one, so there is no reason to trim a link that makes sense to readers. Typing a reply's mentions by hand, instead of letting X add them, does cost characters.
Free toolX character counterPaste a draft and see its weighted count with X's rules: links as 23, emoji and CJK as 2.When one post is not enough
There are three ways to say more than 280 characters allows, and they suit different things.
- Cut it. Most drafts over the limit carry a warm-up sentence and a closing restatement. Delete both and the point usually fits. This is the option that reads best in a fast feed.
- Write a thread. Split the text into numbered posts that each make sense alone. The thread splitter breaks long text at sentence boundaries into posts that fit, so no sentence is cut in half.
- Write a longer post. X Premium subscribers can post up to 25,000 characters and use bold and italic text. X's help page notes that you can edit a longer post for an hour after sending it. Readers see the first part in the feed and tap to expand the rest, so the opening still has to earn the click.
Counting characters in your own app
If you build anything that composes posts, do not count with string length. JavaScript's length property counts UTF-16 code units, so it reports an emoji as 2 and a family emoji as 11, and it knows nothing about the 23 character rule for links. X's documentation recommends its open-source twitter-text library, which applies the weights, detects URLs the way X does and normalises text first.
import { parseTweet } from "twitter-text";
const result = parseTweet("Hello, world! 👋");
result.weightedLength; // 16
result.valid; // trueThe example is the one in X's documentation: the fourteen characters before the emoji, including both spaces, weigh 1 each, and the emoji adds 2.
BuzzyX · X growth workspace
Grow on X with posts that sound like you.
Compose in your voice, schedule the week, find posts worth replying to and read real analytics from the X API. $29/mo after the trial, everything included.
Frequently
asked questions
Something else on your mind? Get in touch.
How many characters can an X post have?
280 for a standard post. X Premium subscribers can write longer posts of up to 25,000 characters.
Do spaces count toward the X character limit?
Yes. A space counts as one character, the same as a letter or a punctuation mark.
Do links count toward the 280 characters?
Yes, but always as 23 characters. X wraps every URL with its t.co shortener, so a link counts as 23 whether it is short or very long.
Why does an emoji use two characters on X?
X weights every emoji as 2 in its count, including emoji with skin tones and emoji built from several joined together. A post can therefore hold 140 emoji.
How long can an X bio be?
160 characters. X will not save a bio longer than that, so shorten it until the count is at or under 160.
Why can I only write about 140 characters in Japanese or Chinese?
X counts each Chinese, Japanese and Korean character as 2, so a full post holds about 140 of them. The rule exists because those scripts carry more meaning per character.