Last checked: October 10, 2026
Every Bluesky limit in 2026: posts, images, video, bio and DMs
A Bluesky post holds 300 characters (graphemes), up to 4 images of 2 MB each or one video up to 10 minutes and 300 MB. Bios hold 256 characters, display names 64, DMs 1,000 and image alt text 2,000.
Pages that list Bluesky limits often disagree, because several of them have been raised and older guides still quote the old numbers. Every number below comes from the AT Protocol lexicons, the official app's source code or Bluesky's rate limit documentation, with a link to the exact file. The last column shows what OpenTweet sends when it publishes to Bluesky for you.
Bluesky limits reference table
Last checked October 10, 2026. Grapheme counts are what you see as characters.
| Limit | Value | What OpenTweet sends | Source |
|---|---|---|---|
| Posts | |||
| Post text | 300 graphemes and 3,000 bytes | Checks both, 300 graphemes and 3,000 bytes | app.bsky.feed.post |
| Post languages | 3 per post | Not sent | app.bsky.feed.post |
| Extra tags (outside the text) | 8 tags, 64 graphemes each | Not sent | app.bsky.feed.post |
| Hashtag in the text | 64 graphemes | Hashtags detected and linked | app.bsky.richtext.facet |
| Threads | No cap in the post record | Up to 100 posts per thread | app.bsky.feed.post |
| Media | |||
| Images | 4 per post, 2 MB (2,000,000 bytes) each | Supports 4 images, resized to fit 2 MB | app.bsky.embed.images |
| Video | 1 per post, 300 MB, 10 minutes | No video on Bluesky yet | app.bsky.embed.videosocial-app constants.ts |
| Video captions | 20 VTT files, 20,000 bytes each | No video on Bluesky yet | app.bsky.embed.video |
| Image alt text | 2,000 characters in the official app | Alt text not yet exposed | social-app constants.ts |
| Profile | |||
| Display name | 64 graphemes | Not applicable | app.bsky.actor.profile |
| Bio (description) | 256 graphemes | Not applicable | app.bsky.actor.profile |
| Pronouns | 20 graphemes | Not applicable | app.bsky.actor.profile |
| Avatar and banner | 1 MB (1,000,000 bytes) each, PNG or JPEG | Not applicable | app.bsky.actor.profile |
| Profile links | 10 | Not applicable | app.bsky.actor.profile |
| Messages | |||
| Direct message | 1,000 graphemes (10,000 bytes) | Not sent | chat.bsky.convo.defssocial-app constants.ts |
| Starter packs, feeds, lists and moderation | |||
| Starter pack members | 150 by default | Not applicable | social-app constants.ts |
| Starter pack name | 50 graphemes | Not applicable | app.bsky.graph.starterpack |
| Feeds in a starter pack | 3 | Not applicable | app.bsky.graph.starterpack |
| Custom feed name | 24 graphemes | Not applicable | app.bsky.feed.generator |
| List name | 64 characters | Not applicable | app.bsky.graph.list |
| Subscribed labelers | 20 | Not applicable | social-app constants.ts |
| Reply-control rules | 5 per post | Not applicable | app.bsky.feed.threadgate |
| Hidden replies | 300 per post | Not applicable | app.bsky.feed.threadgate |
| Account rate limits (Bluesky-hosted accounts) | |||
| Record writes | 5,000 points per hour, 35,000 per day | One record per post | Bluesky rate limits doc |
| Logins (createSession) | 30 per 5 minutes, 300 per day | Uses OAuth, not password logins | Bluesky rate limits doc |
| Handle changes | 10 per 5 minutes, 50 per day | Not applicable | Bluesky rate limits doc |
Characters on Bluesky are graphemes
Bluesky counts text in graphemes, the units you see as one character. A flag emoji or a family emoji is one grapheme even though it is several code points underneath. Underneath the 300-grapheme post limit sits a 3,000-byte cap, which only bites when a post is mostly emoji or non-Latin script.
Links count at their full length when you post through the API. The Bluesky character counter counts both graphemes and bytes, and does a link count on Bluesky? covers the link case in detail.
Bluesky limits that changed
- Images went from 1 MB to 2 MB. The images lexicon notes the old 1 MB cap. Details in Bluesky's image size limit.
- Video went from 100 MB to 300 MB. The video lexicon notes the old 100 MB cap.
- 10-minute video is open to everyone. The official app removed the 10-minute and multipart upload feature gates on August 25, 2026 (social-app #11528). Guides that say 3 minutes or 100 MB are out of date.
- Starter pack size is set remotely. Since September 23, 2026 the app reads the member limit from remote configuration (social-app #11706). The default is still 150.
Lexicon limits vs app limits
Lexicon limits apply to every app on the AT Protocol. A few numbers on this page, such as alt text, starter pack size and the 10-minute video cap, are set by the official Bluesky app. Other clients can apply their own.Rate limits for accounts
Accounts hosted by Bluesky can write 5,000 points per hour and 35,000 per day. Creating a record costs 3 points, updating 2 and deleting 1, so an account can create up to 1,666 records an hour and 11,666 a day. Likes and follows count as records too. Logins are limited to 30 per 5 minutes and 300 per day, and handle changes to 10 per 5 minutes and 50 per day.
Self-hosted servers can set different numbers. The Bluesky API rate limit guide works through what that means for posting bots and scheduled posts.
What OpenTweet sends to Bluesky
OpenTweet checks every Bluesky post against 300 graphemes and 3,000 bytes, attaches up to 4 images and resizes them to fit under 2 MB, and posts threads of up to 100 parts as proper reply chains. Links, mentions and hashtags are detected and made clickable.
Two things are not there yet. OpenTweet does not post video to Bluesky, so a post with video is not sent to Bluesky. Alt text is supported in the Bluesky publishing code but is not yet exposed in the composer or the API. Posting is over atproto OAuth, so you never hand over a password or app password.
7-day free trial. Cancel anytime.
Frequently asked questions
What is the Bluesky character limit for a post?
300 characters, counted as graphemes, and 3,000 bytes. A grapheme is what you see as one character, so an emoji made of several code points still counts as one. The byte cap only matters for posts that are mostly emoji or non-Latin script.
What are the Bluesky upload limits?
Up to 4 images per post at 2 MB (2,000,000 bytes) each, or one video up to 10 minutes and 300 MB. A video can carry up to 20 VTT caption files. Avatars and banners are capped at 1 MB each and must be PNG or JPEG.
What is the Bluesky bio character limit?
256 characters (graphemes). Display names hold 64 and the pronouns field holds 20. A profile can show up to 10 links.
What is the Bluesky DM character limit?
1,000 characters (graphemes) per direct message, with a 10,000-byte ceiling underneath. That is the value in both the chat lexicon and the official app.
How long can Bluesky alt text be?
2,000 characters in the official Bluesky app. That is the app constant MAX_ALT_TEXT. Each image in a post gets its own alt text.
What is the Bluesky starter pack limit?
Starter packs hold 150 people by default. Since September 23, 2026 the app reads the member limit from remote configuration, so Bluesky can change it without an app update. A starter pack name holds 50 characters and a pack can include up to 3 custom feeds.
Keep exploring
Check a post, an image or a video against these limits before it goes out.
Bluesky character counter
Counts graphemes and bytes the way Bluesky does, before you post.
Bluesky image checker
Check whether an image clears 2,000,000 bytes.
Bluesky video checker
Check size and duration against 300 MB and 10 minutes, in your browser.
Bluesky API rate limits
How many posts an account can create per hour and per day.
Bluesky banner size
Banner and profile picture sizing for Bluesky.
X vs Bluesky vs LinkedIn limits
Post, image and video limits on all three networks side by side.
Bluesky and X from one draft
Every post checked against Bluesky's limits. From $11.99 a month.
7-day free trial. Cancel anytime.