Cross-posting

How to cross-post from Bluesky to X (Twitter)

Bluesky to X looks like the easiest hop in the text cluster — both are short-post networks built on the same reply-quote-repost grammar — but the two count differently, and the 20 characters between Bluesky’s 300 and X’s 280 fall exactly where good posts end. Add X’s flat 23-character link tax and its habit of counting many emoji as two, and a draft that fits Bluesky cleanly can bounce off X’s composer.

This guide maps the counting rules side by side, the image and video deltas that actually bite, and the cleanest way to publish to both — by hand, or composed once in SocialKit with each network’s limit checked as you write.

Start My Free Trial

€0.00 due today · cancel anytime · 7-day money-back guarantee

Bluesky vs X (Twitter): the spec deltas

Everything that changes between the two composers, side by side.

BlueskyX (Twitter) spec mapping. Limits last verified June 2026; platforms change these quietly, so check the composer when in doubt.
SpecBluesky (from)X (Twitter) (to)
Primary canvas1200 × 675 px · 16:9 (post image)1600 × 900 px · 16:9 (post image)
Caption limit300 graphemes (visual characters — emoji count once)280 characters (X Premium subscribers can post up to 25,000)
Video lengthShort clips — Bluesky has been raising limits (around 3 minutes as of early 2026)About 2 minutes 20 seconds for standard accounts; longer uploads are a Premium feature
HashtagsPlain-text hashtags count toward the 300-grapheme limitCount toward the character limit; one or two is the platform norm
Counting model300 graphemes — complex emoji count once; 3,000-byte ceiling280 characters free — many emoji count as two, links a flat 23
Long-form escape hatchNative threads — each reply gets its own 300Threads, or X Premium posts up to 25,000 characters
Image file sizeCompressed to ~1 MB (976.56 KB) per imagePhotos up to 5 MB; multi-image grids crop toward squares

The good news

What transfers cleanly

  • The format itself: short text, up to four images, native threads, quotes, and reposts — a post conceived for Bluesky needs no structural rework for X.
  • Most short drafts: anything under 280 characters crosses unchanged, and the shared minimal-hashtag culture (one or two tags at most) means your tag style survives too.
  • Images at original quality — as long as you use your masters: X accepts photos up to 5 MB, comfortably above anything Bluesky-ready, and both platforms support detailed alt text (X up to 1,000 characters, with an ALT badge).
  • Short video: clips up to about 2 minutes 20 seconds fit a standard X account, which covers most conversational video shot for Bluesky.
  • The 16:9 graphic habit: Bluesky’s recommended 1200 × 675 px export matches X’s single-image timeline framing almost exactly, so designed graphics do double duty.

The fine print

What breaks in transit

  • The last 20 characters — and the counting model under them: Bluesky counts 300 graphemes (a complex emoji counts once), while X counts 280 characters with many emoji billed as two and CJK characters doubled. An emoji-heavy 290-grapheme post can miss X’s limit by a wide margin.
  • Over-limit posts on X are rejected, not trimmed — there is no graceful truncation, so the cut has to happen in your draft, not at the platform’s edge.
  • Links flip from text to tax: on Bluesky the URL counts as the characters you type (the official app offers to drop the URL text once a link card attaches), while X wraps every link in t.co at a flat 23 characters — a post with one link really has 257 for words.
  • Video over X’s free ceiling: Bluesky clips can run to about 3 minutes as of June 2026, but a standard X account caps out around 2 minutes 20 seconds — longer uploads are an X Premium feature.
  • Handles, and the downloaded-file trap: @name.bsky.social mentions point nowhere on X, and images saved back off Bluesky have already been compressed to ~1 MB — always re-upload from your originals.

Step by step: by hand vs with SocialKit

The manual way

  1. Paste the text and check it against 280 — give emoji-heavy drafts extra headroom, since X counts many emoji as two characters.
  2. Re-budget links at a flat 23 characters each, and decide whether the link earns its place in the post or belongs in a reply.
  3. Swap Bluesky @handles for the same people’s X handles (or drop the mention), and keep hashtags to one or two.
  4. Re-upload images from your original exports and carry the alt text over — don’t reuse Bluesky’s compressed copies.
  5. Check video length: trim to about 2:20 for a standard account, or confirm the destination account has Premium before scheduling anything longer.
  6. Post at an X-appropriate hour — its audience peaks differently from Bluesky’s (best-time guides linked below).

With SocialKit — compose once, customize per network

  1. Compose once: write the post in SocialKit’s composer and select both Bluesky and X.
  2. Customize per network on one screen: trim the X variant to 280 with links counted, keep the roomier wording on Bluesky, and fix mentions for each network.
  3. Schedule each platform into its own best slot instead of firing both the moment one is live.
  4. Let SocialKit publish natively to both, then compare per-post results in its analytics to see which network the message fits.
Start My Free Trial

€0.00 due today · cancel anytime · 7-day money-back guarantee

Pro tips

Tip 1

Draft the X version first: 280 minus a 23-character link is the tightest box in this pair, and expanding a tight draft for Bluesky is painless — shrinking a loose one rarely improves it.

Tip 2

If the idea won’t fit, thread it on both: each post in an X thread gets its own 280 and each Bluesky reply its own 300, and on both networks the first post does all the selling.

Tip 3

Mind X’s multi-image grid: two to four images get center-cropped toward squares and wide tiles, and Bluesky’s grid crops differently again — center your subjects so one set of files survives both layouts.

FAQ

Bluesky → X (Twitter) questions

Start My Free Trial

€0.00 due today · cancel anytime · 7-day money-back guarantee

Will a 300-character Bluesky post fit on X?

Not on a free account — X’s limit is 280 characters, and over-limit posts are rejected outright rather than truncated. X Premium subscribers can post up to 25,000 characters (as of June 2026), though the timeline still collapses long posts behind a “Show more” link.

Do links count the same on Bluesky and X?

No. X wraps every URL in t.co and charges a flat 23 characters regardless of length. On Bluesky the URL counts as the text you type, though the official app offers to remove the URL text once a link card is attached. The same link post can pass one composer and fail the other.

Can I automatically mirror my Bluesky posts to X?

There’s no native bridge — Bluesky runs on the AT Protocol and X doesn’t federate with anything. Third-party mirroring scripts exist, but X’s API pricing changes have made them rare and fragile. A scheduler that composes once and publishes natively to both is the dependable route.

Are image limits the same on both platforms?

Both allow up to four images per post. X accepts photos up to 5 MB and alt text up to 1,000 characters; Bluesky compresses each image to roughly 1 MB (976.56 KB). Upload from your original files on each platform rather than re-downloading from either.

Post to Bluesky and X (Twitter) in one go

Compose once, customize the caption per network, and let SocialKit publish to Bluesky, X (Twitter), and 9 more platforms on schedule — no re-uploading, no copy-paste.

Start My Free Trial

€0.00 due today · cancel anytime · 7-day money-back guarantee