How many characters can a Bluesky bio have?
A Bluesky bio, which the AT Protocol calls the profile description, allows 256 graphemes and 2,560 UTF-8 bytes. Most guides say "256 characters", and for everyday text that is the same thing. The precise unit is graphemes, and that matters as soon as your bio includes emoji, accents or non Latin scripts.
| Profile field | Grapheme limit | Byte ceiling | Notes |
|---|---|---|---|
| Bio (profile description) | 256 |
2,560 bytes | Plain text only. Links, emoji and line breaks count. |
| Display name | 64 |
640 bytes | Separate from your handle. Emoji allowed. |
| Pronouns | 20 |
200 bytes | Exists in the protocol. Not in the official app editor in the sources checked. |
| Website | Not capped by grapheme |
URI format | Exists in the protocol. Not in the official app editor in the sources checked. |
| Handle (custom domain) | 253 characters total |
DNS rules | Each dot separated label is capped at 63. About 244 is the practical maximum because verification adds a prefix. |
| Handle (name.bsky.social) | 3 to 18 characters |
DNS rules | This applies to the part before .bsky.social. |
| Post (for comparison) | 300 |
3,000 bytes | Not the same as the bio limit. |
Two mix ups come up again and again. The bio is not 300 like a post, and the display name is not 256 like the bio. The counter above has a tab for each field so you can draft them against their real limits.
What is a grapheme, and why does Bluesky count them?
A grapheme is one thing you would point at on screen and call a character, as defined by Unicode Standard Annex 29. Bluesky counts those, not the smaller pieces a computer stores underneath. That is why a single family emoji costs 1 against your 256, even though it is built from seven code points and takes 25 bytes.
| What you type | Graphemes | JavaScript length | UTF-8 bytes |
|---|---|---|---|
| Letter a | 1 | 1 | 1 |
| Letter é (e plus a combining accent) | 1 | 2 | 3 |
| Basic emoji, like a smiley | 1 | 2 | 4 |
| Flag emoji | 1 | 4 | 8 |
| Thumbs up with skin tone | 1 | 4 | 8 |
| Family emoji | 1 | 11 | 25 |
| One Japanese character | 1 | 1 | 3 |
| Devanagari conjunct (क्षि) | 1 | 4 | 12 |
| Line break | 1 | 1 | 1 |
These numbers were counted with the same Intl.Segmenter engine the tool uses. A counter built on plain JavaScript string length would read that family emoji as 11 and a flag as 4. Those tools overcount, so you might trim words you never had to cut. Fifteen flags cost you 15 graphemes on Bluesky, but a naive counter reports 60.
It is also different from X. X applies weighted counting where Japanese, Chinese and Korean text is counted double on the free tier. On Bluesky a Japanese character is 1 grapheme, exactly like an English letter.
Why can my bio fail when the counter says I am under 256?
Because of the second ceiling. Every Bluesky text field has a grapheme limit and a byte limit, and the bio byte limit is 2,560. For plain English it can never be the problem, since a Latin letter is 1 byte and 256 letters is 256 bytes.
| 256 of this | Bytes used | Under 2,560? | Where the byte ceiling stops you |
|---|---|---|---|
| Latin letters and spaces | 256 | Yes | Never before 256 graphemes |
| Japanese, Chinese or Korean characters | 768 | Yes | Never before 256 graphemes |
| Basic emoji | 1,024 | Yes | Never before 256 graphemes |
| Devanagari conjuncts like क्षि | 3,072 | No | At 213 conjuncts |
| Family emoji | 6,400 | No | The 103rd one breaks it |
Here is the family emoji case in plain numbers. 102 of them is 2,550 bytes and still fits. The 103rd takes you to 2,575 bytes and the save fails, even though you are only at 103 of your 256 graphemes. If you love emoji heavy bios, watch the byte readout as well as the grapheme ring.
Can two grapheme counters disagree?
Yes, in rare cases, and it is not a bug in your counter. Unicode changes over time, and the rules for grouping characters into graphemes have been updated for some scripts. A GitHub report on the AT Protocol repository showed the Hindi word नमस्ते counted as 4 graphemes by an older library and 3 by the current standard. Bluesky engineers acknowledged that counts can shift between Unicode versions and implementations, and that the code now uses the browser style Segmenter when it is available, with a fallback library.
What this means for you: for English, accents and common emoji, expect exact agreement. If you write in an Indic script or use the newest emoji, leave yourself a small buffer of a few graphemes.
Do links count toward the Bluesky bio limit?
Yes, and they count at the length you type. Bluesky has no fixed link length like the 23 characters X uses or the 23 characters Mastodon uses. Your bio is stored as one plain text string in the profile record, and the app finds links when it displays your profile. There is no link markup to shorten, so what you type is what you spend.
Posts behave differently, which is a big reason for the confusion online. In the official app, the post composer swaps long URLs for a shortened display form and counts that shorter form. One 2026 analysis measured a 54 character docs link costing 29 in a post. Some counters still tell you links cost 22 characters, and some say they cost nothing. Neither is right for a bio.
A few ways to protect your budget:
- Use the shortest domain you own, or a short link in bio page if you need several destinations.
- Try leaving off the https:// prefix, which saves 8 graphemes. After saving, tap your profile link to confirm it still opens, because a bare domain only becomes tappable if the app recognizes it as a web address.
- Write the bio first and add the link last. If it does not fit, change the link, not the pitch.
- Pin a post for extra room. Bluesky supports one pinned post, and a post can hold 300 graphemes against the bio's 256.
- Paste any URL into the link cost helper in the tool to see exactly what it leaves you.
Do emoji, line breaks and formatting count?
Emoji cost 1 grapheme each, however complex. Line breaks cost 1 each, and there is no separate limit on how many lines you can have. Spaces and punctuation cost 1 each. There is no free allowance for anything.
The bio is plain text. There is no bold, no italics, no markdown and no custom link text. If you type asterisks around a phrase, visitors see the asterisks. Your real formatting tools are capital letters, emoji, a separator such as a middle dot or a vertical bar, and line breaks.
You may see fancy font generators that swap in Unicode lookalike letters. They can look fun, but some of those generator sites warn that styled text can break screen readers and search, and Bluesky has a lot of accessibility minded users. For a bio you want people to find and understand, plain letters are the safer choice.
Does Bluesky have a website field or a pronouns field?
Inside the protocol, yes to both. A profile update from September 24, 2025 added an optional website field that takes a URL, and a pronouns field capped at 20 graphemes and 200 bytes. Inside the official app, the sources I checked in mid 2026 show an editor with just avatar, banner, display name and bio. That means the app has not surfaced either field yet, though a third party client can write them.
So what do people do today?
- For links: paste the URL into the bio and pay for it in graphemes.
- For pronouns: add them to the display name or the bio, use a third party client that supports the field, or use a pronouns labeller. The original labeller disappeared and a replacement appeared in February 2026.
This can change with any app update, so it is worth a quick look at your own Edit Profile screen. For comparison, Mastodon gives you four labeled link fields and a way to verify them.
How long should a Bluesky bio be?
There is no official ideal, and here is the interesting part: almost nobody fills the space. In a July 2026 sample of 3,712 Bluesky accounts, 52.2% had no bio at all. Among accounts that did have one, the median length was 118 graphemes, under half the allowance, and only 7.2% came within six graphemes of the cap.
So the real question is not "how do I fit in 256?" It is "what do I say so a stranger follows me?" A clear bio of around 100 to 150 graphemes puts you at or above the median. The rest is optional room. A simple three part shape works well:
- Lead with your niche. The first words should make your category obvious. "Indie game dev posting devlogs" beats "creative human making things."
- Give a reason to follow. Say what shows up in their feed: tips, news on a beat, daily drawings, behind the scenes.
- End with one signpost. A link to your newsletter, portfolio or main project.
Be specific rather than generic. "Writing about seabirds and bad maps" tells someone far more than "lover of life and coffee." Use a separator like a middle dot to pack several ideas into one scannable line, and skip repeating your display name, since it is already shown right above your bio.
Your bio is also your search snippet
Bluesky profile pages are public web pages. When I checked a public profile, the page description and the social preview description were both the bio text itself. That means your bio can show up as the snippet when someone finds or shares your profile link.
Search engines choose their own snippet length, and it changes, but a common range is roughly 150 to 160 characters. So put the words a person would actually search, such as your job, topic or community, in the first line, and keep the important part inside the first 150 or so graphemes. The search preview in the Bio tab shows exactly where that cut lands on your draft, using your display name as the result title. A domain you own as your handle also acts as built in proof that the account is really you.
Five Bluesky bio templates, counted
Each of these was counted with the same grapheme engine as the tool. Domains are placeholders, so swap in your own. Each one also loads into the Bio tab with a single click on the template chips, so you can start from a template and edit it against the live counts.
Notice that none of them spends even half of the budget. That is the point. You have room for a location, a second proof line or another link if you want one.
How does the 256 limit compare with other platforms?
Bluesky is more generous than most big networks for bios, and only Mastodon and Pinterest give you more space.
| Platform | Bio limit | How it compares with Bluesky's 256 |
|---|---|---|
| Bluesky | 256 graphemes |
Links count at the length you type. 2,560 byte ceiling. |
| Mastodon | 500 characters by default |
Almost double, and every link counts as just 23 characters. Also has four labeled link fields. |
500 characters |
Same space as Mastodon. Older comparison tables still quote the previous 160 limit. | |
| X | 160 characters |
Bluesky gives you 96 more, or 60% more room. |
150 characters |
Bluesky gives you 106 more, about 71% more. | |
| Threads | 150 characters |
Same as Instagram. Bluesky gives you 106 more. |
| TikTok | 80 characters |
Bluesky gives you more than three times the space. |
Limits on other platforms change from time to time, so check the official help page of any network before you rely on its number. The Mastodon figures come from its official documentation.
Can I copy my X bio into Bluesky?
Almost always. A full 160 character X bio fits with about 96 graphemes left over, and emoji cost less on Bluesky than on tools that count raw characters. Two things to watch: any @mention or link is plain text and costs whatever you type, and a Mastodon bio of up to 500 characters may need trimming to fit 256. Paste it into the Bio tab and you will know in a second.
Other Bluesky text limits at a glance
If you are here for a different field, this table covers the rest. For posts, DMs and alt text, the full Bluesky character counter checks those fields live. These figures were read from the AT Protocol lexicons and the Bluesky app source in July 2026.
| Field | Limit | Note |
|---|---|---|
| Post | 300 graphemes, 3,000 bytes | Whichever you hit first |
| Direct message | 1,000 graphemes, 10,000 bytes | |
| Hashtag | 64 graphemes, 640 bytes | Per tag |
| Image alt text | 2,000 graphemes | A limit set by the official app, not the protocol |
| Video alt text | 2,000 graphemes | App level limit, same as images. The lexicon's old 1,000 cap was removed. |
| Feed name | 24 graphemes, 240 bytes | |
| Starter pack name | 50 graphemes, 500 bytes | |
| List name | 64 bytes only | No grapheme allowance, so non Latin names fit fewer characters |
| List, feed and starter pack descriptions | 300 graphemes, 3,000 bytes |
How to use the Bluesky bio counter
- Pick your field. Open the Bio tab for the 256 grapheme profile description, the Display Name tab for the 64 grapheme name, or the Pronouns tab for the 20 grapheme field.
- Type or paste your draft. Or start from one of the five counted templates. The grapheme count, words, lines, emoji and UTF-8 bytes update on every keystroke, and the search preview shows how your bio reads as a snippet.
- Read the color signal. Blue means you are comfortably under the limit, amber means you are close, and red means you are over and need to trim.
- Test your link. Paste your URL into the link cost helper to see how many graphemes it takes from your 256 budget before you add it.
- Copy it into Bluesky. Press Copy, then paste the text into Edit Profile in the Bluesky app or on bsky.app and save.
Every tab has its own Clear and Copy buttons. The counter runs in your browser, so your draft is never uploaded or stored.