Skip to content

titles

The titles array contains objects that describe the details about each title that is associated with a group.

While many of the properties in the titles array are optional, the more that are included, the more that a DAT application is able to filter on.

In the following example, required properties are highlighted. The values are for example only.

"titles": [
  {
    "name": "Some Video Game (USA)",
    "id": "123456",
    "build": "Production",
    "published": true,
    "type": "Game",
    "subtype": "Educational",
    "releaseDate": "1993-10-12",
    "version": "Rev 1",
    "versionInternal": 1,
    "serial": "SLUS-000000",
    "isAlternate": false,
    "isCompilation": false,
    "isDemo": false,
    "isLicensed": false,
    "isMIA": false,
    "isPirate": false,
    "isSuperset": false,
    "contains": [],
    "regions": ["US"],
    "languages": {
      "audio": ["en", "ja"],
      "interface": ["en"],
      "subtitles": ["en"]
    },
    "localNames": [
      "en": "Some Video Game",
      "ja": "別のビデオゲーム"
    ],
    "developer": "That Game Dev",
    "publisher": "That Game Publisher",
    "source": ["3.5\" Floppy Disk"],
    "peripherals": ["Keyboard", "Mouse"],
    "players": 4,
    "playModes": ["Single Player", "Competitive (Online Free-for-all)"],
    "videoStandards": ["NTSC"],
    "sets": [
      ...
    ]
  }
]

Required properties

  • name pattern string required

    The name of the title, in UTF-8. Must be globally unique. This is used for the name of the archive or folder of the contained sets, under the following conditions:

    • The container of the set isn't set to null.

    • The name of the set isn't defined.

    Names can't end with a period or space, start with a path separator, or use the following invalid path characters:

    :<>"|?*\
    

    Path separators are represented Linux-style, with / instead of \. Don't use absolute paths, paths are relative to a path the user sets.

    Expand for developer details

    Invalid path characters are found with the following regular expression:

    ^[^:<>\"\\|?*].*[^. :<>\"\\|?*]$
    

    Non-UTF-8 characters are found with the following regular expressions:

    [\xC0-\xC1]
    [\xF5-\xFF]
    \xE0[\x80-\x9F]
    \xF0[\x80-\x8F]
    [\xC2-\xDF](?![\x80-\xBF])
    [\xE0-\xEF](?![\x80-\xBF]{2})
    [\xF0-\xF4](?![\x80-\xBF]{3})
    (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF]
    (?<![\xC2-\xDF]|[\xE0-\xEF]|[\xE0-\xEF][\x80-\xBF]|[\xF0-\xF4]|[\xF0-\xF4][\x80-\xBF]|[\xF0-\xF4][\x80-\xBF]{2})[\x80-\xBF]
    (?<=[\xE0-\xEF])[\x80-\xBF](?![\x80-\xBF])
    (?<=[\xF0-\xF4])[\x80-\xBF](?![\x80-\xBF]{2})
    (?<=[\xF0-\xF4][\x80-\xBF])[\x80-\xBF](?![\x80-\xBF])
    
  • regions enum array required

    Which regions the title was released in. Valid individual region codes are two characters long, and are described in ISO 3166-1 alpha-2. Grouped regions are three characters long, and defined entirely by this standard.

    The following general rules apply:

    • If you don't know where a title is from, use an empty array:

      "regions": []
      
    • If you do know where a title is from, prefer listing individual regions over grouped regions where possible for better granularity.

    • Region codes should always be listed in alphabetical order.

    For grouped regions, keep the following rules in mind:

    • Only use grouped regions by themselves when a title is clearly intended for release in that broad area. For example, titles have often been released for Europe due to the PAL video standard, some other form of region locking, or because of the level of English comprehension of the continent. Digitally-distributed titles often have only one global version.

    • When using grouped regions, be aware that each can contain several individual regions that have vastly different languages, even within those individual regions. It's not good enough to have a grouped region listed without its languages — just ASI (Asia) by itself tells us nothing about who the target audience is. Be extra diligent in adding all the supported languages for the title, even if this means testing to find out.

    • If you have more than two individual regions listed that belong to a grouped region, also add that grouped region. For example, if a title was released in France and Germany, it's also worth adding Europe: ["FR", "DE", "EUR"]. Be aware that individual regions can be part of multiple grouped regions. For example, Türkiye is a melting pot of cultures at the intersection of Asia, Europe, and the Middle East. Mexico is part of North America, but also Latin America.

    The valid regions are as follows:

    • AF - Afghanistan
    • AX - Åland Islands
    • AL - Albania
    • DZ - Algeria
    • AS - American Samoa
    • AD - Andorra
    • AO - Angola
    • AI - Anguilla
    • AQ - Antarctica
    • AG - Antigua and Barbuda
    • AR - Argentina
    • AM - Armenia
    • AW - Aruba
    • AU - Australia
    • AT - Austria
    • AZ - Azerbaijan
    • BS - Bahamas
    • BH - Bahrain
    • BD - Bangladesh
    • BB - Barbados
    • BY - Belarus
    • BE - Belgium
    • BZ - Belize
    • BJ - Benin
    • BM - Bermuda
    • BT - Bhutan
    • BO - Bolivia
    • BQ - Bonaire, Sint Eustatius and Saba
    • BA - Bosnia and Herzegovina
    • BW - Botswana
    • BV - Bouvet Island
    • BR - Brazil
    • IO - British Indian Ocean Territory
    • BN - Brunei Darussalam
    • BG - Bulgaria
    • BF - Burkina Faso
    • BI - Burundi
    • CV - Cabo Verde
    • KH - Cambodia
    • CM - Cameroon
    • CA - Canada
    • KY - Cayman Islands
    • CF - Central African Republic
    • TD - Chad
    • CL - Chile
    • CN - China
    • CX - Christmas Island
    • CC - Cocos (Keeling) Islands
    • CO - Colombia
    • KM - Comoros
    • CG - Congo
    • CD - Congo, Democratic Republic of the
    • CK - Cook Islands
    • CR - Costa Rica
    • CI - Côte d'Ivoire
    • HR - Croatia
    • CU - Cuba
    • CW - Curaçao
    • CY - Cyprus
    • CZ - Czechia
    • DK - Denmark
    • DJ - Djibouti
    • DM - Dominica
    • DO - Dominican Republic
    • EC - Ecuador
    • EG - Egypt
    • SV - El Salvador
    • GQ - Equatorial Guinea
    • ER - Eritrea
    • EE - Estonia
    • SZ - Eswatini
    • ET - Ethiopia
    • FK - Falkland Islands
    • FO - Faroe Islands
    • FJ - Fiji
    • FI - Finland
    • FR - France
    • GF - French Guiana
    • PF - French Polynesia
    • TF - French Southern Territories
    • GA - Gabon
    • GM - Gambia
    • GE - Georgia
    • DE - Germany
    • GH - Ghana
    • GI - Gibraltar
    • GR - Greece
    • GL - Greenland
    • GD - Grenada
    • GP - Guadeloupe
    • GU - Guam
    • GT - Guatemala
    • GG - Guernsey
    • GN - Guinea
    • GW - Guinea-Bissau
    • GY - Guyana
    • HT - Haiti
    • HM - Heard Island and McDonald Islands
    • VA - Holy-See
    • HN - Honduras
    • HK - Hong Kong
    • HU - Hungary
    • IS - Iceland
    • IN - India
    • ID - Indonesia
    • IR - Iran, Islamic Republic of
    • IQ - Iraq
    • IE - Ireland
    • IM - Isle of Man
    • IL - Israel
    • IT - Italy
    • JM - Jamaica
    • JP - Japan
    • JE - Jersey
    • JO - Jordan
    • KZ - Kazakhstan
    • KE - Kenya
    • KI - Kiribati
    • KP - Korea, Democratic People's Republic of (North Korea)
    • KR - Korea, Republic of (South Korea)
    • KW - Kuwait
    • KG - Kyrgyzstan
    • LA - Lao People's Democratic Republic (Laos)
    • LV - Latvia
    • LB - Lebanon
    • LS - Lesotho
    • LR - Liberia
    • LY - Libya
    • LI - Liechtenstein
    • LT - Lithuania
    • LU - Luxembourg
    • MO - Macao
    • MG - Madagascar
    • MW - Malawi
    • MY - Malaysia
    • MV - Maldives
    • ML - Mali
    • MT - Malta
    • MH - Marshall Islands
    • MQ - Martinique
    • MR - Mauritania
    • MU - Mauritius
    • YT - Mayotte
    • MX - Mexico
    • FM - Micronesia, Federated States of
    • MD - Moldova, Republic of
    • MC - Monaco
    • MN - Mongolia
    • ME - Montenegro
    • MS - Montserrat
    • MA - Morocco
    • MZ - Mozambique
    • MM - Myanmar
    • NA - Namibia
    • NR - Nauru
    • NP - Nepal
    • NL - Netherlands, Kingdom of the
    • NC - New Caledonia
    • NZ - New Zealand
    • NI - Nicaragua
    • NE - Niger
    • NG - Nigeria
    • NU - Niue
    • NF - Norfolk Island
    • MK - North Macedonia
    • MP - Northern Mariana Islands
    • NO - Norway
    • OM - Oman
    • PK - Pakistan
    • PW - Palau
    • PS - Palestine, Sate of
    • PA - Panama
    • PG - Papua New Guinea
    • PY - Paraguay
    • PE - Peru
    • PH - Philippines
    • PN - Pitcairn
    • PL - Poland
    • PT - Portugal
    • PR - Puerto Rico
    • QA - Qatar
    • RE - Réunion
    • RO - Romania
    • RU - Russian Federation (Russia)
    • RW - Rwanda
    • BL - Saint Barthélemy
    • SH - Saint Helena, Ascension and Tristan da Cunha
    • KN - Saint Kitts & Nevis
    • LC - Saint Lucia
    • PM - Saint Pierre & Miquelon
    • VC - Saint Vincent and the Grenadines
    • WS - Samoa
    • SM - San Marino
    • ST - Sao Tome & Principe
    • SA - Saudi Arabia
    • SN - Senegal
    • RS - Serbia
    • SC - Seychelles
    • SL - Sierra Leone
    • SG - Singapore
    • SX - Sint Maarten (Dutch)
    • MF - Sint Maarten (French)
    • SK - Slovakia
    • SI - Slovenia
    • SB - Solomon Islands
    • SO - Somalia
    • ZA - South Africa
    • GS - South Georgia and the South Sandwich Islands
    • SS - South Sudan
    • ES - Spain
    • LK - Sri Lanka
    • SD - Sudan
    • SR - Suriname
    • SJ - Svalbard and Jan Mayen
    • SE - Sweden
    • CH - Switzerland
    • SY - Syrian Arab Republic (Syria)
    • TW - Taiwan, Province of China
    • TJ - Tajikstan
    • TZ - Tanzania, United Republic of
    • TH - Thailand
    • TL - Timor-Leste
    • TG - Togo
    • TK - Tokelau
    • TO - Tonga
    • TT - Trinidad and Tobago
    • TN - Tunisia
    • TR - Türkiye
    • TM - Turkmenistan
    • TC - Turks and Caicos Islands
    • TV - Tuvalu
    • UG - Uganda
    • UA - Ukraine
    • AE - United Arab Emirates
    • GB - United Kingdom of Great Britain and Northern Ireland
    • UM - United States Minor Outlying Islands
    • US - United States of America
    • UY - Uruguay
    • UZ - Uzbekistan
    • VU - Vanuatu
    • VE - Venezuela, Bolivarian Republic of
    • VN - Viet Nam (Vietnam)
    • VG - Virgin Islands (British)
    • VI - Virgin Islands (U.S.)
    • WF - Wallis and Futuna
    • EH - Western Sahara
    • YE - Yemen
    • ZM - Zambia
    • ZW - Zimbabwe

    • GLO - Global

    • AFR - Africa

    • ASI - Asia

    • EUR - Europe

    • LAM - Latin America

    • MDE - Middle East

    • NAM - North America

    • NOR - Nordics

    • OCE - Oceania

    • SAM - South America

    Regions in graphical user interfaces

    These region codes are intended to keep the character count of the regions array, and therefore the file size, down. When building graphical user interfaces, opt to use full region names to keep it more accessible to users.

  • languages object required

    The supported languages for the title's audio, interface, and subtitles. If there are no audio, interface, or subtitle languages, add a singular null item to the relevant arrays:

    "languages": {
      "audio": [null],
      "interface": ["en"],
      "subtitles": [null]
    }
    

    If you don't know what languages are supported and aren't able to test to find out, leave the arrays empty. This isn't recommended. A sincere effort to catalog supported languages should be made — more data helps us all.

    "languages": {
      "audio": [],
      "interface": [],
      "subtitles": []
    }
    

    Constructing language codes

    Valid language codes are listed in the IANA language subtag registry. You can search for and validate a language code at BCP47 language subtag lookup. Here are some example codes:

    • en - English

    • en-US - English (United States of America)

    • zh-Hant - Chinese (Traditional) [written]

    • cmn - Chinese (Mandarin) [spoken]

    There are well over 9,000 subtags that can be combined in different ways to create a language code, so for page performance they're not listed here. It's also not sensible to include that much data in the schema validation, so validation needs to be done by the code generating the DAT file.

    To learn more about language codes, see the following pages:

    Choosing languages

    In all circumstances, consider the intended audience of the medium when selecting language codes. For example, if a video is largely in English and is intended for English-speaking audiences, but has a short scene in which people speak Japanese, you set the audio as ["en"], not ["en", "ja"].

    Order

    Language codes should always be listed in alphabetical order.

    Examples

    Metal Gear Solid Integral (Japan) on PlayStation has English audio, selectable English or Japanese subtitles, and a mix of English and Japanese for the interface—where Japanese is used for weapon and item descriptions, and English for everything else. It's a weird mix, but it's definitely intended for Japanese audiences, so it's represented as follows:

    "languages": {
      "audio": ["en"],
      "interface": ["ja"],
      "subtitles": ["en", "ja"]
    }
    

    Ghost in the Shell (France) on PlayStation has cutscenes where the audio is in French, but the interface is in English, and there are no subtitles. This is represented as follows:

    "languages": {
      "audio": ["fr"],
      "interface": ["en"],
      "subtitles": [null]
    }
    
    Expand for developer details

    Certain combinations of language types tell us useful things. For example, a Japanese title with the following properties is completely playable by English speakers:

    "languages": {
      "audio": [null],
      "interface": ["en"],
      "subtitles": [null]
    }
    

    Consider these scenarios when building filters for DAT files.

    Languages in graphical user interfaces

    These language codes are intended to keep the character count of the languages arrays, and therefore the file size, down. When building graphical user interfaces, opt to use full language names to keep it more accessible to users.

  • sets object array required

    Defines the different file sets within the title. Read more about the sets array.

Optional properties

  • build enum optional

    When in the software release life cycle the title was released. Must be one of the following values, in order of maturity and specificity:

    • Production: What reaches store shelves or internet distribution systems. This includes release to manufacturing (RTM) releases.

    • Release candidate: There are often multiple release candidates, of which one is chosen to go to production. Release candidates are feature complete, and only significant bugs force another release candidate to be issued.

    • Beta: A largely feature-complete version of a title, that still has bugs and performance issues to squash.

    • Alpha: An in-development version of a title that isn't feature complete, and isn't thoroughly tested. Likely to be highly buggy.

    • Pre-alpha: This includes early development titles and prototypes.

    • Review: A version of the title sent to reviewers. This can be production code, preproduction code, or have code in it that's unique to the reviewer copy.

    • Preproduction: A generic catch-all for a title that is at an unspecified development stage, but isn't the production version. Wherever possible, don't use this.

    If this property isn't present, the DAT application assumes the value is Production.

  • contains object array optional

    Lists the content that this title contains. Useful for identifying the following:

    • The individual titles that make up a compilation.
    • The individual parts that go into game of the year or special editions.
    • The multiple CDs that are superceded by a DVD rerelease of the same title.

    Compilations

    The contains array must be paired with isCompilation: true when describing compilations.

    Given the following compilation:

    Some Video Game A + Some Video Game B + Some Video Game C (USA)
    

    The contains array might look like this:

    "contains": [
      {
        "name": "Some Video Game A (USA)",
        "groupId": "654321",
        "languages": {
          "audio": ["en"],
          "interface": ["en"],
          "subtitles": ["en"]
        },
        "version": "1.1",
        "versionInternal": "1"
      },
      {
        "name": "Some Video Game B (USA)",
        "groupId": "654322",
        "languages": {
          "audio": ["en"],
          "interface": ["en"],
          "subtitles": ["en"]
        },
        "version": "1.3",
        "versionInternal": "1"
      },
      {
        "name": "Some Video Game C (USA)",
        "languages": {
          "audio": ["en"],
          "interface": ["en"],
          "subtitles": ["en"]
        },
        "version": "1.0",
        "versionInternal": "1"
      }
    ]
    

    Each contains title has its own languages object, as individual titles within a compilation often have different language support.

    The groupId property links the constituent title in a compilation to the relevant group of standalone titles it belongs to, via its globally unique id. At comparison time during a 1G1R operation, a compilation is broken down into its constituent titles and compared against the equivalent standalone titles. The title that's ultimately selected is up to user preference, whether that be to always keep the most recent version of a title, only keep compilations if they have unique titles, or otherwise.

    Where possible, the version and internalVersion properties should be consistent with the versioning of standalone titles. In this circumstance, it is okay to reuse a versionInternal value that has been used by an standalone title. For example, here's the Some Video Game A (USA) part of the contains array:

    {
      "name": "Some Video Game A (USA)",
      "groupId": "654321",
      "languages": {
        "audio": ["en"],
        "interface": ["en"],
        "subtitles": ["en"]
      },
      "version": "1.1",
      "versionInternal": "1"
    }
    

    And here's the relevant part of the standalone Some Video Game A (USA) entry in the DAT file:

    {
      "group": "Some Video Game",
      "id": "654321",
      "titles": [
        {
          "name": "Some Video Game A (USA)",
          "regions": ["US"],
          "languages": {
            "audio": ["en"],
            "interface": ["en"],
            "subtitles": ["en"]
          },
          "version": "1.1",
          "versionInternal": "1",
          ...
        }
      ]
    }
    

    Notice how the version and versionInternal fields match — this way we know the variant inside the compilation is exactly the same as the standalone title, and the DAT application will need to do more work to figure out what title to select during a 1G1R operation.

    The lack of groupId property for Some Video Game C (USA) indicates that this title is only found in the compilation. It's important to include these titles in the contains array, as it helps DAT applications to determine whether they should keep a compilation for its unique titles during 1G1R operations.

    Supersets

    The contains array must be paired with isSuperset: true when describing supersets.

    Given the following superset:

    Some Video Game - Game of the Year Edition (USA)
    

    The contains array might look like this:

    "contains": [
      {
        "name": "Some Video Game (USA)",
        "includesIds": ["123456", "234567"]
      },
      {
        "name": "Add-ons",
        "includesIds": ["345678", "456789", "987654"],
      },
      {
        "name": "Updates",
        "includesIds": ["012345", "543210"]
      },
      {
        "name": "Extra content",
        "extraContent": ["Attack of the Bad Sequel expansion", "Horse armor"]
      }
    ]
    

    Where the original title, its DLC, and its updates are listed. Content that isn't found in a individual title is added as a extraContent.

    The includesIds array lists the IDs of the individual titles, add-ons, and updates that are included in the superset. The included titles must be from the same region as the superset (or include the superset's region among its regions), and the array should contain all versions of the title that are the same version or older.

    For example, the includesIds array for the title Some Video Game (USA) might include both Some Video Game (USA) and Some Video Game (v1.1) (USA), as Some Video Game - Game of the Year Edition (USA) supersedes both.

    DVD releases

    The contains array for a DVD that has superceded a set of CDs might look like this:

    "contains": [
      {
        "name": "Some Video Game (Disc 1) (USA)",
        "includesIds": ["123456"]
      },
      {
        "name": "Some Video Game (Disc 2) (USA)",
        "includesIds": ["345678", "456789"]
      },
      {
        "name": "Some Video Game (Disc 3) (USA)",
        "includesIds": ["012345", "543210"]
      }
    ]
    

    The includesIds array lists the IDs of the individual titles associated with each disc in the set. The CDs listed in the contains array should come from the same region as the DVD release. All versions of the relevant CDs should be included that were released before the DVD was.

  • developer string optional

    The developer of the title.

  • id string optional

    A globally unique ID for the title. Usually a database ID to ease lookups for DAT file maintainers. Might be referenced by a DAT application when finding dependencies for add-ons or updates, or when present in a contains array.

  • isAlternate boolean optional

    Whether the title is an alternate variant of a release.

    Where possible, don't use this. This is a generic property that doesn't tell the user what's different about a title compared to the original. Instead, classify the title with a property that provides more detail.

    If this property isn't present, the DAT application assumes the value is false.

  • isCompilation boolean optional

    Whether the title is a compilation. When used in combination with contains, can be used by DAT applications to follow user preferences around keeping individual titles in preference of compilations, unless the compilation contains a unique title.

    Compilations live in their own groups, and shouldn't be grouped with their consituent titles.

    If this property isn't present, the DAT application assumes the value is false.

  • isDemo boolean optional

    Whether the title is a demo.

    If this property isn't present, the DAT application assumes the value is false.

  • isLicensed boolean optional

    Whether the title was sanctioned for release by a platform manufacturer, assuming there was an approval process in place.

    If this property isn't present, the DAT application assumes the value is true.

  • isMIA boolean optional

    Whether the title's digests have been verified by more than one person. If not, set the value to true.

    If this property isn't present, the DAT application assumes the value is false.

  • isPirate boolean optional

    Whether the title contains stolen assets. Often a hack of an existing game that uses intellectual property from other games.

    If the value is true, islicensed is considered false, regardless of its value in the DAT file.

    If this property isn't present, the DAT application assumes the value is false.

  • isSuperset boolean optional

    Whether the title contains more content than the original title, or for some reason is superior to another version. For example, game of the year editions, a regional variant with uncensored content, or a DVD version of a title previously released on multiple CDs.

    In 1G1R choices, supersets are selected above normal titles, so long as they fit the user's language priorities. Superset selection is cross-regional, meaning the following situation can arise:

    • The user preferences USA over Europe, and wants English only titles.

    • There are three titles available to choose from:

      • Some Video Game (USA)

      • Some Video Game (Europe)

      • Some Video Game - Game of the Year Edition (Europe)

    • Because Some Video Game - Game of the Year Edition (Europe) is in English, and is a superset, it gets selected even though the user preferenced USA titles over Europe. This gives the user the most recent version of the title with the most content.

    The following are some real world examples of where you'd want to select a title from a region that's different from user preference, due to it being a superset. For example, Sonic the Hedgehog (Japan) on the MegaDrive is a superset of Sonic the Hedgehog (USA) on the Genesis, as it features extra parallax effects and is in English. Fahrenheit (Europe) is a superset of Indigo Prophecy (USA) because it's uncensored. And there are quite a few special edition games that were only ever released in Europe, despite the base game being released in the USA.

    While most people are happy with these choices after the reasons for the selection has been explained to them, sometimes people have other use cases than just having the "best" variant of a title. DAT applications might choose to implement additional options for 1G1R selection like following strict region priority instead.

    If this property isn't present, the DAT application assumes the value is false.

  • localNames object optional

    Local names given to the title, defined by language. Often titles are recorded in databases using their romanized form instead of their original name to aid with searching for the title. Other times a title can have multiple names, and what is displayed depends on the region of the machine on which it's running.

    The localNames object is where these names can be kept in their original form. DAT applications can then use this data to rename files according to a user's regional preferences.

    Keys should follow the language codes found in the IANA language subtag registry. See languages for more details about selecting a language code.

    The following is an example of the localNames array:

    "localNames": {
      "en": "Altered Beast",
      "ja": "獣王記"
    }
    

    Only use the title's name — don't include additional information like tags found in naming systems.

    If a title can show more than one name depending on the region, and the title name is already in English, you should still include the English name in the localNames array. This is because client applications have no idea what language the title name is in, and so can't safely select it as the English name if someone sets that as a preference.

  • peripherals enum array optional

    Contains inputs used to control the title, or devices that show output from the title.

    Names are as generic as possible, with a focus on mentioning if specialist devices are required for an ideal emulation experience.

    For example, trying to play Guitar Hero with a standard controller is asking for a bad time, so it would be set to the following:

    "peripherals": [
      "Guitar"
    ]
    

    But playing almost any GameCube game with almost any controller through an emulator is perfectly fine, so they would generally be set to the following:

    "peripherals": [
      "Controller"
    ]
    

    For scenarios where titles are optimized for multiple inputs (for example, a racing game might be great with both controllers and a steering wheel), add both:

    "peripherals": [
      "Controller",
      "Pedals",
      "Steering Wheel (Lock-to-lock)/Paddle"
    ]
    

    Valid values are the following:

    • Controller

    • Controller with Touchpad

    • Controller with Trackball

    • Analog Joystick

    • Dance Pad

    • Digital Joystick

    • Digital Twin Sticks

    • Drums

    • EyeToy

    • Flight Stick

    • Guitar

    • HOTAS

    • Keyboard

    • Light Gun

    • Magnavox Odyssey Controller

    • Microphone

    • Microsoft Kinect

    • Microsoft Xbox Live Vision

    • Mouse

    • Nintendo Joy-Con

    • Nintendo Wii Balance Board

    • Nintendo Wii Remote

    • Nintendo Wii Remote and Nunchuk

    • Nintendo Power Glove

    • Pedals

    • Sega Dreamcast VMU

    • Sony EyeToy

    • Sony PlayStation Eye

    • Sony PlayStation Move

    • Sony Sixaxis

    • Spinner

    • Steering Wheel (Lock-to-lock)/Paddle

    • Steering Wheel (360°)

    • Touchscreen

    • Trackball

    • VR Headset

    • VR Headset and Controls

  • players int optional

    The number of players the title supports. Might be paired with playModes.

  • playModes enum array optional

    The play modes the title supports. Valid values are the following:

    • Single player

    • Co-op (Split-screen)

    • Co-op (Local)

    • Co-op (Remote)

    • Competitive (Split-screen Free-for-all)

    • Competitive (Split-screen Team)

    • Competitive (Local Free-for-all)

    • Competitive (Local Team)

    • Competitive (Remote Free-for-all)

    • Competitive (Remote Team)

  • published bool optional

    Whether the title was published. Unpublished titles that didn't have an official release should be set to false.

    If this property isn't present, the DAT application assumes the value is true.

  • publisher string optional

    The publisher of the title.

  • releaseDate pattern string optional

    The date the title was released. Must be an ISO 8601 extended format date, without the time zone. Valid formats include the following:

    • YYYY-MM-DD hh:mm:ss

    • YYYY-MM-DD hh:mm

    • YYYY-MM-DD

    • YYYY-MM

    • YYYY

    Expand for developer details

    Valid dates are found with the following regular expressions:

    ^[1-9][0-9]{3,3}-(?:(?:0[469]|11)-(?:0[1-9]|1[0-9]|2[0-9]|30)|02-(?:0[1-9]|1[0-9]|2[0-9])|(?:0[13578]|10|12)-(?:0[1-9]|1[0-9]|2[0-9]|3[01])) (?:0[0-9]|1[0-9]|2[0-3]):(?:[0-5][0-9]:?){1,2}(?<!:)$
    ^[1-9][0-9]{3,3}-(?:(?:0[469]|11)-(?:0[1-9]|1[0-9]|2[0-9]|30)|02-(?:0[1-9]|1[0-9]|2[0-9])|(?:0[13578]|10|12)-(?:0[1-9]|1[0-9]|2[0-9]|3[01])) (?:0[0-9]|1[0-9]|2[0-3]):(?:[0-5][0-9])$
    ^[1-9][0-9]{3,3}-(?:(?:0[469]|11)-(?:0[1-9]|1[0-9]|2[0-9]|30)|02-(?:0[1-9]|1[0-9]|2[0-9])|(?:0[13578]|10|12)-(?:0[1-9]|1[0-9]|2[0-9]|3[01]))$
    ^[1-9][0-9]{3,3}-(?:0[1-9]|1[0-2])$
    ^[1-9][0-9]{3,3}$
    

    There's a lower year bound of 1000, and an upper year bound of 9999. The regular expressions also constrain month and date pairs appropriately, although it's possible to have February 29 on a non-leap year. It's assumed that systems generating the DAT file will generate valid dates to avoid this. The schema validation just enforces the format to enable easier programmatic comparisons when determining if one title is newer than another.

  • serial string optional

    A manufacturer identifier for the title. Might be a cartridge serial, disc ring code, or otherwise.

  • source enum array optional

    The title's origin. Valid sources are:

    • 3.5\" floppy disk

    • 5.25\" floppy disk

    • BD-ROM

    • BD-ROM (Ultra HD)

    • Cassette tape

    • CD-ROM

    • Device

    • Digital

    • DVD-ROM

    • Famicom Disk

    • GameCube Game Disc

    • Game Card

    • GD-ROM

    • Hard Drive

    • HD-DVD

    • HuCard

    • LaserDisc

    • Memory Card

    • ROM Card

    • ROM Cartridge

    • UMD

    • VHS

    • Wii Optical Disc

    • Wii U Optical Disc

  • subtype enum optional

    The subtype of the title. Must be paired with a valid type.

    • Add-on - Valid with the Application and Game types.

    • Audio - Valid with the Application and Game types.

    • Children - Valid with the Application, Audio, Game, Multimedia, and Video types.

    • Educational - Valid with the Application, Audio, Game, Multimedia, and Video types.

    • Manual - Valid with the Application, Device, and Game types.

    • Update - Valid with the Application and Game types.

    • Video - Valid with the Application and Game types.

    For example:

    "type": "Game",
    "subtype": "Add-on"
    
  • type enum optional

    The type of the title. Must be one of the following:

    • Application

    • Audio

    • BIOS

    • Chip

    • Coverdisc

    • Device

    • Firmware

    • Game

    • Magazine

    • Multimedia

    • Video

    These can be paired with a subtype.

  • version string optional

    The version as reported by the title or media it came on. Don't include prefixes like v, or Rev, only include the version string itself.

    For example, don't use Rev 1, instead use 1. Don't use v1.1a, instead use 1.1a.

  • versionInternal int optional

    An integer-based version assigned by the DAT maintainer, so DAT applications don't have to parse multiple different versioning systems when making 1G1R decisions. This can also help fill the gap in 1G1R selection when the title's releaseDate is unknown.

    The earliest release is set to 1, with later releases increasing in value.

    The following rules apply:

    • The versionInternal is regional. That is, it only applies to, and is only compared against titles in the same region.

    • Don't assign the same number to multiple releases within the one region.

    • Numbering should start from the earliest available release, including preproduction.

    • If you don't know the release order, make your best guess. It's not ideal, but it means a 1G1R selection can actually happen.

    For example:

    ...
    "name": "Some Video Game (USA)",
    "versionInternal": 1,
    ...
    "name": "Some Video Game (USA) (v1.1)",
    "versionInternal": 2,
    ...
    "name": "Some Video Game (USA) (v1.2)",
    "versionInternal": 3,
    ...
    "name": "Some Video Game (Europe) (Beta)",
    "versionInternal": 1,
    ...
    "name": "Some Video Game (Europe)",
    "versionInternal": 2,
    ...
    "name": "Some Video Game - Game of the Year (Europe)",
    "versionInternal": 3,
    ...
    
    Expand for developer details

    This is an attempt to partially recreate how Retool sets up clone lists, while removing the need to write logic that figures out which titles are the oldest or newest. See 1G1R calculations.

  • videoStandards enum array optional

    The video standard supported by the title. This describes a title's fixed output in both color and resolution, as opposed to any monitor standard that might be receiving the output.

    Use RGB for any title that supports higher resolutions than SVGA, and allows for flexible resolution output.

    Valid standards are:

    • 4K Ultra HD

    • 8K Ultra HD

    • AX-VGA

    • CGA

    • EGA

    • EVGA

    • HGC

    • HDTV (720i)

    • HDTV (720p)

    • Full HDTV (1080i)

    • Full HDTV (1080p)

    • JEGA

    • MCGA

    • MDA

    • MPAL

    • NTSC

    • NTSC (DV) (480i)

    • NTSC (DV) (480p)

    • PAL

    • PAL (DV) (576i)

    • PAL (DV) (576p)

    • PAL 60Hz

    • PGC

    • Plantronics

    • Quadcolor

    • RGB

    • SECAM

    • SVGA

    • Tandy

    • TIGA

    • VGA

    • XGA