+ 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 ) ++