The 300-Grapheme Standard
On most text-based social platforms, the "character count" is a source of constant frustration. Youโve likely experienced the annoyance of a single emoji taking up several "spaces" in your count because the platform calculates length based on bytes or UTF-16 code units.
Bluesky avoids this technical debt by using grapheme clusters. The platform sets a hard limit of 300 graphemes per post. Behind the scenes, the post format also caps a post at 3,000 bytes. Ordinary text never gets close, but a post packed with complex emoji can, since a single family emoji takes 25 bytes or more.
For the average user, this feels like 300 characters. But for power users using international scripts or complex medical/technical symbols, it is a significant upgrade in creative space. A grapheme is essentially what a human perceives as a single unit of text. Whether it is the letter "a" or a complex emoji like ๐ฉ๐พโ๐ฉโ๐งโ๐ฆ (which technically consists of multiple Unicode points), Bluesky counts it as one unit towards your 300-limit.
Graphemes vs. Characters: The Technical Difference
To understand why Bluesky feels different from X (Twitter) or Threads, you have to look at how text is measured. Most older systems used UTF-16 code units. In those systems, a skin-tone modified emoji might count as 2 or 7 characters because of the hidden "zero-width joiners" (ZWJ) and modifiers required to render the image.
On Bluesky, the limit is based on user-perceived characters. This is handled via the Unicode Segmenter. For writers, this means you no longer have to sacrifice inclusivity (like using diverse emojis) to save space for your actual message.
If you are drafting content in a standard word processor, your count will likely be inaccurate. Use our character counter, which counts graphemes the way Bluesky does, to check a draft before you post.
How Links and Mentions Impact Your Limit
One of the most nuanced aspects of the bluesky character limit is how it handles "facets." Facets are the rich-text elements in a post, such as mentions (@handle), links (https://boldlytype.com), and hashtags (#writing).
Automatic Link Handling
Unlike X, which uses a t.co wrapper to make every link exactly 23 characters, Bluesky counts links based on the visible text, and the official app shortens that text for you.
If you paste a long URL like https://boldlytype.com/blog/bluesky-character-limit (51 characters), the app displays it as boldlytype.com/blog/bluesky..., the domain plus the first 13 characters of the path, and counts only those 30 characters. The link itself still points to the full address. Bluesky also supports "link cards." When you paste a link and the app generates a preview card, you can often delete the plaintext URL from the body of the post to regain those characters. The card remains, but your character count drops.
Mentions and Handles
Mentions are perhaps the most punishing part of the Bluesky limit. Because Bluesky uses decentralized handles (e.g., @user.bsky.social or @editor.boldlytype.com), a single mention can easily take 20 or more graphemes (@editor.boldlytype.com alone is 22). This is a common pain point for "Ratio" threads or attribution-heavy posts.