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

How to Format Text on Bluesky: Bold, Italic & Styling Options

Bluesky has a built-in rich text toolbar for posts: select text and apply bold, italic, strikethrough, or links directly. No Markdown syntax is involved.

BoldlyTypeΒ·Jul 13, 2026Β·7 min

Bluesky has a built-in rich text toolbar for posts: select text and apply bold, italic, strikethrough, or links directly. No Markdown syntax is involved.

Key takeaways

  • Bluesky has a built-in rich text toolbar for posts: select text and apply bold, italic, strikethrough, or links directly. No Markdown syntax is involved.
  • The toolbar only works in the post compose box. Display names and bios are plain text fields with no native formatting controls.
  • For styled display names and bios, paste Unicode styled characters from a generator like BoldlyType's Bluesky text formatter. The style is baked into each character.
  • Bluesky's formatting is built into the AT Protocol as rich text facets, so most third-party clients render bold and italic correctly. Strikethrough support varies.
  • The 300-grapheme post limit counts what you see as one character, not bytes. Both native formatting and Unicode styled text count toward this limit.
How to Format Text on Bluesky: Bold, Italic & Styling Options
On this page

How-to guide

Bluesky has a built-in rich text toolbar that lets you bold, italicize, and strikethrough text directly in posts. No Markdown syntax, no third-party apps, no workarounds required for those three styles. Select any text in the compose box and a formatting popup appears. That puts Bluesky ahead of most social platforms when it comes to native text formatting.

But the toolbar only covers posts. Your display name, your bio, and anywhere outside the compose box are still plain text fields. And there are formatting options Bluesky simply doesn't offer at all β€” no headings, no code blocks, no bullet lists. This guide covers exactly what works, what doesn't, and how to fill the gaps.

How the built-in rich text toolbar works

The formatting toolbar appears in both the Bluesky web app and the official mobile apps. The workflow is the same everywhere:

  1. Start typing your post in the compose box.
  2. Select the text you want to format.
  3. A popup toolbar appears with four options: Bold, Italic, Strikethrough, and Link.
  4. Tap or click the one you want. The formatting applies immediately.

That's it. No Markdown syntax is involved. Typing **bold** or _italic_ in a Bluesky post will not render as formatted text β€” it will show the literal asterisks or underscores. The toolbar is the only way to apply native formatting.

You can stack styles. Select a word, bold it, then select it again and italicize it β€” you get bold italic. Strikethrough can layer on top of either. Links work the same way: select text, tap the link button, paste the URL.

What formatting does Bluesky actually support?

Here is the complete list of native formatting Bluesky supports in posts:

FormatHow to applyWhere it works
BoldSelect text, tap B in toolbarPosts and replies
ItalicSelect text, tap I in toolbarPosts and replies
StrikethroughSelect text, tap S in toolbarPosts and replies
LinksSelect text, tap link icon, paste URLPosts and replies
MentionsType @ followed by a handlePosts and replies
HashtagsType # followed by a tagPosts and replies

And here is what Bluesky does not support:

  • No headings (H1, H2, etc.)
  • No bullet or numbered lists
  • No code blocks or inline code
  • No underline
  • No block quotes
  • No Markdown rendering of any kind

If you need those formatting options, Bluesky is not the place for them. Long-form formatting belongs on a blog or newsletter; Bluesky posts are short-form by design, with a 300-character limit that keeps things concise.

How it works under the hood: rich text facets

Bluesky runs on the AT Protocol, and the formatting system is built into the protocol itself through something called rich text facets. Each facet is a byte-range annotation attached to the post text, marking a span as bold, italic, strikethrough, a link, a mention, or a hashtag.

This matters for two reasons. First, the formatting is real β€” it is not a visual trick or a Unicode swap. A bold word on Bluesky is the actual word with a formatting instruction, not a substituted character. Screen readers read it correctly. Search finds it normally. Second, because facets are part of the protocol, any third-party client or app that implements the AT Protocol can display the formatting. Most do, though support varies β€” some older or minimal clients may ignore strikethrough or render it inconsistently.

Where the toolbar doesn't reach

The rich text toolbar is limited to the post compose box. These fields are plain text with no formatting controls:

  • Display name β€” plain text only
  • Bio / description β€” plain text only
  • Handle (username) β€” domain-based, no Unicode allowed

Your handle is tied to a domain (like yourname.bsky.social or a custom domain), so there is no way to style it at all. But your display name and bio are different β€” they accept Unicode characters, which opens the door to styled text.

Using Unicode styled text for display names and bios

Since the display name and bio fields don't have a formatting toolbar, the way to get a styled look is to paste Unicode characters that are already shaped to look bold, italic, or decorative. These are not formatting instructions β€” they are entirely different characters that happen to resemble styled versions of regular letters.

For example, instead of the letter "a" with bold applied, you use the character "𝖒" β€” a mathematically bold small a from the Unicode Mathematical Alphanumeric Symbols block. It looks bold on its own, so it stays bold anywhere you paste it, including plain text fields.

The Bluesky text formatter on BoldlyType generates these for you. Type your text, pick a style (bold, italic, script, gothic, bubble, and more), copy the output, and paste it into your display name or bio. No extension or app required.

A few things to know about the Unicode approach:

  • It works visually, but it is not real formatting. Screen readers may not interpret it correctly.
  • Search may not match it. Someone searching for your name won't find the Unicode version by typing the plain version.
  • Not every device renders every glyph. Bold sans-serif is widely supported, but rarer styles (fraktur, double-struck) can show as empty boxes on some devices.
  • Each styled character counts against your limit the same as a normal character. Bluesky counts grapheme clusters, so one styled letter is one grapheme.

For more on how this technique works across platforms, see how to format bold text.

Formatting in posts vs. display name vs. bio

Here is a quick reference for which formatting method works where:

FieldNative toolbarUnicode styled textCharacter limit
Posts & repliesBold, italic, strikethrough, linksWorks but unnecessary (use the toolbar)300 graphemes
Display nameNot availableWorks~64 characters
Bio / descriptionNot availableWorks~256 characters
HandleNot availableDoes not work (domain-based)Domain rules apply

The practical split is simple: use the native toolbar for posts, and use Unicode styled text (via a text formatter) for your display name and bio.

Third-party Bluesky clients and formatting

Because Bluesky is built on the open AT Protocol, several third-party clients exist. Most of them render bold, italic, and links correctly because those facets are well-established in the protocol. Strikethrough support is newer and less consistent β€” some clients display it, others ignore the facet and show the text without the line through it.

If you format a post with strikethrough in the official app and someone reads it in a client that doesn't support that facet, they see the plain text without the strikethrough. The text itself is not lost, just the visual effect.

Unicode styled text in display names and bios shows up across all clients, since the characters are part of the text data itself.

Tips for formatting Bluesky posts effectively

With only 300 characters to work with, formatting has to earn its place:

  • Bold sparingly. One bold phrase per post draws the eye. Three bold phrases and nothing stands out.
  • Use strikethrough for corrections or humor, not for emphasis. It reads as "I crossed this out on purpose."
  • Links are formatting too. A well-placed link with descriptive anchor text beats a raw URL pasted at the end.
  • Don't over-style your display name. A fully script-font display name can be hard to read at small sizes and may look like boxes on older devices. Mix one styled word with plain text for readability.
  • Check your length. Styled Unicode and regular characters both count toward 300 graphemes, but it is still worth running your draft through a character counter before posting. See best free text formatting tools for social media for more options.

Frequently asked questions

Does Bluesky support Markdown?

No. Bluesky does not render Markdown in posts, bios, or display names. Typing **bold** or _italic_ will show the literal asterisks and underscores, not formatted text. Bluesky uses its own rich text toolbar for formatting β€” select text and tap the bold, italic, or strikethrough button in the popup.

Can you bold text in a Bluesky post?

Yes. Select the text you want to bold in the compose box and tap the B button in the formatting toolbar that appears. This works in both the web app and the official mobile apps. The bold is real formatting stored as a rich text facet in the AT Protocol, not a Unicode workaround.

How do you format your Bluesky display name or bio?

The display name and bio fields have no formatting toolbar. To get a styled look, paste Unicode styled characters generated by a tool like the Bluesky text formatter. The styled characters look bold, italic, or decorative on their own, so they work in any plain text field. Your handle (username) cannot be styled because it is domain-based.

What is the Bluesky character limit?

Bluesky posts are limited to 300 grapheme clusters. A grapheme cluster is what you see as a single character β€” a regular letter, an emoji, or even a complex emoji with skin tone modifiers all count as one grapheme. This is more generous than platforms that count bytes or UTF-16 code units. For the full breakdown, see Bluesky character limit.

Do third-party Bluesky clients support bold and italic?

Most third-party AT Protocol clients render bold and italic correctly because these facets are well-established in the protocol spec. Strikethrough support is less consistent β€” some clients display it, others show the text without the line. If formatting is important to your post, the official Bluesky app is the safest bet for both composing and viewing.

Ready to put this into practice?

Open a formatter

Spotted an error? Email hello@boldlytype.com β€” we update guides quarterly and welcome corrections.

Frequently asked questions

Latest questions readers ask us about this topic.

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

LinkedIn's post box β€” used for feed posts, comments, your headline and your About section β€” is plain text with no formatting toolbar and no markdown, so there's no bold button. The workaround the whole creator economy uses is Unicode bold: type your line, convert it to bold Unicode characters (𝗯𝗼𝗹𝗱) in a generator, then paste it back and the emphasis sticks, because the style is baked into the characters themselves. Bold only the hook β€” the part that shows before the β€œβ€¦see more” cut-off β€” to earn the click, and keep the rest plain so the post stays skimmable. Two caveats matter: Unicode text isn't read by LinkedIn's search and is announced poorly by screen readers, so never bold the keywords, names or hashtags you want found or read aloud. For true rich text (headings, lists), use LinkedIn's separate 'Write article' editor instead.

Format a LinkedIn post

Instagram's native composer collapses the line breaks you type, which is why captions paste in as one dense block β€” it's worst when you post from the web or through some schedulers. The reliable fix is to compose the caption with the spacing you want and paste it back with the breaks preserved, rather than relying on invisible-character hacks (blank Unicode characters can break Instagram's search and are read poorly by screen readers). Write the caption with your intended breaks, generate the spaced version, and paste it into the caption field. Put your strongest hook on line one, since that's the part that shows before the 'more' cut-off in the feed. Keep paragraphs short β€” two or three lines β€” so the caption stays skimmable on a phone, where almost everyone reads it.

Open the line-break tool

Yes β€” WhatsApp is the exception among messaging and social apps because it has its own built-in markup that it renders for everyone. Wrap text in *asterisks* for bold, _underscores_ for italic, ~tildes~ for strikethrough, and triple backticks for monospace; the symbols disappear and the styling shows. So you usually don't need Unicode characters on WhatsApp at all. Reach for a Unicode formatter only when you want a style WhatsApp's markdown doesn't cover β€” small caps or script for a Status, say β€” or when you're writing one message to post across several apps that don't share WhatsApp's syntax (Instagram, X and Threads strip these symbols and show them literally). For everyday bold and italic inside WhatsApp itself, the native markup is the better and more accessible choice.

Format for WhatsApp

Because that editor is plain text and strips anything it doesn't parse. Markdown (*bold*), HTML tags and rich-text styling only render where the platform explicitly supports them β€” paste them into Instagram, X/Twitter or a LinkedIn post and you see the raw asterisks, or nothing at all, because those boxes have no formatting engine. Unicode styling works differently: the bold or italic look is baked into each character (a Unicode bold 'A' is its own code point), so it survives any plain-text field and travels with a copy-paste. That's the whole reason Unicode 'fancy text' formatters exist. The trade-off is accessibility β€” because they aren't ordinary letters, screen readers can mis-read them and in-app search may not match them β€” so use Unicode for short emphasis, not for body copy or anything that must be searchable.

Generate paste-proof styles

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