A decentralized identifier, or DID, is a stable identifier for an account that does not depend on a username or on any single server. It looks like did:plc:abc123… or did:web:example.com.
It exists because handles are not identity. A handle can be changed, sold, or reassigned; a DID cannot.
Why it matters for data
If you track an account by its handle, a rename splits your history in two: the old series stops, a new one starts, and nothing in your data says they are the same account. The reverse is worse — a handle released and taken by somebody else appends a stranger's numbers to your series.
| You anchor on | A rename does | A reassignment does |
|---|---|---|
| Handle | Breaks the series silently | Merges two accounts silently |
| DID | Nothing | Nothing |
This is the concrete reason an anchor field should be the immutable identifier wherever a platform publishes one, and it is what our Bluesky profile route anchors on.
The two flavours you will meet
did:plc— resolved through a directory service. The common case, and the reason it resolves without you running anything.did:web— resolved by fetching a document from a domain. Self-hosted identity; the account's continuity depends on that domain.
Both are opaque strings as far as your code is concerned. You store them and compare them; you do not parse them.
Not every network has one
Most do not. On a federated network without DIDs, the nearest equivalent is the account's protocol URI, which is stable across the network even though the numeric id on each server is not — the same account genuinely has a different local id on every instance, which is why our Mastodon route returns the URI and not the number.
On centralised platforms the usual anchor is a numeric id paired with the login, because the id alone is not always exposed on the public page.
The practical rule
Store both. Display the handle, because that is what humans recognise; key your data on the identifier, because that is what stays true. A time series keyed on a display name is a time series waiting to break.