How Bluesky counts
Bluesky's 300 limit is measured in graphemes, the units a reader sees. This counter splits text the way the Unicode standard defines user-perceived characters, using your browser's built-in text segmenter.
In practice: letters, digits, spaces and punctuation count 1 each, like anywhere else. An emoji counts 1, including ones built from several parts: a flag, a family, an emoji with a skin tone. An accented letter counts 1 whether it was typed as one character or as a letter plus an accent mark. Line breaks count 1.
Plain text
Good morning = 12
Emoji with a skin tone
👋🏽 = 1
Flag
🇯🇵 = 1
Fitting a cross-post into 300
Posts written for Instagram or LinkedIn usually need cutting for Bluesky. Lead with the point, drop the hashtag block, and move detail into a reply.
If the same text goes to X as well, check it against both. For plain English, Bluesky allows 20 more characters than X (300 against 280), and an emoji costs 1 on Bluesky but 2 on X. Links work the other way: X counts every link as 23, while this counter counts a link's full text, so with a long link it errs on the safe side for Bluesky. A post that fits one can fail the other, so switch the platform in the counter before you publish to both.