@@ -387,6 +387,38 @@ Some identifiers are specific to given room versions, please refer to
387
387
the [ room versions specification] ( /rooms ) for more
388
388
information.
389
389
390
+ ### Common Namespaced Identifier Grammar
391
+
392
+ The specification defines some identifiers to use the * Common Namespaced
393
+ Identifier Grammar* . This is a common grammar intended for non-user-visible
394
+ identifiers, with a defined mechanism for implementations to create new
395
+ identifiers.
396
+
397
+ The grammar is defined as follows:
398
+
399
+ * An identifier must be at least one character and at most 255 characters
400
+ in length.
401
+ * Identifiers must start with one of the characters ` [a-z] ` , and be entirely
402
+ composed of the characters ` [a-z] ` , ` [0-9] ` , ` - ` , ` _ ` and ` . ` .
403
+ * Identifiers starting with the characters ` m. ` are reserved for use by the
404
+ official Matrix specification.
405
+ * Identifiers which are not described in the specification should follow the
406
+ Java Package Naming Convention to namespace their identifier. This is typically
407
+ a reverse DNS format, such as ` com.example.identifier ` .
408
+
409
+ {{% boxes/note %}}
410
+ Identifiers can and do inherit grammar from this specification. For example, "this
411
+ identifier uses the Common Namespaced Identifier Grammar, though without the namespacing
412
+ requirements" - this means that ` m. ` is still reserved, but that implementations
413
+ do not have to use the reverse DNS scheme to namespace their custom identifier.
414
+ {{% /boxes/note %}}
415
+
416
+ {{% boxes/rationale %}}
417
+ ASCII characters do not have issues with homoglyphs or alternative encodings which
418
+ might interfere with the identifier's purpose. Additionally, using lowercase
419
+ characters prevents concerns about case sensitivity.
420
+ {{% /boxes/rationale %}}
421
+
390
422
### Server Name
391
423
392
424
A homeserver is uniquely identified by its server name. This value is
0 commit comments