Metadata
The contract for servers/<id>/metadata.json.
Each server has one metadata.json. The formal definition is a JSON Schema, version 2020-12. The validator applies it to every submission, and also applies the rules that a schema cannot express.
Example
{
"schemaVersion": 1,
"id": "example-server",
"name": "Example Server",
"description": "Fictional network used to document and test the Owl server media format. It is not a real server.",
"addresses": ["play.example.net", "mc.example.net"],
"primaryAddress": "play.example.net",
"minecraftVersions": ["1.8.9", "1.21.11"],
"gameTypes": ["PvP", "Survival"],
"primaryColor": "#2E6CF0",
"website": "https://example.net",
"socials": {
"discord": "https://discord.gg/example-server"
}
}Fields
| Field | Required | Type | Rules |
|---|---|---|---|
schemaVersion | yes | integer | Must be 1. |
id | yes | string | Must equal the directory name. See server ids. |
name | yes | string | 1 to 48 characters, no leading or trailing spaces, no control characters. |
description | yes | string | 10 to 280 characters, one paragraph. |
addresses | yes | string array | 1 to 5 unique hostnames. |
primaryAddress | yes | string | A hostname, and one of addresses. |
wildcardDomains | no | string array | Up to 3 hostnames. Every subdomain of each belongs to this server. |
minecraftVersions | yes | string array | One or two of 1.8.9 and 1.21.11. |
gameTypes | yes | string array | One to five values from the list below. |
primaryColor | yes | string | #RRGGBB. |
website | no | string | An HTTPS URL, at most 200 characters. |
socials | no | object | Any of discord, x, youtube, tiktok, instagram. Each must match its network's pattern. |
Game types
PvP, PvE, Survival, Skyblock, Factions, Minigames, Prison, Creative, Roleplay, Lobby, Other.
The list is closed. Adding a value is a change to the schema, made through a pull request.
Hostnames
An address is a hostname, with these rules:
- lowercase ASCII, with at least two labels, for example
play.example.net; - no scheme, path, whitespace, trailing dot or port;
- not an IP address;
- not under
.local,.localhost,.internal,.test,.invalidor.arpa; - punycode (
xn--) for non-ASCII names.
The default Minecraft port is implied. A server on another port cannot be described in version 1.
Wildcards
wildcardDomains is opt-in. A wildcard example.net matches example.net and every name ending in .example.net. Use it only when the network really answers on all of them. A wildcard cannot overlap another server's wildcard, and cannot capture another server's address.
Unknown fields
Unknown fields are rejected, not ignored. This keeps private information, such as an owner's email, out of the public repository.
Checks beyond the schema
- The directory name is a valid id, and equals
metadata.id. - The id has not been retired.
primaryAddressis listed inaddresses.- Each address belongs to one server only.
- The file is at most 16 KiB, valid UTF-8 JSON, without a byte-order mark.