Owl Developer
Server Media

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

FieldRequiredTypeRules
schemaVersionyesintegerMust be 1.
idyesstringMust equal the directory name. See server ids.
nameyesstring1 to 48 characters, no leading or trailing spaces, no control characters.
descriptionyesstring10 to 280 characters, one paragraph.
addressesyesstring array1 to 5 unique hostnames.
primaryAddressyesstringA hostname, and one of addresses.
wildcardDomainsnostring arrayUp to 3 hostnames. Every subdomain of each belongs to this server.
minecraftVersionsyesstring arrayOne or two of 1.8.9 and 1.21.11.
gameTypesyesstring arrayOne to five values from the list below.
primaryColoryesstring#RRGGBB.
websitenostringAn HTTPS URL, at most 200 characters.
socialsnoobjectAny 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, .invalid or .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.
  • primaryAddress is listed in addresses.
  • Each address belongs to one server only.
  • The file is at most 16 KiB, valid UTF-8 JSON, without a byte-order mark.

On this page