A Fediverse ID is an identifier that conceptually is usually used to point to a person, but also can be conceptually used to point to an application, a group, a organization, a service, or any types of entities.
Here are some sample Fediverse IDs:
A Fediverse ID looks similar to an e-mail address.
The main superficial difference being that a Fediverse ID starts with an at sign (“@”) (Unicode character U+0040), but an e-mail address does not.
Fediverse IDs appear in posts on the Fediverse, and are typed (something with the help of some form of autocomplete) by users.
Part of the process of resolving a Fediverse ID transfomrs a Fediverse ID into an
Here is an example:
at sign ↓ @joeblow@example.com ← Fediverse ID acct:joeblow@example.com ← acct URI ↑ no at sign
The final say for what is and is not a valid Fediverse IDs are the many implementations of
But, having said that, what we can infer what an implementation that uses Fediverse IDs should probably support at minimum. I.e., an implmentation consider more than just this as a valid Fediverse ID — but all these should work.
Because Fediverse IDs are, from a technical point-of-view, closely tied to
Inferring from IETF RFC-7565 (The 'acct' URI Scheme), the syntax of a Fediverse ID is:
fediverseID = "@" actor "@" host
Where “actor” is defined as:
actor = unreserved / sub-delims 0*( unreserved / pct-encoded / sub-delims ) unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" pct-encoded = "%" HEXDIG HEXDIG ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9 HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
(Again note that an implementation could support more characters for “actor” than what is given by this definition.)
And “host” is defined as
host = IP-literal / IPv4address / reg-name IP-literal = "[" ( IPv6address / IPvFuture ) "]" IPv6address = 6( h16 ":" ) ls32 / "::" 5( h16 ":" ) ls32 / [ h16 ] "::" 4( h16 ":" ) ls32 / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 / [ *4( h16 ":" ) h16 ] "::" ls32 / [ *5( h16 ":" ) h16 ] "::" h16 / [ *6( h16 ":" ) h16 ] "::" h16 = 1*4HEXDIG ls32 = ( h16 ":" h16 ) / IPv4address IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" ) IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet dec-octet = DIGIT ; 0-9 / %x31-39 DIGIT ; 10-99 / "1" 2DIGIT ; 100-199 / "2" %x30-34 DIGIT ; 200-249 / "25" %x30-35 ; 250-255 reg-name = *( unreserved / pct-encoded / sub-delims )