Bluesky character counter
Count a post the way the Bluesky app does: 300 characters and 3,000 bytes, measured after it shortens your links. See both caps, and which one you'll hit first.
Runs in your browser. Your text and images never leave it.
Updated
Off counts links in full, as text posted through the API does.
0 / 300
300 leftcharactersBluesky: Characters as you see them: an emoji, a flag or an accented letter is one.
Type or paste a post to count it.
Characters0 / 300
Bytes (UTF-8)0 / 3,000
- Characters as typed
- 0
- Emoji
- 0
Two caps: characters and bytes
300 characters as you see them, and 3,000 bytes underneath.
Bluesky counts graphemes, which is a precise way of saying what you'd call one character is one. An emoji, a flag, a family emoji and an accented letter each count 1. A post can have 300 of them.
The same post also has to fit in 3,000 bytes of UTF-8. A plain English letter is 1 byte, so ordinary text runs out of characters long before it runs out of bytes. Other characters take more: an accented letter 2 bytes, a CJK character 3, a plain emoji 4, a flag 8 and a family emoji 25.
| Character | Characters | Bytes |
|---|---|---|
| A plain letter (a) | 1 | 1 |
| An accented letter (é) | 1 | 2 |
| A CJK character (日) | 1 | 3 |
| A plain emoji (😀) | 1 | 4 |
| A flag (🇯🇵) | 1 | 8 |
| A family (👨👩👧👦) | 1 | 25 |
So long emoji sequences are the one thing that can run the bytes out first: 120 family emoji fill all 3,000 bytes while using 120 of the 300 characters, and the post won't go. The counter shows both, and cuts to whichever runs out first.
The app shortens links before it counts them
When you post from the Bluesky app, it rewrites each link in your text as the domain plus the path. If the path (with any query) is longer than 15 characters, it keeps the first 13 and adds "...". The full link still opens when someone taps it; only the text in the post is shorter.
So a 72-character link becomes www.example.com/blog/2026/10... and costs 31. Text posted through the API, which is how many scheduling tools post, counts whatever it sends: sent in full, the same link costs 72. Turn off link shortening in the counter to see that count.
A bare domain like example.com is a link on Bluesky too, but the app only shortens links that start with http:// or https://, so a bare one costs what you typed.
Worked examples
Our autumn menu is out 🍂 https://www.example.com/blog/2026/10/autumn-menu-is-here?utm_source=bsky
| Piece | What it is | Counts |
|---|---|---|
| Our autumn menu is out | Letters and spaces | 23 |
| 🍂 | An emoji, then a space | 2 |
| https://www.example.com/blog/2026/10/autumn-menu-is-here?utm_source=bsky | A 72-character link, shortened | 31 |
| Bluesky counts | 56 of 300 | |
With the link in full, as some tools post it, the same post is 97.
Fête de la musique 🎶 🇫🇷
| Piece | What it is | Counts |
|---|---|---|
| Fête de la musique | Letters, an ê and spaces | 19 |
| 🎶 | An emoji, then a space | 2 |
| 🇫🇷 | A flag | 1 |
| Bluesky counts | 22 of 300 | |
22 characters, but 33 bytes: the ê, the emoji and the flag take more than one byte each.
When a post is over
Cut to fit keeps the longest part that fits both caps, ending at the last full sentence, the last whole word, or exactly at the limit. It never splits an emoji, a flag or a link.
Does Shaflex keep a Bluesky post under the limit for me?
Yes. Shaflex sizes the Bluesky copy of your draft to Bluesky's 300 as you write, turns a longer one into a thread, and lets you choose who can reply. You connect Bluesky with an app password, never your main one. The same draft goes to your other networks too, each copy fitted to its own limit, and they're scheduled together.
See how Shaflex schedules for Bluesky, how one draft goes to every network, and what the free plan includes.
Where these rules come from
Each one is from the network's own documentation, help pages or source code. We last checked them on .
More free tools
Each one runs in your browser too.
- Bluesky
Bluesky image sizes
How Bluesky crops one to ten images, its 2 MB cap, avatars and banners, with a resizer set for Bluesky.
Open it - Bluesky
Bluesky best time to post
Type a handle and see the days and hours that account's own posts did best, read from its public posts, in your time zone.
Open it - Text tool
Character counter
Count one draft for Threads, X, Bluesky, Mastodon and LinkedIn at once, and cut it to fit.
Open it
Bluesky character limit questions
What's the character limit on Bluesky?
300 characters, counted as you see them, and 3,000 bytes of UTF-8. Most posts only ever meet the 300; long runs of emoji like families can hit the bytes first.
Do links count toward Bluesky's limit?
Yes, but the app shortens each one first: the domain plus up to 13 characters of the path, then "...". Posted through the API, a link counts in full unless the tool shortens it.
Do emoji count as one character on Bluesky?
Yes, 1 each, flags and families included. They take more bytes, though: 4 for a plain emoji and 25 for a family.
Why is my Bluesky post too long when it's under 300 characters?
Either it's over 3,000 bytes, which takes a lot of long emoji, or the tool posting it counts links in full where the app would shorten them. The counter shows both readings.
Do spaces and line breaks count on Bluesky?
Yes. Each space and each line break is 1 character and 1 byte.
One draft, a copy for every network.
Write the post once in Shaflex, adjust the copy each network gets, and schedule them all together.
Free plan, no card needed.



