Bluesky handle checker

Set up your own domain as a Bluesky handle and it isn't working? Enter it below. This page looks it up the way Bluesky's servers do and tells you what's wrong.

How Bluesky checks a domain handle

A domain handle works only when both directions agree:

  1. Domain → account. Bluesky looks up a DNS TXT record at _atproto. + your domain, for example _atproto.alice.example.com. Its value must be did= followed by your account's DID, like did=did:plc:abc123…. If there's no usable record, it tries https://your domain/.well-known/atproto-did, a plain text file whose first line is the DID. DNS is checked first and wins if both exist.
  2. Account → domain. Your account's DID document (for most people at plc.directory) must list at:// + your domain. That happens when you change your handle in the app and press verify.

These are the rules in Bluesky's own resolver (HandleResolver in @atproto/identity); this page follows them line by line, and its handle syntax check matches @atproto/syntax (compared on 30,000 random strings).

Most common mistakes

It worked for months and now says "Invalid Handle"

Bluesky re-checks domain handles from time to time, so a handle can break long after it was set up. Run a check above, then:

Where do I find my DID?

Put your current handle (for example you.bsky.social) in the second box above and run a check: the table shows the exact TXT value to use. The Bluesky app also shows it while you change your handle to a domain.

How long does DNS take?

Usually minutes, sometimes up to an hour or more, depending on your provider and the record's TTL. This page asks Cloudflare's public DNS (or Google's if that fails), which may see a change slightly before or after Bluesky does.

What this page sends, and limits