Twitter/X vs Bluesky: The Complete Character Limit & Platform Comparison
Everything you need to know about writing for both platforms β from URL counting differences to feed algorithms, character encoding, and cross-posting strategy.
Platform Comparison at a Glance
| Feature | π Twitter/X | π¦ Bluesky |
|---|---|---|
| Character limit | 280 characters (free) | 300 graphemes |
| Character counting | Unicode code points | Intl.Segmenter graphemes |
| URL counting | 23 chars (t.co wrapper) | Full URL length |
| Link shortening | Automatic (t.co) | None β manual only |
| Emoji counting | 2 code units per emoji | 1 grapheme per emoji |
| Byte limit | No enforced byte limit | 3,000 UTF-8 bytes |
| Protocol | Proprietary | Open AT Protocol (atproto) |
| Feed algorithm | Proprietary, closed | Open custom feed generators |
| Data ownership | Platform-owned | User-owned (PDS portable) |
| API access | Paid tiers ($100+/mo) | Free public API |
| Threading | Native thread chains | Native thread chains |
| Mentions format | @username (no domain) | @handle.domain.tld |
URL Counting: The Biggest Practical Difference
Why this matters more than the 280 vs 300 limit
Twitter/X: t.co Wrapping
Twitter automatically shortens every URL β regardless of its length β to a 23-character t.co link. This means even a 200-character URL only costs 23 characters, leaving plenty of room for text.
Bluesky: Full URL
Bluesky counts URLs in their full length. A 100-character URL consumes one-third of your entire post budget. There is no built-in shortening β you must use an external service or craft shorter URLs.
Graphemes vs Characters: Who Gets More Room?
The limit numbers don't tell the whole story
Twitter counts in Unicode codepoints. A family emoji π¨βπ©βπ§βπ¦ has multiple codepoints (each counting separately on older platforms), but Bluesky's grapheme counting means it counts as exactly 1. For emoji-heavy posts, Bluesky's 300 grapheme limit is effectively more generous than Twitter's 280.
Feed Algorithm: Closed vs Open
The fundamental philosophical difference between the two platforms
π Twitter's Proprietary Algorithm
Twitter's For You feed is powered by a closed, proprietary ML model. The ranking factors are not public. Content creators have no way to inspect or predict what gets amplified, and third-party developers cannot build alternative feed algorithms.
π¦ Bluesky's Open Feed Generators
Bluesky's AT Protocol lets anyone publish a Feed Generator β a web service that implements the app.bsky.feed.getFeedSkeleton lexicon. The community has built hundreds of specialized feeds: photography, #coding, news, local communities. Users choose their own algorithms.
Check Your Draft Against Both Platforms
Use the cross-posting simulator to see if your post fits Twitter/X and Bluesky simultaneously
Draft Composer
* URLs are wrapped to 23 symbols on Twitter/X
* Mastodon uses 500 graphemes; URLs are always counted as 23 symbols
ποΈ Facets Highlight Preview
Cross-Posting Strategy: Twitter to Bluesky
Keep individual segments under 280 characters: If you plan to post identical content on both platforms, write to Twitter's more restrictive 280-character limit. Your post will fit Bluesky's 300 grapheme limit with room to spare.
Use URL shorteners on Bluesky: Twitter wraps links automatically. On Bluesky you'll need to manually shorten long URLs using bit.ly or similar services, or lose significant character budget.
Rewrite mentions for each platform: Twitter mentions are @username only. Bluesky requires @handle.bsky.social (or custom domain). You'll need platform-specific versions of any post that mentions other users.
Use focused hashtags on Bluesky: Twitter hashtags are largely cosmetic. Bluesky hashtags are functional facets that power community feed generators. Use 1β3 highly targeted tags on Bluesky for discovery.