Published: April 2026 | Last Updated: April 2026

Person typing on a laptop keyboard

Photo by Szabó Viktor on Pexels

Quick Answer

Bluesky posts allow up to 300 characters. Bios support 256 characters, and display names can be up to 64 characters.

All Bluesky Character Limits

FieldCharacter LimitNotes
Post300Measured in grapheme clusters (visible characters)
Bio / Description256Your profile description
Display Name64Your visible name
Handle253Domain-based handles (e.g., user.bsky.social)
Reply300Same limit as standard posts
Alt Text2,000Image accessibility descriptions
List Name64Custom list names
List Description300Description for custom lists

Tips for Bluesky Posts

Check Your Character Count

Draft your Bluesky post in our free word counter tool and check the character count before publishing.

Count Your Words Now

Paste your text into our free word counter tool to instantly count words, characters, sentences, paragraphs and pages.

Open Word Counter

Frequently Asked Questions

What is the Bluesky character limit?

Bluesky allows up to 300 characters per post. This is 20 characters more than Twitter's free tier but 200 fewer than Threads.

How does Bluesky count characters?

Bluesky counts grapheme clusters (visible characters). This means emojis count as 1 character each, which is more intuitive than platforms that count Unicode code points.

What is the Bluesky bio character limit?

Bluesky bios (profile descriptions) can be up to 256 characters.

Can you use a custom domain as your Bluesky handle?

Yes. Bluesky supports custom domain handles (e.g., @yourdomain.com) as a way to verify your identity. The handle field supports up to 253 characters.

Where this data comes from

The sources and check dates in this table come from one versioned data file — the place we record every check we make. The rest of this page, and the limits built into our tools, are still separate copies, so when we correct a figure we correct it in each place. This table is how we keep ourselves honest while we do.

We've checked some of these figures, not all of them yet

Some figures on this page have been checked against the platform's own documentation — those show a source and the date we checked. The rest came across from our older pages and haven't been checked yet, so they say so. We'd rather show you which is which than print a date we haven't earned.

Still to be checked against: Bluesky documentation (docs.bsky.app) and the AT Protocol lexicon

Field Limit Notes Source Last checked
Post 300 Measured in grapheme clusters (visible characters) — VERIFIED 2026-09-19 directly against the AT Protocol lexicon. The text field actually carries TWO simultaneous constraints: maxGraphemes: 300 AND maxLength: 3000 (measured in UTF-8 bytes, not characters). Both apply at once — a post must satisfy both. In practice the 300-grapheme cap binds first for almost all real text; the byte cap only matters for text using many multi-byte-per-grapheme scripts. https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/post.json 2026-09-19
Bio / Description 256 Your profile description https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/actor/profile.json 2026-09-19
Display Name 64 Your visible name https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/actor/profile.json 2026-09-19
Handle 253 Domain-based handles (e.g., user.bsky.social). VERIFIED 2026-09-19: 253 ASCII characters maximum overall (each dot-separated label 1-63 chars), matching DNS name rules. The spec separately recommends handles stay at or under 244 characters in practice. https://atproto.com/specs/handle 2026-09-19
Reply 300 Same limit as standard posts — VERIFIED 2026-09-19: replies use the identical text field and constraints as posts (maxGraphemes 300, maxLength 3000 UTF-8 bytes). https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/post.json 2026-09-19
Alt Text 2,000 Image accessibility descriptions. FLAG 2026-09-19: checked directly against the AT Protocol lexicon (app.bsky.embed.images.json and app.bsky.embed.video.json) — the alt/caption string field carries NO maxLength or maxGraphemes constraint at all. The widely-cited "2,000" figure is not protocol-enforced and could not be confirmed via docs.bsky.app (the domain now redirects and renders JS-empty to automated fetch). This may be a client-UI-only convention rather than a hard limit. Value left unchanged pending a human check — flagged as a figure whose accuracy is now actively in question, not merely unsourced. No source recorded Not yet verified against the platform’s own documentation
List Name 64 Custom list names. VERIFIED 2026-09-19: constrained by maxLength: 64 UTF-8 BYTES — unlike the other "64" figures on this platform (e.g. display_name), this field has no maxGraphemes constraint at all, so it is not directly comparable to the grapheme-based fields. https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/graph/list.json 2026-09-19
List Description 300 Description for custom lists https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/graph/list.json 2026-09-19

What our counters measure

Most counters on this site measure UTF-16 code units — the unit JavaScript uses when you ask a piece of text how long it is. The exception is X: our Twitter counter and the X row of our social media counter follow X's own published counting rules, so Chinese, Japanese and Korean characters and emoji count as two each, and every link counts as 23. UTF-16 matches what many platforms do, and it doesn't match what all of them do.

This platform counts differently from our counters, so our count can be wrong about whether your text fits. Treat a near-miss here as a maybe, not a no.

Related Tools & Guides

Further Reading