Skip to content
Part of: How-to format
How-To

The Bluesky Character Limit: Why Graphemes Change Everything

Bluesky enforces a 300-grapheme limit, which counts complex emojis and accented characters as single units, unlike legacy byte-counting systems. Understanding this distinction is key to maximizing post length without error messages.

Shreyas BagalยทJun 14, 2026ยท5 min

Bluesky enforces a 300-grapheme limit, which counts complex emojis and accented characters as single units, unlike legacy byte-counting systems. Understanding this distinction is key to maximizing post length without error messages.

Key takeaways

  • Bluesky enforces a strict 300-grapheme limit per post
  • Graphemes prevent complex emojis from eating up your character count
  • Links are counted by their displayed text, not the hidden URI length
  • Rich text facets like mentions and links are handled differently than on X (Twitter)
The Bluesky Character Limit: Why Graphemes Change Everything
On this page

Data

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.

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).

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.

Example: Counting a Multi-Emoji Post

Here's how the same short post counts under different methods.

The Text Sample: "Meeting the team today! ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ๐Ÿผโœจ"

  • Unicode code points: 32. The text is 24 characters, and the emoji pair plus the sparkles add 8 code points between them.
  • UTF-16 code units: 37, because most emoji take two units each. Systems that count this way would charge 37.
  • Bluesky's count (graphemes): 26. The two women holding hands, with their skin tones and joiners, form a single grapheme, and so does the sparkles emoji โœจ.

Because Bluesky counts what a reader sees as one character, emoji-heavy posts use far less of the 300-character limit than their underlying code would suggest.

Truncation and Display Behavior

When a post exceeds the 300-grapheme limit, the Bluesky client (the official web and mobile app) will typically highlight the overage in red and disable the "Post" button.

On the timeline, Bluesky usually shows the whole post. The official app only cuts off posts in the feed when they run to 25 lines or more, so a 299-grapheme post is normally visible in full to anyone scrolling. That makes Bluesky a high-signal environment where your punchline isn't hidden behind a click, as long as you don't stack dozens of line breaks.

Formatting Strategies for Bluesky

To make the most of your 300 units, consider these professional formatting tips:

  1. Leverage the Alt Text: The official app allows up to 2,000 characters of alt text per image. If you have deep technical details that don't fit in the main 300-grapheme post, include them in the alt text for accessibility and data-density.
  2. Thread Braiding: If your thought exceeds 300 graphemes, create a thread. Blueskyโ€™s UI handles threads elegantly, but remember that the first post needs to be the hook. Keep the hook under 250 graphemes to allow for eye-catching white space.
  3. The Handle Hack: If you are mentioning someone with a very long domain-based handle, try to place the mention at the end of the post. This ensures the "meat" of your content isn't interrupted by a 40-character string.
  4. Check the Count First: Paste each post of a thread into our character counter, which counts graphemes like Bluesky does. It counts pasted links at full length, so it errs on the safe side.

Why 300?

The choice of 300 is deliberate. It is slightly longer than the 280-character limit Twitter adopted in 2017 but shorter than the long-form essays found on LinkedIn or the paid version of X. This limit encourages "at-a-glance" reading while giving just enough room for the nuance that 280 often lacked.

By focusing on graphemes, Bluesky effectively future-proofs its platform for global languages where a single "character" (like a Kanji or an Arabic ligature) carries significantly more information than a single Latin letter. It levels the playing field for international users, ensuring that 300 units of meaning are available to everyone, regardless of their language's byte size.

Ready to put this into practice?

Open a formatter

Spotted an error? Email hello@boldlytype.com โ€” we update guides when platforms change and welcome corrections.

Frequently asked questions

Latest questions readers ask us about this topic.

How many characters is the Bluesky limit?

The limit is exactly 300 graphemes. This usually translates to about 300 human-readable characters, including spaces and punctuation.

Does Bluesky count spaces in the character limit?

Yes, every space counts as one grapheme toward your 300-unit total.

Are links shortened automatically on Bluesky?

Partly. Bluesky doesn't route links through a shortener like X's t.co, but the official app shortens how a long URL appears in your post (the domain plus the start of the path, then "...") and counts only that shortened text. The full link still works. You can also let a link card show the preview and delete the pasted URL to save space.

Do emojis count as more than one character on Bluesky?

No. Unlike older platforms, Bluesky counts even the most complex skin-tone or gender-modified emojis as a single grapheme.

The sub-questions readers ask next โ€” answered, with where to go.

Bluesky uses grapheme counting, which treats each visible character unit as one regardless of its underlying byte size, so a complex emoji like a family or a flag counts as a single grapheme. Twitter (now X) uses a weighted code-point system where most emojis count as 2 toward its 280-character limit, because emojis are often built from multiple Unicode code points joined together. Bluesky's 300-grapheme cap therefore lets you include more emojis and accented characters without burning extra count. For example, an emoji built from four joined code points still costs you just 1 of your 300 graphemes on Bluesky, but the same emoji would consume 2 on X. This grapheme-based approach reflects what a reader actually sees rather than how the text is encoded.

Open the Bluesky formatter

A Bluesky post holds up to 300 graphemes, and accented letters each count as a single grapheme even when they are encoded with multiple Unicode code points. A letter like e with an acute accent can be stored as a base e plus a combining accent mark, which is two code points and several bytes, yet Bluesky counts it as just 1 toward your 300 limit. This means languages with heavy diacritics, such as French, Spanish, Vietnamese, or Polish, do not lose post length to accents the way byte-counting systems penalize them. The result is a more equitable limit across languages: 300 visible characters are 300 visible characters, whether they are plain ASCII letters or richly accented glyphs.

Count your graphemes

A grapheme is a single user-perceived character, the smallest unit a reader recognizes as one symbol, even if it is built from several underlying Unicode code points or bytes. Bluesky counts its 300-character limit in graphemes so the count matches what people actually see on screen. Byte counting, used by older systems, measures storage size, so a single emoji or accented letter could consume 4 or more bytes and unfairly eat into a limit. Code-point counting splits emoji clusters into their parts. Grapheme counting clusters those parts back into one unit, meaning a flag emoji, a skin-toned thumbs up, or an accented vowel each cost exactly 1. This keeps the limit intuitive and fair across emojis, scripts, and languages worldwide.

Learn formatting basics

Related in this series

See all in How-to format

Explore the topic cluster

More tools and guides across this topic cluster.

Get the next post.

Craft notes on writing for the internet. One short email, every other week. No spam.

Keep reading