On paper, X to Bluesky is a 280-to-300 upgrade. In practice the two networks count differently enough that the same draft can pass one limit and fail the other: X counts characters and bills every link at a flat 23, while Bluesky counts 300 graphemes — emoji count once, but a URL costs its full length. Add domain-based handles, an image cap near 1 MB, and a culture where alt text is expected rather than optional, and the friendliest-looking migration in the text cluster turns out to have real edges.
This guide maps the counting math, the link and handle traps, and the manual versus SocialKit workflow for publishing to both.
€0.00 due today · cancel anytime · 7-day money-back guarantee
Everything that changes between the two composers, side by side.
| Spec | X (Twitter) (from) | Bluesky (to) |
|---|---|---|
| Primary canvas | 1600 × 900 px · 16:9 (post image) | 1200 × 675 px · 16:9 (post image) |
| Caption limit | 280 characters (X Premium subscribers can post up to 25,000) | 300 graphemes (visual characters — emoji count once) |
| Video length | About 2 minutes 20 seconds for standard accounts; longer uploads are a Premium feature | Short clips — Bluesky has been raising limits (around 3 minutes as of early 2026) |
| Hashtags | Count toward the character limit; one or two is the platform norm | Plain-text hashtags count toward the 300-grapheme limit |
| Counting model | Characters — URLs a flat 23, most emoji count twice | 300 graphemes — emoji count once, URLs at full length |
| Image file cap | Photos up to 5 MB | About 1 MB (976.56 KB) — larger files are auto-compressed |
| Handles | @username handles | Domain handles — name.bsky.social or your own domain |
The good news
The fine print
€0.00 due today · cancel anytime · 7-day money-back guarantee
Tip 1
Draft link posts Bluesky-style everywhere: headline text plus an attached card, no raw URL in the copy. It reads cleaner on X too, and the draft becomes portable.
Tip 2
Set a custom domain as your Bluesky handle (yourbrand.com) — it doubles as Bluesky’s native form of verification and makes your mention target unambiguous.
Tip 3
Treat alt text as distribution work, not just accessibility: many Bluesky users won’t repost images without it, so the two honest sentences you write travel further than any tag.
FAQ
€0.00 due today · cancel anytime · 7-day money-back guarantee
For plain text, yes — about 20 characters bigger. For posts with links it can be effectively smaller, because X charges a flat 23 characters per URL while Bluesky counts the full link text against the 300 graphemes. Emoji flip the other way: most count as two characters on X and one grapheme on Bluesky.
Use a link card: paste the URL, let the composer attach the card preview, then delete the URL text from the post. The card keeps the preview and the click, and the graphemes come back. Never reuse the t.co link from your X post — rebuild the real URL.
They don’t fit — Bluesky has no long-post tier. Split long content into a reply-to-yourself thread with the first post doing the selling, or publish the piece elsewhere and share it with a link card.
File size. X accepts images up to 5 MB; Bluesky’s protocol caps image blobs near 1 MB (976.56 KB) and compresses anything bigger automatically. Export deliberately — 2,000 px or less on the long side, saved as JPEG or WebP under the cap — and the automatic compressor never touches your image.
Compose once, customize the caption per network, and let SocialKit publish to X (Twitter), Bluesky, and 9 more platforms on schedule — no re-uploading, no copy-paste.
€0.00 due today · cancel anytime · 7-day money-back guarantee