# Free Bluesky Character Counter

> Count JavaScript characters, words, and lines in a Bluesky draft against a 300-character reference limit.

- Canonical: https://fluxgravity.io/tools/bluesky-character-counter
- Price: Free
- Category: Bluesky

## What the tool does

See a live raw character count and immediate remaining or over-limit feedback for a Bluesky draft.

**Direct answer:** Bluesky's current post lexicon limits the text field to 300 Unicode grapheme clusters. This counter intentionally uses JavaScript string length to match the audited reference tool, and also reports words and lines. It does not split threads or reproduce the protocol's grapheme calculation, so verify the final draft in Bluesky.

- Live JavaScript length
- Word and line totals
- 300-character reference check

## How to use it

### 1. Paste the full draft

Write naturally first, including emoji, accents, mentions, links, and tags.

### 2. Check the raw total

The counter uses JavaScript string length, matching the audited reference tool.

### 3. Verify in Bluesky

Use the native composer for the final grapheme-aware validation before publishing.

## Why the native Bluesky composer remains the final check

The Bluesky post schema currently caps post text at 300 grapheme clusters. A grapheme is close to what a reader sees as one character, even when that symbol is built from several Unicode code points. Simple JavaScript string length can therefore overcount emoji sequences and combining marks.

This workbench uses raw JavaScript string length to match the audited reference implementation. Because that is not the protocol's grapheme calculation, the Bluesky composer and protocol validation remain the final authority.

## An over-limit draft needs an editorial rewrite

This tool does not split threads. If a draft exceeds the intended limit, rewrite it at paragraph, sentence, and idea boundaries. Keep definitions, links, and qualifications in the post where the reader needs them.

Shorter is not automatically clearer. Use one post when the point fits, a thread when the sequence genuinely helps, and an external document when the material depends on substantial evidence or formatting.

## What the Bluesky post schema counts

The protocol schema distinguishes visible grapheme clusters from bytes and UTF-16 code units. That matters most for multilingual writing, accents, skin-tone modifiers, flags, and joined emoji sequences.

| Measure | What it represents | How to use it |
| --- | --- | --- |
| Grapheme clusters | Reader-perceived Unicode characters | Primary 300-unit drafting check |
| UTF-8 length | Encoded storage length | Protocol also has a higher technical maxLength guard |
| JavaScript length | UTF-16 code units | Do not use alone for user-visible character limits |
| Code points | Unicode scalar values | Useful fallback but not identical to graphemes |
| Composer result | Current client validation | Final authority before publishing |

The workbench reports raw JavaScript characters, words, and lines. For joined emoji, combining marks, and other complex Unicode, the native Bluesky composer is the authoritative check.

## Drafts that benefit from a grapheme-aware check

### Multilingual post

Use the raw total as an early warning, then verify accents, combining marks, and non-Latin writing in Bluesky's grapheme-aware composer.

### Emoji-containing announcement

Expect joined emoji to differ from raw JavaScript length and confirm whether they add meaning or accessibility noise.

### Cross-posted X draft

Recheck from the source because Bluesky does not use X's fixed 23-character URL weighting rule.

### Long explanation

The tool does not split posts. If needed, create a sequence manually and make each post complete enough to survive reposts and screenshots.

## Before a Bluesky post or thread goes live

Length is only the mechanical gate. The final sequence still needs factual, structural, and accessibility review.
- Confirm that the opening identifies the subject without empty suspense.
- Keep evidence, qualification, and source links beside the claims they support.
- Check mentions, handles, tags, alt text, and link destinations in Bluesky itself.
- If you split the draft manually, ensure no part starts as an unexplained fragment.
- Use numbering only when the reading order genuinely matters.
- Verify the visible composer count before publishing because clients can evolve.

## Character-counting and thread mistakes

### Treating UTF-16 length as official

This tool uses raw string.length, which can count pieces of one visible emoji differently from the protocol.

### Applying X link rules

A fixed 23-character URL estimate belongs to X's weighting behavior, not Bluesky's post-text schema.

### Hard cutting at 300

A mathematically valid cut can split a word, detach a qualification, or place a source far from its claim.

### Thread as a default

Several short posts are not automatically more readable than one edited post or one linked document.

## Frequently asked questions

### What is the Bluesky character limit?

The current official app.bsky.feed.post lexicon sets a maximum of 300 grapheme clusters for post text.

### Do links count in a Bluesky post?

The link text is part of the post text. This tool counts what you paste rather than applying X's fixed-link weighting rule.

### Why can the count differ from Bluesky?

This tool uses JavaScript UTF-16 string length, which can count pieces of one visible emoji separately. Bluesky's schema uses Unicode grapheme clusters.

### Does the tool split or publish a thread?

No. It only counts the draft locally in your browser.

### Can Bluesky's limit change?

Yes, platform and protocol rules can change. The page links the current official schema so you can verify it.

## Continue in FluxGravity

Use FluxGravity to adapt an approved source into platform-specific versions while keeping claims and review boundaries visible.

https://app.fluxgravity.io/agent
