WebFinger JRD Builder (RFC 7033)
Build a JRD (JSON Resource Descriptor) for WebFinger (.well-known/webfinger) responses with acct: subject, aliases, properties and links (rel, type, href) — as used by Mastodon/ActivityPub.
Como servir
O documento deve ser servido em https://<dominio>/.well-known/webfinger?resource=acct:user@dominio com Content-Type: application/jrd+json. É a base do WebFinger (RFC 7033) e por isso Mastodon/ActivityPub conseguem descobrir o perfil de qualquer servidor a partir de um identificador @user@dominio.
WebFinger and the JRD: how the Fediverse finds people
WebFinger is the discovery protocol defined by RFC 7033 (September 2013) that turns a human-friendly identifier — [email protected] — into a machine-readable description of where that user actually lives on the web. It is the substrate the Fediverse runs on: Mastodon, Pleroma, Pixelfed, GoToSocial, Misskey, Akkoma and the federated previews of Meta Threads all walk WebFinger to resolve @[email protected] before the first ActivityPub message can be delivered. Without WebFinger there is no federation.
A WebFinger response is a JRD (JSON Resource Descriptor) served from a fixed endpoint with a specific content type:
GET /.well-known/webfinger?resource=acct:[email protected] HTTP/1.1
Host: example.com
Accept: application/jrd+json
200 OK
Content-Type: application/jrd+json
Access-Control-Allow-Origin: *
{
"subject": "acct:[email protected]",
"aliases": [
"https://example.com/@alice",
"https://example.com/users/alice"
],
"links": [
{ "rel": "self",
"type": "application/activity+json",
"href": "https://example.com/users/alice" },
{ "rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://example.com/@alice" },
{ "rel": "http://ostatus.org/schema/1.0/subscribe",
"template": "https://example.com/authorize_interaction?uri={uri}" }
]
}
The acct: scheme and the .well-known path
The acct: URI scheme (RFC 7565) was designed specifically for this — acct:[email protected] means "the account named alice at example.com" without committing to email, ActivityPub or any other protocol. The /.well-known/ path comes from RFC 8615; the WebFinger endpoint is one of the most-deployed entries there, alongside /.well-known/openid-configuration and /.well-known/security.txt. WebFinger replaces the legacy XML format XRD from OpenID 2.0 — the JSON-only shape is dramatically simpler to serve from a static file.
Mandatory link relations and CORS
For Fediverse interoperability the essential link relations are:
selfwithapplication/activity+json— the ActivityPub actor URLhttp://webfinger.net/rel/profile-page— human-facing HTML profilehttp://ostatus.org/schema/1.0/subscribe— remote-follow templatehttp://schemas.google.com/g/2010#updates-from— Atom feed (legacy OStatus)
CORS is non-optional: serve Access-Control-Allow-Origin: * or Fediverse web clients will fail silently. The endpoint must also accept a resource query parameter that may URL-encode the colon as %3A.
Operations, cache and privacy
Real instances cache WebFinger responses for hours — Cache-Control: max-age=3600 is typical. Mastodon rate-limits incoming requests aggressively (the Threads–Mastodon federation rollout in 2024 stressed this). Privacy concern: a public WebFinger endpoint confirms account existence — useful for legitimate discovery, but an enumeration surface for harassment. Some instances (sharkey, akkoma) allow authorized fetch: signed HTTP requests required even for WebFinger. The Brazilian Fediverse hubs (mastodon.com.br, ursal.zone, bolha.us) all expose standard WebFinger.
FAQ
Do I need WebFinger if I run an ActivityPub server? Yes. ActivityPub itself does not define name-to-actor lookup — WebFinger is the de-facto bridge between handles and actor URLs.
Can I disable WebFinger for privacy? Some instance software lets you require authentication (AUTHORIZED_FETCH=true). Disabling entirely breaks federation — you can be followed but only by people who already know the actor URL.
Why application/jrd+json and not plain application/json? RFC 7033 mandates the JRD media type — strict clients reject responses served as plain JSON.
Does Meta Threads use WebFinger? Yes — the Threads federation gateway exposes WebFinger for opted-in Threads accounts since 2024, returning ActivityPub self links.
Related Tools
RFC Template Generator
Generate an RFC (Request for Comments) template to propose and discuss technical decisions in your team. Structure context, proposal and alternatives.
UUID v8 Custom Generator
Generate custom UUIDs v8 (RFC 9562) with arbitrary 122-bit payload useful for hierarchical or shard-aware IDs.
TLS-RPT Record Generator
Build DNS TLS-RPT records (RFC 8460) to receive SMTP TLS failure reports via email or HTTPS.
RRULE iCal Generator (RFC 5545)
Generate RFC 5545 recurrence rules (RRULE) with FREQ, BYDAY, INTERVAL, COUNT/UNTIL preview of next 10 occurrences.
OKR Builder (1 Objective + 3 Key Results)
Takes one qualitative objective and three measurable key results and lays them out as a formatted OKR block ready to paste into a plan or review doc.
.netrc File Builder
Build a ~/.netrc file (curl, ftp, git credential) with multiple 'machine HOST' entries (login, password, optional account) and a single 'default' fallback. Rejects passwords with '#' or whitespace (which break parsers) and reminds you to chmod 600.