Bluesky Character Counter

Bluesky character counter — the 300-grapheme rule, counted properly

Bluesky enforces 300 graphemes per post — not 300 UTF-16 units, not 300 bytes. Paste your post, get the same grapheme-strict count AT Protocol uses, plus the 22-character URL shorthand and the 2,000-character alt-text allowance for images.

0 characters0 words0 lines
Post
Empty
0/ 300
Engagement sweet spot: 100240
Bio / Description
Empty
0/ 256
Display name
Empty
0/ 64
Image alt-text
Empty
0/ 2,000
Every Bluesky field Matches Bluesky's own rules Runs in your browser No signup

Bluesky is the only major social platform that measures posts in graphemes rather than characters — and it enforces the 300-grapheme cap at the protocol level, which means a post that looks 298 characters long in another counter can still be rejected by Bluesky if it has too many zero-width-joined emoji clusters. The counter on this page uses the same grapheme segmentation Bluesky's AT Protocol uses (via Intl.Segmenter), so what you see here is what the network will see. URLs count as 22 characters — slightly shorter than X's 23 — and bios have a generous 256-grapheme budget. Image alt-text is one of the widest in social at 2,000 characters per image, something to take advantage of for accessibility reach.

Every Bluesky character limit, in one table

Hard caps, visible-in-feed truncation, and engagement sweet spots for each Bluesky field.

FieldHard limitVisible in feedIdeal range
Post300100–240
Bio / Description256
Display name64
Image alt-text2,000

What counts as one character on Bluesky

Letters are easy. Emoji, URLs, hashtags, and line breaks are where platforms disagree. Here is how Bluesky counts them.

ContentCounts asNote
Letter, number, space, punctuation1 grapheme
Emoji (any kind)1 graphemeIncludes ZWJ sequences, skin-tone modifiers, flags — all one grapheme each under AT Protocol rules.
URL (any length)22 graphemesEvery URL counts as 22 regardless of actual length. One fewer than X's 23.
Hashtag (#example)Actual length including #
Mention (@handle.bsky.social)Actual length including @
Line break1 grapheme
Composed characters (e.g. é typed as e + combining accent)1 graphemeEven if internally 2 code points, Bluesky's tokenizer treats it as 1 — matches what a reader sees.

Writing to the 300-grapheme budget

Bluesky's 300-grapheme ceiling is tighter than Threads and Instagram but slightly more than X's 280. The culture, however, is different: Bluesky rewards substance over brevity, and the 300-grapheme limit gets used more fully than X's 280 does.

1

Aim for 150–250 graphemes on most posts

Engagement data from 2024-2025 shows this is the sweet spot on Bluesky. Longer than X averages, shorter than LinkedIn.

2

Budget 22 graphemes per URL

Every URL counts as 22, even short ones. A post with two URLs has 44 of its 300 budget gone before you start writing.

3

Use image alt-text for the long story

Bluesky alt-text is 2,000 characters — huge. Screen-reader users benefit, and every post with meaningful alt-text sees better reach from the accessibility-first Bluesky community.

4

Don't waste graphemes on zero-width tricks

Zero-width characters still count at 1 grapheme each in AT Protocol. There is no spacing hack like the Instagram caption trick.

5

Reply threads are the long-form mechanism

Bluesky has no Premium-tier long posts, no text attachments, no way to break the 300 cap. For long content, a reply chain is it — and each reply still gets its own 300 budget.

What people use the Bluesky counter for

Bluesky-specific workflows from the creators and teams using this tool.

Writing posts that don't trip AT Protocol's strict grapheme check

Bluesky rejects posts over 300 graphemes at the API layer — not just the UI — so a message that looks fine in a different counter can still fail to post. Using a grapheme-aware counter here avoids that failure.

Cross-posting from X to Bluesky

X tweets at 280 almost always fit on Bluesky (300 cap, URLs 22 not 23). Paste from X — you usually have 20+ graphemes of slack to add context.

Writing alt-text that actually ranks

Bluesky's 2,000-char alt-text is both an accessibility win and a soft SEO lever — alt-text is indexed. Draft alt-text here to use the full budget without fear of hitting a hidden cap.

Building a 256-char bio that includes a link

The 256-grapheme bio is wide enough for a meaningful sentence plus a URL. Draft in the counter to avoid trimming mid-thought.

Bluesky character counter — FAQ

What is the Bluesky post character limit in 2026?+

300 graphemes. The limit is enforced at the AT Protocol level, not just in the Bluesky client app, so third-party clients and scheduling tools that exceed it get rejected. The number has been stable since Bluesky's public launch in early 2024.

Why does Bluesky count graphemes instead of characters?+

Because grapheme count matches what a human reads. A flag emoji 🇬🇧 is internally two Unicode code points and four UTF-16 units but it displays as one symbol. AT Protocol counts it as one grapheme, which is the fairest budgeting approach — you get charged for what you see, not for the internal encoding.

How does Bluesky count URLs?+

Every URL counts as exactly 22 graphemes — one fewer than X's 23, but the same idea. Short URLs, long URLs, bare domains with paths — all count as 22. So a Bluesky post with two URLs loses 44 graphemes from its 300 budget before the writing starts.

What is the Bluesky bio character limit?+

256 graphemes for the profile description — more generous than most platforms, enough for a full sentence with links and mentions. Display name is a separate 64-grapheme field.

How long is Bluesky image alt-text?+

Up to 2,000 characters per image, and you can attach up to four images per post — so effectively 8,000 characters of alt-text per post. That is by far the widest alt-text budget of any major social platform, and Bluesky's accessibility-first culture means using it reliably boosts reach.

Can I post more than 300 graphemes by threading?+

Yes — reply chains are the long-form mechanism on Bluesky. Each reply gets its own 300-grapheme budget. SocialCal's Bluesky integration will auto-split long drafts into a proper numbered thread with correct reply targeting.

Counters for other platforms

More Free Tools

Explore our full suite of free social media tools — no signup required.

Schedule Bluesky posts with this counter built in

SocialCal is one of the few schedulers with native Bluesky support (via AT Protocol) — it enforces the 300-grapheme limit inside the composer, queues posts, and auto-splits longer drafts into a reply chain.

Start free trial