JSON Schema
The complete JSON Schema for Retropak manifests.
Schema Definition
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://retropak.org/schemas/v1/retropak.schema.json",
"version": "1-0-0",
"title": "Retropak Manifest",
"description": "Metadata specification for Retropak software containers",
"$defs": {
"platform": {
"type": "string",
"description": "Platform identifier.",
"enum": [
"32x",
"3do",
"3ds",
"a2600",
"a5200",
"a7800",
"a800",
"amiga",
"apple2",
"aquarius",
"archimedes",
"arduboy",
"astrocade",
"bbc",
"c128",
"c64",
"cd32",
"cdi",
"cdtv",
"channelf",
"coco",
"coleco",
"cpc",
"dos",
"dragon",
"dreamcast",
"einstein",
"electron",
"emerson",
"enterprise",
"fds",
"fmtowns",
"gamecom",
"gamecube",
"gamewave",
"gamate",
"gb",
"gba",
"gbc",
"gg",
"gizmondo",
"gnw",
"gp2x",
"gp32",
"gx4000",
"hyperscan",
"intellivision",
"jaguar",
"jaguarcd",
"laseractive",
"lynx",
"markiii",
"mcd",
"md",
"megaduck",
"microvision",
"mp1000",
"msx",
"msx2",
"n64",
"nds",
"nes",
"ng",
"ngage",
"ngcd",
"ngp",
"ngpc",
"nuon",
"o2",
"oric",
"pc88",
"pc98",
"pce",
"pcecd",
"pcfx",
"pet",
"pico",
"pippin",
"playdate",
"plus4",
"pokemini",
"ps2",
"ps3",
"ps4",
"ps5",
"psp",
"psx",
"pv1000",
"ql",
"sam",
"saturn",
"scv",
"sg1000",
"sgx",
"sms",
"snes",
"spectrum",
"st",
"studio2",
"supervision",
"switch",
"thomson",
"ti994a",
"tigerhandheld",
"trs80",
"tutor",
"vb",
"vcg",
"vectrex",
"vic20",
"videopac",
"vita",
"wii",
"wiiu",
"ws",
"wsc",
"x360",
"x68000",
"xavix",
"xbox",
"xone",
"xsx",
"zeebo",
"zx80",
"zx81"
]
},
"genre": {
"type": "string",
"description": "Genre classification.",
"enum": [
"action_rpg",
"action",
"adventure",
"american_football",
"arcade",
"artillery",
"athletics",
"baseball",
"basketball",
"beat_em_up",
"billiards",
"block_puzzle",
"board_game",
"bowling",
"boxing",
"bullet_hell",
"card_game",
"casino",
"casual",
"cricket",
"cute_em_up",
"dating_sim",
"dungeon_crawler",
"educational",
"endless_runner",
"extreme_sports",
"fighting",
"fishing",
"flight",
"fps",
"golf",
"hack_and_slash",
"hockey",
"horror",
"horse_racing",
"life_sim",
"light_gun",
"logic_puzzle",
"mahjong",
"management",
"match_3",
"maze",
"mech",
"metroidvania",
"minigames",
"mmorpg",
"moba",
"music_rhythm",
"open_world",
"pachinko",
"party",
"pinball",
"platformer",
"point_and_click",
"pool",
"puzzle",
"quiz",
"racing",
"rail_shooter",
"real_time_strategy",
"roguelike",
"rpg",
"run_and_gun",
"sandbox",
"shoot_em_up",
"shooter",
"simulation",
"skateboarding",
"skiing",
"snooker",
"snowboarding",
"soccer",
"sports",
"stealth",
"strategy",
"surfing",
"survival",
"tactical_rpg",
"tennis",
"text_adventure",
"tower_defense",
"trivia",
"turn_based_strategy",
"twin_stick",
"vehicle_combat",
"visual_novel",
"volleyball",
"word_puzzle",
"wrestling"
]
},
"category": {
"type": "string",
"description": "A classification for the type/nature of the software.",
"enum": [
"addon",
"application",
"beta",
"bios",
"compilation",
"coverdisk",
"demo",
"educational",
"firmware",
"freeware",
"game",
"homebrew",
"multimedia",
"promotional",
"prototype",
"scene_demo",
"shareware",
"unlicensed",
"utility"
]
},
"feature": {
"type": "string",
"description": "Input device, peripheral, or capability.",
"enum": [
"analog_stick",
"arcade_stick",
"balance_board",
"bongos",
"buzzer",
"camera",
"crank",
"dance_mat",
"dongle",
"drums",
"fishing_rod",
"flight_stick",
"gamepad",
"guitar",
"instrument",
"keyboard_controller",
"keyboard",
"light_gun",
"link_cable",
"maracas",
"mech_controller",
"microphone",
"motion_controls",
"mouse",
"multitap",
"nfc_portal",
"online",
"paddle",
"pedals",
"pointer",
"rumble",
"save_file",
"spinner",
"steering_wheel",
"stylus",
"touch_screen",
"trackball",
"train_controller",
"turntable",
"twin_stick",
"vr_headset",
"zapper"
]
},
"mediaType": {
"type": "string",
"description": "The format/medium type of the file.",
"enum": [
"archive",
"bluray",
"cartridge",
"cdrom",
"download",
"dvd",
"floppy",
"gd_rom",
"hdd_image",
"laserdisc",
"memory_card",
"tape",
"umd"
]
},
"region": {
"type": "string",
"description": "Region encoding.",
"enum": [
"asia",
"australia",
"brazil",
"canada",
"china",
"europe",
"france",
"germany",
"hong-kong",
"india",
"italy",
"japan",
"korea",
"mexico",
"netherlands",
"ntsc-j",
"ntsc-u",
"pal-a",
"pal-b",
"pal-g",
"pal",
"russia",
"scandinavia",
"spain",
"taiwan",
"uk",
"usa",
"world"
]
},
"dumpStatus": {
"type": "string",
"description": "Quality/status of the ROM dump.",
"enum": [
"alternate",
"bad",
"good",
"hacked",
"overdump",
"pirate",
"prototype",
"trained",
"translated",
"underdump",
"unknown",
"unlicensed"
]
},
"ageRating": {
"type": "object",
"description": "Age/content ratings from various rating boards.",
"properties": {
"nsfw": {
"type": "boolean",
"description": "Whether the title contains adult or explicit content.",
"default": false
},
"minimum": {
"type": "integer",
"description": "Generic minimum recommended age when no official rating exists.",
"minimum": 0,
"maximum": 21
},
"esrb": {
"type": "string",
"description": "ESRB rating (North America).",
"enum": [
"ec",
"e",
"e10",
"t",
"m",
"ao",
"rp"
]
},
"pegi": {
"type": "integer",
"description": "PEGI rating (Europe).",
"enum": [
3,
7,
12,
16,
18
]
},
"cero": {
"type": "string",
"description": "CERO rating (Japan).",
"enum": [
"a",
"b",
"c",
"d",
"z"
]
},
"usk": {
"type": "integer",
"description": "USK rating (Germany).",
"enum": [
0,
6,
12,
16,
18
]
},
"acb": {
"type": "string",
"description": "ACB rating (Australia).",
"enum": [
"g",
"pg",
"m",
"ma15",
"r18",
"rc"
]
},
"grac": {
"type": "string",
"description": "GRAC rating (South Korea).",
"enum": [
"all",
"12",
"15",
"18"
]
},
"bbfc": {
"type": "string",
"description": "BBFC rating (United Kingdom).",
"enum": [
"u",
"pg",
"12",
"12a",
"15",
"18",
"r18"
]
}
}
},
"configFile": {
"type": "object",
"description": "An external configuration file for emulator or platform-specific settings.",
"required": [
"file"
],
"properties": {
"file": {
"type": "string",
"description": "Path to the configuration file."
},
"target": {
"type": "string",
"description": "Target emulator, core, or platform (e.g. 'retroarch', 'mame', 'dolphin')."
},
"description": {
"type": "string",
"description": "What this config file does or overrides."
}
}
},
"image": {
"type": "object",
"description": "An image file with optional alt text for accessibility.",
"required": [
"file"
],
"properties": {
"file": {
"type": "string",
"description": "Path to the image file."
},
"alt": {
"type": "string",
"description": "Alternative text describing the image for accessibility."
}
}
},
"creditEntry": {
"type": "object",
"description": "A person credited for work on the title.",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Person's name."
},
"roles": {
"type": "array",
"description": "Job titles or roles (e.g. 'Director', 'Lead Programmer', 'Composer').",
"items": {
"type": "string"
}
}
}
},
"musicTrack": {
"type": "object",
"description": "A soundtrack or audio file from the title.",
"required": [
"file"
],
"properties": {
"title": {
"type": "string",
"description": "Display name of the music track."
},
"file": {
"type": "string",
"description": "Path to the audio file."
},
"background": {
"type": "boolean",
"description": "Whether this track is suitable for background/menu music when browsing titles.",
"default": false
}
}
},
"physicalMediaImage": {
"type": "object",
"description": "An image of physical media (cartridge, disc, tape, etc.).",
"required": [
"file"
],
"properties": {
"file": {
"type": "string",
"description": "Path to the physical media image file."
},
"alt": {
"type": "string",
"description": "Alternative text describing the image for accessibility."
},
"mediaId": {
"type": "string",
"description": "References the 'id' field of a media item, if specific to one disc/cart."
},
"type": {
"$ref": "#/$defs/mediaType"
}
}
},
"mediaItem": {
"type": "object",
"description": "A media file (ROM, disc image, tape, etc.).",
"required": [
"filename",
"type"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for this media item, used for referencing in other fields."
},
"filename": {
"type": "string",
"description": "Relative path to the media file within the archive."
},
"label": {
"type": "string",
"description": "Display name for this specific media item (e.g. 'Disc 1')."
},
"type": {
"$ref": "#/$defs/mediaType"
},
"bootable": {
"type": "boolean",
"description": "Whether the title can be started from this media. Set to false for data-only discs.",
"default": true
},
"index": {
"type": "integer",
"description": "Sequence number for multi-part media."
},
"region": {
"$ref": "#/$defs/region"
},
"md5": {
"type": "string",
"pattern": "^[a-fA-F0-9]{32}$",
"description": "MD5 checksum of the media file for verification."
},
"sha1": {
"type": "string",
"pattern": "^[a-fA-F0-9]{40}$",
"description": "SHA-1 checksum of the media file for verification."
},
"crc32": {
"type": "string",
"pattern": "^[a-fA-F0-9]{8}$",
"description": "CRC32 checksum of the media file for verification."
},
"version": {
"type": "string",
"description": "Version identifier for this ROM/media (e.g. 'Rev A', '1.1', 'v1.0')."
},
"status": {
"$ref": "#/$defs/dumpStatus"
},
"verified": {
"type": "boolean",
"description": "Whether this dump has been verified against a known database (No-Intro, Redump, etc.)."
},
"source": {
"type": "string",
"description": "Source database or group that verified the dump (e.g. 'No-Intro', 'Redump', 'TOSEC')."
},
"serial": {
"type": "string",
"description": "Official product serial/catalog number from the original media."
},
"notes": {
"type": "string",
"description": "Additional notes about this specific media file (e.g. distribution method, requirements, known issues)."
}
}
},
"compilationTitle": {
"type": "string",
"description": "Name of a title included in a compilation release."
},
"players": {
"type": "object",
"description": "Multiplayer capabilities.",
"properties": {
"min": {
"type": "integer",
"description": "Minimum number of players required to play.",
"default": 1
},
"max": {
"type": "integer",
"description": "Maximum number of simultaneous players supported."
},
"coop": {
"type": "boolean",
"description": "Whether cooperative play is supported."
}
}
},
"features": {
"type": "object",
"description": "Input devices, peripherals, and capabilities.",
"properties": {
"required": {
"type": "array",
"description": "Features required to use this title.",
"items": {
"$ref": "#/$defs/feature"
}
},
"supported": {
"type": "array",
"description": "Optional features the title supports.",
"items": {
"$ref": "#/$defs/feature"
}
}
}
}
},
"type": "object",
"required": [
"schemaVersion",
"info",
"media"
],
"properties": {
"schemaVersion": {
"type": "string",
"pattern": "^\\d+-\\d+-\\d+$",
"description": "The schema version this manifest conforms to, using schemaver format MODEL-REVISION-ADDITION (e.g., '1-0-0')."
},
"manifestVersion": {
"type": "string",
"pattern": "^\\d+(\\.\\d+)*$",
"description": "Version of this manifest file, for tracking revisions (e.g., '1', '2.1')."
},
"info": {
"type": "object",
"description": "Title metadata and information.",
"required": [
"title",
"platform"
],
"properties": {
"title": {
"type": "string",
"description": "The primary display name of the title."
},
"alternativeTitles": {
"type": "array",
"description": "Alternative names (e.g. regional titles, translated names).",
"items": {
"type": "string"
}
},
"platform": {
"$ref": "#/$defs/platform",
"description": "Unique identifier for the platform."
},
"developer": {
"type": "string",
"description": "The studio or individual who developed the title."
},
"publisher": {
"type": "string",
"description": "The company that published the title."
},
"country": {
"type": "string",
"pattern": "^[a-z]{2}$",
"description": "Country of origin where the title was developed (ISO 3166-1 alpha-2 code, e.g. 'jp', 'us', 'gb')."
},
"releaseDate": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Original release date in ISO 8601 format (YYYY-MM-DD)."
},
"description": {
"type": "string",
"description": "A text summary or synopsis of the title."
},
"category": {
"type": "array",
"description": "One or more classifications for the type/nature of the software.",
"items": {
"$ref": "#/$defs/category"
}
},
"genre": {
"type": "array",
"description": "One or more genre classifications.",
"items": {
"$ref": "#/$defs/genre"
}
},
"players": {
"$ref": "#/$defs/players"
},
"features": {
"$ref": "#/$defs/features"
},
"languages": {
"type": "array",
"description": "Languages supported (ISO 639-1 codes, e.g. 'en', 'ja', 'de').",
"items": {
"type": "string",
"pattern": "^[a-z]{2}$"
}
},
"credits": {
"type": "array",
"description": "People who worked on the title.",
"items": {
"$ref": "#/$defs/creditEntry"
}
},
"type": {
"type": "string",
"description": "Whether this is a standalone title or a compilation of multiple titles.",
"enum": [
"standalone",
"compilation"
],
"default": "standalone"
},
"contents": {
"type": "array",
"description": "For compilations: list of titles included in this release.",
"items": {
"$ref": "#/$defs/compilationTitle"
}
},
"externalIds": {
"type": "object",
"description": "Identifiers from external databases for cross-referencing.",
"properties": {
"igdb": {
"type": "integer",
"description": "IGDB (Internet Game Database) ID."
},
"mobygames": {
"type": "integer",
"description": "MobyGames ID."
},
"thegamesdb": {
"type": "integer",
"description": "TheGamesDB ID."
},
"screenscraper": {
"type": "integer",
"description": "ScreenScraper ID."
},
"rawg": {
"type": "integer",
"description": "RAWG ID."
},
"gamefaqs": {
"type": "integer",
"description": "GameFAQs ID."
}
}
},
"rating": {
"$ref": "#/$defs/ageRating"
},
"notes": {
"type": "string",
"description": "Additional notes, warnings, or information (e.g. access codes, compatibility notes, copy protection details)."
}
}
},
"media": {
"type": "array",
"description": "The media files (ROMs, disc images, tapes, etc.) included in this package.",
"minItems": 1,
"items": {
"$ref": "#/$defs/mediaItem"
}
},
"assets": {
"type": "object",
"description": "Artwork, documentation, and other supplementary files.",
"properties": {
"boxFront": {
"$ref": "#/$defs/image",
"description": "Front box/case cover image."
},
"boxBack": {
"$ref": "#/$defs/image",
"description": "Back box/case cover image."
},
"boxSpine": {
"$ref": "#/$defs/image",
"description": "Box/case spine image."
},
"physicalMedia": {
"type": "array",
"description": "Images of the physical media (cartridge, disc, tape, floppy, etc.).",
"items": {
"$ref": "#/$defs/physicalMediaImage"
}
},
"logo": {
"$ref": "#/$defs/image",
"description": "Logo/wordmark with transparent background."
},
"backdrop": {
"$ref": "#/$defs/image",
"description": "Widescreen background artwork for TV/big screen interfaces. Should be free of text or logos."
},
"titleScreen": {
"$ref": "#/$defs/image",
"description": "Title screen screenshot."
},
"gameplay": {
"type": "array",
"description": "Gameplay screenshots.",
"items": {
"$ref": "#/$defs/image"
}
},
"manual": {
"type": "string",
"description": "Path to the manual (PDF, image, html or text)."
},
"map": {
"$ref": "#/$defs/image",
"description": "Map or world chart image."
},
"music": {
"type": "array",
"description": "Soundtrack or audio files from the game.",
"items": {
"$ref": "#/$defs/musicTrack"
}
}
}
},
"config": {
"type": "array",
"description": "External configuration files for emulators or platforms.",
"items": {
"$ref": "#/$defs/configFile"
}
}
}
}
Using the Schema
You can use this schema to validate your Retropak manifest files with any JSON Schema validator.
Schema URL
The schema is hosted at: https://retropak.org/schemas/v1/retropak.schema.json
Validation Example
Using a JSON Schema validator, you can validate your manifest:
Or reference it directly in your manifest file:
{
"$schema": "https://retropak.org/schemas/v1/retropak.schema.json",
"schemaVersion": "1-0-0",
...
}
Schema Versioning
Retropak uses Schemaver (Schema Versioning) with the format MODEL-REVISION-ADDITION:
MODEL- Breaking changes (consumers must update)REVISION- Stricter validation (producers must update, old files still work)ADDITION- Backward-compatible additions
The current schema version is 1-0-0. See the specification for details.