Skip to content

Bitcoin accepted at checkout  |  Ships from Montreal, QC, Canada  |  Expert support since 2016

Decentralized Social Protocols Compared: Nostr vs AT Protocol vs ActivityPub vs Farcaster

There is no single “best” decentralized social protocol — the right answer depends on which kind of sovereignty you actually want. If you want an identity no server can issue, revoke, or price, Nostr goes furthest; if you want that self-ownership plus a safety net for a lost key, AT Protocol trades a little decentralization for real recoverability; if you want the largest working network today with human-friendly handles, ActivityPub is the mature, battle-tested option; and if you want identity anchored to an immutable onchain registry, Farcaster anchors your account onchain on OP Mainnet (Ethereum L2). Below is a fair, spec-sourced breakdown — genuine strengths and honest cons for each, every claim grounded in each project’s own primary documentation.

We build on the shoulders of the people who did this work: Nostr (created by fiatjaf and an open NIP-contributor community, deliberately reusing Bitcoin’s secp256k1/Schnorr cryptography), AT Protocol (Bluesky Social PBC and the atproto community), ActivityPub (the W3C Social Web Working Group, Evan Prodromou, Christine Lemmer-Webber, and Mastodon’s Eugen Rochko), and Farcaster (Merkle Manufactory and the Farcaster protocol contributors). This page never bashes any of them — it states what each does well and where each honestly falls short.

The 8-dimension comparison

Dimension Nostr AT Protocol (Bluesky) ActivityPub (Mastodon / Fediverse) Farcaster
1. Identity primitive (what an account cryptographically IS) A secp256k1 keypair — nothing more. The public key is the account; every event carries a pubkey and a Schnorr sig. No server-side account record. (NIP-01) A persistent DID (default did:plc, or did:web), controlled by keypairs — a signing key plus priority-ordered rotation keys. The did:plc id is self-authenticating: SHA-256 of the signed genesis op, base32-truncated to 24 chars. (atproto specs/did; did:plc spec) An “Actor” — an ActivityStreams object identified by a dereferenceable HTTPS URI on a domain, with inbox/outbox collections. No cryptographic keypair at the identity layer; “no strongly agreed upon mechanisms for authentication.” (W3C ActivityPub §3.1, §4, §B.1) An FID — a numeric id recorded in the onchain Id Registry contract on OP Mainnet, mapped one-to-one to a controlling Ethereum “custody” key. Message-signing is delegated to Ed25519 “Signer” keys. (Farcaster SPECIFICATION §1.1, §2.2)
2. Who can revoke, suspend, or ban you No one can ban you from the network — no central registry. A single relay can refuse to serve your events (that relay only); relay behavior is “just conventions.” (NIP-01) No party can cryptographically seize your DID — control rests in your rotation keys. But your PDS host and downstream relays/AppViews can independently mark you takendown or suspended; even the PLC operator is limited to denial-of-service/misordering, never seizure. (atproto specs/account; did:plc spec) Your home-server admin has full authority over your account (suspend, limit/silence, freeze, delete). A remote admin can only act on their local copy or defederate (domain-block a whole server). No network-wide authority. (Mastodon moderation docs) The onchain FID can’t be seized — only your custody or designated recovery key can transfer it. But the free Fname handle can be reclaimed at Farcaster’s discretion, apps/hubs can hide content at their edge, and your recovery-address holder can transfer the account. (Farcaster ens-names; contracts docs)
3. Account portability + where data lives Fully portable — the keypair is bound to no server. Content lives on relays; you broadcast the same signed events to many relays for redundancy, and each event’s id is a SHA-256 hash so it’s self-verifying on any relay. (NIP-01) First-class migration: DID and handle stay constant; the repo (a signed Merkle Search Tree) is exported as a CAR file and imported to a new PDS, then the DID doc is repointed. Data’s authoritative home is your PDS, but any PDS can host the self-certifying repo. (atproto repository; account-migration) Partial. Content lives on your home server. Mastodon’s “Move” migrates followers only — “Your posts will not be moved, due to technical limitations.” You get a new handle/URI; follows/blocks are manual CSV export/import. (Mastodon moving docs) The FID is transferable between Ethereum addresses (one account per address). Identity/keys/rent live onchain; social data lives offchain as CRDTs replicated across the permissionless hub / Snapchain network — not held by one host. (Farcaster overview; contracts; SPEC §4)
4. Human-readable handle (@name) NIP-05 gives name@domain: a client GETs /.well-known/nostr.json?name= and reads a name→hex-pubkey map. The domain owner controls it; it is “not intended to verify a user, but only to identify them.” npub (NIP-19) is a machine handle, not a human name. (NIP-05, NIP-19) The handle is a DNS hostname (e.g. user.example.com), proven via a _atproto DNS TXT record or a /.well-known/atproto-did endpoint, bidirectionally linked to the DID. Bring your own domain, or take a default *.bsky.social. (atproto specs/handle) @username@domain, resolved via WebFinger (/.well-known/webfinger returns the Actor URI). The name is namespaced to and controlled by the domain — “the same username may be used on a different domain.” (Mastodon WebFinger spec) Two options: free Fnames (@alice = alice.fcast.id, controlled by Farcaster’s registry, changeable once per 28 days) or paid onchain ENS .eth names that are “fully under [the user’s] control.” (Farcaster ens-names; SPEC §5)
5. Cost to exist Free. Identity is a locally generated keypair — no registration, no fee, no onchain step (Nostr is not a blockchain). Only optional costs: a domain for a NIP-05 handle, and some relays charge for storage. (NIP-01, NIP-05) No onchain rent, no protocol fee (did:plc is a hash-chained log, not a ledger); creating an account is free. Optional cost: a custom domain, or infrastructure if you self-host a PDS. (“Free” is inferred from the architecture, not stated verbatim.) (did:plc spec; atproto account) Free to the end user, no onchain rent — you sign up on a public server at no charge. The cost is externalized to whoever runs the server (hosting, moderation). (Spec is silent on cost; inferred from operator model.) (joinmastodon.org; W3C ActivityPub) Not free. Registering the FID costs onchain gas, and keeping it requires recurring storage rent — priced in USD (set by Farcaster admins) and converted to ETH via a Chainlink oracle. If rent lapses, messages are pruned after a 30-day grace period. (Farcaster SPEC §1.3, §3.1; contracts docs)
6. Censorship-resistance model (and limits) Self-generated keys no gatekeeper issues + relay redundancy: the same signed, tamper-evident event lives on many relays. Limit: any relay can refuse you, and if every relay your audience uses drops you, reach collapses. Takedown-resistant, not takedown-proof. (NIP-01) Self-certifying signed repo + portable, recoverable DID + rotation keys with a 72-hour recovery window. Limits: the did:plc directory is one global service (Bluesky-run today), handles lean on DNS/HTTPS, and the dominant relay/AppView can defederate. Resistance is by verifiable exit, not on-chain immutability. (did:plc spec; repository; account) Federation, not cryptography — one server’s deplatform doesn’t erase you, and cached copies can’t be force-deleted (“nothing in the ActivityPub protocol that can enforce remote deletion”). Limits: your home-server admin has total control; content is unsigned and server-custodial (lost if the server dies); mass defederation can isolate a server. (W3C ActivityPub §7.4; Mastodon moderation) Onchain FID can’t be unilaterally seized; every message is self-signed and gossiped to all hubs as a CRDT. Limits: the free Fname is centrally reclaimable (only ENS is takedown-proof), apps moderate at the edge, rent expiry prunes messages, and the recovery address is a trust vector. (Farcaster overview; SPEC §4, §3.1; ens-names)
7. W3C DID mapping A did:nostr method exists (method id = the raw 64-char hex pubkey, not the npub), but it is a Nostr Community Group work-in-progress draft — not W3C-ratified and not a core NIP; “inappropriate to cite this document as other than work in progress.” (nostrcg did-nostr draft) Yes — maps directly onto W3C DID-core. atproto restricts itself to two blessed methods: did:plc (self-authenticating, recoverable, key-rotating) and did:web; DID docs use Multikey (P-256/K-256). (atproto specs/did; did:plc spec) No. The ratified spec never mentions DIDs; identity is an HTTPS URI on a domain. A DID mapping exists only as an unofficial community proposal (FEP-ef61, “Portable Objects”), not part of the Recommendation and unshipped in mainstream Mastodon. (W3C ActivityPub; FEP-ef61 draft) No W3C DID method in the primary spec — identity is the raw numeric FID (e.g. !8098), with no did: URI or DID-document resolution. Any DID-style wrapping is third-party/experimental. (Absence asserted from the spec.) (Farcaster SPECIFICATION; contracts docs)
8. Biggest honest con The key is un-rotatable. Because the pubkey is the identity, a lost or stolen nsec is permanent — no reset, no revocation, no rotation in NIP-01. Key migration/revocation exists only as an unmerged draft (PR #1452). Perfect self-sovereignty, zero safety net. (NIP-01; PR #1452) Single-operator dependency today: the default did:plc method relies on one global PLC directory still run by Bluesky Social PBC (governance being spun out, not yet complete), and handles depend on centralized DNS. Real-world resistance is weaker than the crypto implies — though operator powers stay narrow (DoS/misorder only, never key seizure). (did:plc spec) Identity is server-custodial and domain-bound, not self-sovereign. No user-held key is your account; your admin can suspend/delete you; migration moves followers but not posts, and changes your handle and id URI. The DID/portable-id fix (FEP-ef61) is experimental and unshipped. (Mastodon moving/moderation; W3C ActivityPub) The free @handle is centrally revocable and the account costs money to maintain. Fnames can be reclaimed by team judgment; keeping the account needs gas + recurring ETH rent, with 30-day pruning if it lapses. The onchain FID is decentralized; the handle and hosting-economics layers are more centralized. (Farcaster ens-names; SPEC §1.3, §3.1)

Protocol profiles: strengths and the honest con

Nostr — maximal self-sovereignty, zero safety net

Nostr’s identity is as self-sovereign as it gets: you generate your own secp256k1 keypair with no permission from anyone, no server account, no blockchain, and no cost — the pubkey is the account. The whole model is one small spec (NIP-01): SHA-256 event ids and Schnorr signatures make every event independently verifiable, and broadcasting the same signed event across independent relays gives real censorship resistance without a gatekeeper. It credits its predecessors deliberately, reusing Bitcoin’s cryptography and standard DNS/bech32 primitives rather than inventing its own. Honest con: that same purity means the key is un-rotatable — lose your nsec and the identity is gone forever; leak it and an attacker can impersonate you indefinitely. There is no password reset, no revocation, no rotation in the core protocol; key migration remains an unmerged draft. This is the direct price of having no authority above you — and it makes disciplined key management non-negotiable.

AT Protocol (Bluesky) — the pragmatic middle path

AT Protocol threads a deliberate middle path. Account portability is a first-class, spec-defined feature: the same DID + handle + full repository can move between PDS hosts via CAR export/import — something most federated systems simply cannot do. The repository is a signed Merkle Search Tree, so any host can serve it and any client can verify it without trusting the host. Crucially, did:plc‘s priority-ordered rotation keys plus a 72-hour recovery window solve the “lost key = lost identity forever” problem that Nostr deliberately does not — a genuine, honest advantage. Handles reuse existing DNS trust, and the whole thing aligns cleanly with W3C DID-core. Honest con: the identity layer has a real centralization point today — the default did:plc method depends on a single global PLC directory still operated by Bluesky Social PBC (governance is being handed off but the transition isn’t finished), and the dominant relay and AppView are also Bluesky-run. Bluesky states this openly and keeps the operator’s powers narrow (denial-of-service/misordering only, never key seizure), but the single-operator trust point is the fair con.

ActivityPub (Mastodon / Fediverse) — the mature network that works at scale

ActivityPub is the only protocol here that is a ratified W3C Recommendation (2018), and it is the backbone of the largest working decentralized social network — Mastodon plus the wider Fediverse (Threads, PeerTube, Pixelfed and more) — giving it real-world scale and interoperability no rival matches. Its human-friendly @user@domain handles need no key management from users, no single server controls the network, anyone can self-host, and mature per-server moderation tooling makes it safe and operable at millions-of-users scale. Honest con: its identity is server-custodial and domain-bound, not cryptographically self-sovereign. No user-held key is your account, so your home-server admin can suspend or delete you, and account migration moves your followers but not your posts (“Your posts will not be moved, due to technical limitations”) while changing your handle and id URI. You are ultimately trusting an operator and a domain you usually don’t own; the DID/portable-id fixes remain experimental and unshipped in mainstream implementations.

Farcaster — identity anchored onchain

Farcaster’s identity is genuinely onchain and Ethereum-secured: the FID is a number in an immutable Id Registry contract on OP Mainnet, so no server owns your account. It is portable (the FID transfers between Ethereum addresses), and a user-designated recovery address gives real key-loss recovery — a direct advantage over Nostr’s un-rotatable key. Message-signing is delegated to Ed25519 “Signer” keys, so a compromised app key can be revoked without losing the account. User data lives as CRDTs replicated across a permissionless hub network (Snapchain), separating security-critical onchain state from high-volume social data cleanly. Honest con: the free human-readable handle is centrally revocable, and the account is not free to maintain. Fnames are controlled by Farcaster’s registry and “may be reclaimed” by human judgment (public figures, 60+ days unused, or resale), so the handle most users actually see is not censorship-resistant unless they pay for an onchain ENS name. On top of that, existence carries ongoing cost — onchain gas plus recurring storage rent, with messages pruned after a 30-day grace period if rent lapses. The onchain FID is decentralized; the handle and hosting-economics layers are meaningfully more centralized and were steered largely by one company (Merkle Manufactory).

The honest trade-offs

Every one of these protocols pays for its strengths somewhere. There is no free lunch in decentralized identity — you are choosing which trade-off you can live with.

  • Nostr: self-sovereignty vs. recoverability. The absence of any authority is exactly why there is no safety net. An un-rotatable key means key loss is permanent and irreversible, and a leaked key is a permanent impersonation risk. If you take Nostr’s sovereignty, you also take full custody responsibility.
  • AT Protocol: recoverability vs. a single operator. You get key rotation and a 72-hour recovery window — the fix for Nostr’s biggest weakness — but today that comes with dependence on one global PLC directory and DNS-based handles. Verifiable exit is strong; permissionless immutability it is not (yet).
  • ActivityPub: usability and scale vs. custody. No key management, a huge live network, and human-friendly handles — but your identity and your post history live at the mercy of a server operator and a domain you don’t own. Portability protects your social graph, not your data or your name.
  • Farcaster: onchain permanence vs. cost and a revocable handle. Your FID is unseizable and recoverable, but you pay gas and recurring rent to keep it, and the free @handle can be reclaimed by human judgment. Only paying for ENS makes the visible identity as censorship-resistant as the underlying FID.

Which should you use?

Match the protocol to the sovereignty you actually need. Three broad models cover the field:

Keypair-native (you hold the account itself): Nostr

Choose Nostr if your first principle is “no one issues, revokes, or prices my identity, ever.” You get an account no gatekeeper controls, no cost, and full portability across relays and clients. The commitment: you must manage your own key with real discipline, because there is no recovery. This is the most direct expression of the sovereignty ethos — and the one that demands the most from you.

Instance-hosted (an operator hosts you, standards keep you portable): ActivityPub, or AT Protocol for portability-with-recovery

Choose ActivityPub if you want to join the largest working network today with zero key management and a familiar @user@domain handle — accepting that your home server holds custody and that leaving strands your posts. Choose AT Protocol if you want that hosted convenience plus genuine account portability and key recovery: you can migrate the same DID, handle, and full repository between hosts, and rotation keys give you a way back from a compromised key. The catch to weigh is the current single-operator dependency in the did:plc directory.

Onchain-anchored (your account is a record on a public ledger): Farcaster

Choose Farcaster if you want your identity anchored to an immutable onchain registry with built-in key-loss recovery, and you’re comfortable paying gas plus ongoing storage rent for that permanence. Just budget for an ENS name if you need the visible handle to be as censorship-resistant as the FID beneath it — the free Fname is convenient but reclaimable.

FAQ

Is Nostr more censorship-resistant than Bluesky?

At the identity layer, yes — meaningfully so. Nostr’s account is a keypair no one issues, and no central registry exists to revoke it; resistance comes from broadcasting signed events across many independent relays. Bluesky’s AT Protocol is cryptographically strong (self-certifying repos, recoverable DIDs) but its default did:plc method currently depends on a single global directory operated by Bluesky, and its dominant relay/AppView can defederate — so its real-world resistance today is “verifiable exit,” not the no-gatekeeper model Nostr uses. The honest caveat cuts the other way, though: both share the same practical limit — if the relays (Nostr) or the PDS/relay (atproto) your audience actually reads from drop you, your reach suffers even though your identity survives. Neither is takedown-proof; Nostr is takedown-resistant with no authority to appeal to, while Bluesky is takedown-resistant by letting you migrate the same identity elsewhere.

Which one lets me truly own my identity?

Nostr gives the purest ownership: the private key is the account, held only by you, with no server, no fee, and no authority that can revoke it. Farcaster is a close second in a different sense — your FID lives in an immutable onchain registry that no server owns, with a recovery address as a safety net (though you pay to keep it, and the free handle is revocable). AT Protocol gives you cryptographic control via rotation keys plus recovery, with a current dependency on one directory operator. ActivityPub is the outlier: there is no user-held key that is your account, so your identity is custodial to a server operator. If “own” means “no one but me can hold or seize the credential,” Nostr is the answer, with Farcaster’s onchain FID the strongest alternative.

Can I move my account to another server?

It depends on the protocol. On Nostr there is nothing to “move” — your keypair isn’t tied to any server, so you just publish to different relays and carry the same identity everywhere. On AT Protocol, migration is a first-class feature: your DID and handle stay constant while your full repository is exported (as a CAR file) and imported to a new PDS. On Farcaster, your FID transfers freely between Ethereum addresses, and your data is already replicated across the hub network rather than one host. On ActivityPub the move is only partial — Mastodon’s “Move” migrates your followers but explicitly not your posts, and you receive a new handle and URI on the new server.

Do these identities map to a W3C DID (decentralized identifier)?

Only AT Protocol maps cleanly and officially: it uses W3C DID-core methods did:plc and did:web as the identity primitive. Nostr has a did:nostr proposal, but it’s a community work-in-progress draft, not a ratified standard or core NIP. ActivityPub’s ratified spec doesn’t use DIDs at all — a DID mapping exists only as an unofficial, unshipped community proposal (FEP-ef61). Farcaster defines no W3C DID method in its primary spec; identity is the raw numeric FID. If DID-core alignment matters to your stack, AT Protocol is the only one that ships it today.

What happens if I lose my key?

This is the sharpest dividing line. On Nostr, a lost or stolen private key is permanent and unrecoverable — there is no reset, no revocation, and no rotation in the core protocol, so your only remedy is to abandon the key, create a new identity, and rebuild your follower graph by hand. AT Protocol and Farcaster both solve this: AT Protocol’s did:plc uses priority-ordered rotation keys with a 72-hour recovery window, and Farcaster lets a user-designated recovery address restore control of the FID. ActivityPub sidesteps the question entirely — there is no user key to lose, but that’s because your identity is custodial to a server operator, which is its own trade-off. If key-loss recovery is a hard requirement, AT Protocol or Farcaster fit better than raw Nostr keys.

Primary sources

Every factual cell above is grounded in each protocol’s own primary specification or documentation:

  • Nostr: NIP-01 (protocol basics, event/identity model), NIP-05 (name@domain), NIP-19 (bech32 npub/nsec), the Nostr Community Group did:nostr draft, and the unmerged Key Migration and Revocation proposal (nips PR #1452).
  • AT Protocol: atproto.com/specs/did, /specs/handle, /specs/repository, /specs/account, /guides/account-migration, the did:plc v0.1 spec, and atproto.com/blog/plc-replicas.
  • ActivityPub: the W3C ActivityPub Recommendation, Mastodon’s WebFinger, account-migration (“moving”) and moderation documentation, joinmastodon.org servers, and the FEP-ef61 “Portable Objects” community draft.
  • Farcaster: the Farcaster protocol SPECIFICATION (Id Registry, Signers, Storage Registry, hubs/CRDTs, username proofs), and the Farcaster architecture docs on overview, contracts, and ENS/Fname names.

Where a claim could not be quoted verbatim from a spec — notably the “free to exist” characterization of AT Protocol and ActivityPub, and the absence of a W3C DID method in Farcaster’s spec — that is flagged inline as inferred from the architecture rather than stated as an explicit provision, so you can judge the evidence yourself.