blueskygrapheme clustersVerified by Tal Weiss
Bluesky character limit and media specs
A Bluesky post holds up to 300 characters, with 4 images, 1 video up to 10 min. Every number below is the one our publishing engine enforces before a Bluesky post goes out, with the source it came from and the date we last read it.
Text[text]
| Max length | 300 grapheme clusters |
|---|---|
| Counting | Counted in grapheme clusters: a flag or a skin-tone emoji is one character however many code points it is built from. |
Media
| Constraint | Images[image] | Video[video] |
|---|---|---|
| Per post | 4 | 1 |
| Formats | .png, .jpg, .jpeg, .webp | .mp4 |
| Max size | 1,000,000 bytes | 300,000,000 bytes |
| Max length | - | 10 min |
| We publish it | yes | yes |
We publish text, images and video here; PDF documents we do not deliver to Bluesky yet. One post carries images or a video, never both. A PDF deck degrades here into up to 4 slide images.
Mentions
A plain @handle.domain renders as text; linked mentions need facet metadata we do not build yet - prefer naming without @.
The guidance our own agent carries for Bluesky, verbatim.
How our publisher handles it
The notes our publishing engine carries for Bluesky, verbatim - what our adapter does, not only what the platform allows.
- The lexicon also caps posts at 3,000 bytes - heavy emoji use hits it before 300 graphemes.
- Video needs a verified account email and counts against a daily per-account quota (getUploadLimits says what is left).
- A self-hosted PDS may refuse blobs over 100 MB (job failureCode pds_upload_unsupported_blob_size).
Questions
- How long can a Bluesky post be?
- 300 characters. Counted in grapheme clusters: a flag or a skin-tone emoji is one character however many code points it is built from.
- How many images can one Bluesky post have?
- Up to 4: .png, .jpg, .jpeg, .webp, up to 1,000,000 bytes each.
- What video does Bluesky accept?
- 1 video per post: .mp4, up to 300,000,000 bytes each, up to 10 min.
- How do you tag an account on Bluesky?
- A plain @handle.domain renders as text; linked mentions need facet metadata we do not build yet - prefer naming without @.
Sources, verified 2026-09-29
Each citation names where the number came from. Anything we could not confirm in an official document is marked, because a number nobody will stand behind should look different from one that is.
- [text]lexicon app.bsky.feed.post maxGraphemes 300 / maxLength 3000 bytesverified 2026-07-14
- [image]docs.bsky.app 4 images, 1,000,000 bytes eachdocs.bsky.appverified 2026-07-14
- [video]docs.bsky.app/docs/tutorials/video: service token aud did:web:<PDS host>, lxm com.atproto.repo.uploadBlob, 30 min exp -> video.bsky.app uploadVideo?did&name -> getJobStatus until blob -> app.bsky.embed.videodocs.bsky.app/docs/tutorials/videoverified 2026-09-29
- [videoLimits]lexicon app.bsky.embed.video maxSize 300,000,000 bytes (atproto #5373, 2026-08-11); 10 minutes per @bsky.app post 3mtwf7gxkwc2r (2026-08-25); daily cap 25 videos / 10 GB per bsky.social blog 2024-09-11, LOW: not re-confirmed (checked 2026-09-29)bsky.app
