Requests for comment/Extension registration/Schema

From mediawiki.org

Most of the keys are either from $wgExtensionCredits or the name of the global variable with the "wg" prefix removed. This was up to date when originally created, but is not up to date with the current DefaultSettings.php.

Exceptions:

  • config: The configuration settings for this extension.
  • callback: A callback function to be run after this extension.json file is processed for setup that must occur in PHP.
  • namespaces: A combination of all the various namespace global settings.
{
	"$schema": "http://json-schema.org/schema#",
	"description": "MediaWiki extension.json schema",
	"type": "object",
	"properties": {
		"name": {
			"type": "string",
			"description": "The extension's canonical name."
		},
		"info-files": {
			"type": "array",
			"description": "A list of filenames that should be loaded, in addition to this one"
		},
		"type": {
			"type": "string",
			"description": "The extension's type, as an index to $wgExtensionCredits.",
			"default": "other",
			"enum": [
				"api",
				"antispam",
				"datavalues",
				"media",
				"parserhook",
				"semantic",
				"skin",
				"specialpage",
				"variable",
				"other"
			]
		},
		"author": {
			"type": [
				"string",
				"array"
			],
			"description": "Extension's authors.",
			"items": {
				"type": "string"
			},
			"additionalItems": false
		},
		"path": {
			"type": "string"
		},
		"version": {
			"type": "string",
			"description": "The version of this release of the extension."
		},
		"url": {
			"type": "string",
			"description": "URL to the homepage for the extension.",
			"format": "uri"
		},
		"description": {
			"type": "string",
			"description": "Raw description of the extension."
		},
		"descriptionmsg": {
			"type": "string",
			"description": "Message key for a i18n message describing the extension."
		},
		"license-name": {
			"type": "string",
			"description": "Short identifier for the license under which the extension is released.",
			"enum": [
				"AFL-1.1",
				"AFL-1.2",
				"AFL-2.0",
				"AFL-2.1",
				"AFL-3.0",
				"APL-1.0",
				"Aladdin",
				"ANTLR-PD",
				"Apache-1.0",
				"Apache-1.1",
				"Apache-2.0",
				"APSL-1.0",
				"APSL-1.1",
				"APSL-1.2",
				"APSL-2.0",
				"Artistic-1.0",
				"Artistic-1.0-cl8",
				"Artistic-1.0-Perl",
				"Artistic-2.0",
				"AAL",
				"BitTorrent-1.0",
				"BitTorrent-1.1",
				"BSL-1.0",
				"BSD-2-Clause",
				"BSD-2-Clause-FreeBSD",
				"BSD-2-Clause-NetBSD",
				"BSD-3-Clause",
				"BSD-3-Clause-Clear",
				"BSD-4-Clause",
				"BSD-4-Clause-UC",
				"CECILL-1.0",
				"CECILL-1.1",
				"CECILL-2.0",
				"CECILL-B",
				"CECILL-C",
				"ClArtistic",
				"CNRI-Python",
				"CNRI-Python-GPL-Compatible",
				"CPOL-1.02",
				"CDDL-1.0",
				"CDDL-1.1",
				"CPAL-1.0",
				"CPL-1.0",
				"CATOSL-1.1",
				"Condor-1.1",
				"CC-BY-1.0",
				"CC-BY-2.0",
				"CC-BY-2.5",
				"CC-BY-3.0",
				"CC-BY-ND-1.0",
				"CC-BY-ND-2.0",
				"CC-BY-ND-2.5",
				"CC-BY-ND-3.0",
				"CC-BY-NC-1.0",
				"CC-BY-NC-2.0",
				"CC-BY-NC-2.5",
				"CC-BY-NC-3.0",
				"CC-BY-NC-ND-1.0",
				"CC-BY-NC-ND-2.0",
				"CC-BY-NC-ND-2.5",
				"CC-BY-NC-ND-3.0",
				"CC-BY-NC-SA-1.0",
				"CC-BY-NC-SA-2.0",
				"CC-BY-NC-SA-2.5",
				"CC-BY-NC-SA-3.0",
				"CC-BY-SA-1.0",
				"CC-BY-SA-2.0",
				"CC-BY-SA-2.5",
				"CC-BY-SA-3.0",
				"CC0-1.0",
				"CUA-OPL-1.0",
				"D-FSL-1.0",
				"WTFPL",
				"EPL-1.0",
				"eCos-2.0",
				"ECL-1.0",
				"ECL-2.0",
				"EFL-1.0",
				"EFL-2.0",
				"Entessa",
				"ErlPL-1.1",
				"EUDatagrid",
				"EUPL-1.0",
				"EUPL-1.1",
				"Fair",
				"Frameworx-1.0",
				"FTL",
				"AGPL-1.0",
				"AGPL-3.0",
				"GFDL-1.1",
				"GFDL-1.2",
				"GFDL-1.3",
				"GPL-1.0",
				"GPL-1.0+",
				"GPL-2.0",
				"GPL-2.0+",
				"GPL-2.0-with-autoconf-exception",
				"GPL-2.0-with-bison-exception",
				"GPL-2.0-with-classpath-exception",
				"GPL-2.0-with-font-exception",
				"GPL-2.0-with-GCC-exception",
				"GPL-3.0",
				"GPL-3.0+",
				"GPL-3.0-with-autoconf-exception",
				"GPL-3.0-with-GCC-exception",
				"LGPL-2.1",
				"LGPL-2.1+",
				"LGPL-3.0",
				"LGPL-3.0+",
				"LGPL-2.0",
				"LGPL-2.0+",
				"gSOAP-1.3b",
				"HPND",
				"IBM-pibs",
				"IPL-1.0",
				"Imlib2",
				"IJG",
				"Intel",
				"IPA",
				"ISC",
				"JSON",
				"LPPL-1.3a",
				"LPPL-1.0",
				"LPPL-1.1",
				"LPPL-1.2",
				"LPPL-1.3c",
				"Libpng",
				"LPL-1.02",
				"LPL-1.0",
				"MS-PL",
				"MS-RL",
				"MirOS",
				"MIT",
				"Motosoto",
				"MPL-1.0",
				"MPL-1.1",
				"MPL-2.0",
				"MPL-2.0-no-copyleft-exception",
				"Multics",
				"NASA-1.3",
				"Naumen",
				"NBPL-1.0",
				"NGPL",
				"NOSL",
				"NPL-1.0",
				"NPL-1.1",
				"Nokia",
				"NPOSL-3.0",
				"NTP",
				"OCLC-2.0",
				"ODbL-1.0",
				"PDDL-1.0",
				"OGTSL",
				"OLDAP-2.2.2",
				"OLDAP-1.1",
				"OLDAP-1.2",
				"OLDAP-1.3",
				"OLDAP-1.4",
				"OLDAP-2.0",
				"OLDAP-2.0.1",
				"OLDAP-2.1",
				"OLDAP-2.2",
				"OLDAP-2.2.1",
				"OLDAP-2.3",
				"OLDAP-2.4",
				"OLDAP-2.5",
				"OLDAP-2.6",
				"OLDAP-2.7",
				"OPL-1.0",
				"OSL-1.0",
				"OSL-2.0",
				"OSL-2.1",
				"OSL-3.0",
				"OLDAP-2.8",
				"OpenSSL",
				"PHP-3.0",
				"PHP-3.01",
				"PostgreSQL",
				"Python-2.0",
				"QPL-1.0",
				"RPSL-1.0",
				"RPL-1.1",
				"RPL-1.5",
				"RHeCos-1.1",
				"RSCPL",
				"Ruby",
				"SAX-PD",
				"SGI-B-1.0",
				"SGI-B-1.1",
				"SGI-B-2.0",
				"OFL-1.0",
				"OFL-1.1",
				"SimPL-2.0",
				"Sleepycat",
				"SMLNJ",
				"SugarCRM-1.1.3",
				"SISSL",
				"SISSL-1.2",
				"SPL-1.0",
				"Watcom-1.0",
				"NCSA",
				"VSL-1.0",
				"W3C",
				"WXwindows",
				"Xnet",
				"X11",
				"XFree86-1.1",
				"YPL-1.0",
				"YPL-1.1",
				"Zimbra-1.3",
				"Zlib",
				"ZPL-1.1",
				"ZPL-2.0",
				"ZPL-2.1",
				"Unlicense"
			]
		},
		"ResourceLoaderModules": {
			"type": "object",
			"description": "ResourceLoader modules to register",
			"additionalProperties": false,
			"patternProperties": {
				"^[a-zA-Z0-9\\.]+$": {
					"type": "object",
					"description": "A single ResourceLoader module descriptor",
					"properties": {
						"localBasePath": {
							"type": "string",
							"description": "Base path to prepend to all local paths in $options. Defaults to $IP"
						},
						"remoteBasePath": {
							"type": "string",
							"description": "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
						},
						"remoteExtPath": {
							"type": "string",
							"description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
						},
						"scripts": {
							"type": "array",
							"description": "Scripts to always include (array of file paths)",
							"items": {
								"type": "string"
							}
						},
						"languageScripts": {
							"type": "object",
							"description": "Scripts to include in specific language contexts (mapping of language code to file path(s))",
							"patternProperties": {
								"^[a-zA-Z0-9-]{2,}$": {
									"type": [
										"string",
										"array"
									],
									"items": {
										"type": "string"
									}
								}
							}
						},
						"skinScripts": {
							"type": "object",
							"description": "Scripts to include in specific skin contexts (mapping of skin name to script(s)",
							"patternProperties": {
								".+": {
									"type": [
										"string",
										"array"
									],
									"items": {
										"type": "string"
									}
								}
							}
						},
						"debugScripts": {
							"type": "array",
							"description": "Scripts to include in debug contexts",
							"items": {
								"type": "string"
							}
						},
						"loaderScripts": {
							"type": "array",
							"description": "Scripts to include in the startup module",
							"items": {
								"type": "string"
							}
						},
						"dependencies": {
							"type": "array",
							"description": "Modules which must be loaded before this module",
							"items": {
								"type": "string"
							}
						},
						"styles": {
							"type": "array",
							"description": "Styles to always load",
							"items": {
								"type": "string"
							}
						},
						"skinStyles": {
							"type": "object",
							"description": "Styles to include in specific skin contexts (mapping of skin name to style(s))",
							"patternProperties": {
								".+": {
									"type": [
										"string",
										"array"
									],
									"items": {
										"type": "string"
									}
								}
							}
						},
						"messages": {
							"type": "array",
							"description": "Messages to always load",
							"items": {
								"type": "string"
							}
						},
						"group": {
							"type": "string",
							"description": "Group which this module should be loaded together with"
						},
						"position": {
							"type": "string",
							"description": "Position on the page to load this module at",
							"enum": [
								"bottom",
								"top"
							]
						}
					}
				}
			}
		},
		"ResourceLoaderSources": {
			"type": "object",
			"description": "ResourceLoader sources to register"
		},
		"ResourceLoaderLESSVars": {
			"type": "object",
			"description": "ResourceLoader LESS variables"
		},
		"ResourceLoaderLESSFunctions": {
			"type": "object",
			"description": "ResourceLoader LESS functions"
		},
		"ResourceLoaderLESSImportPaths": {
			"type": "object",
			"description": "ResourceLoader import paths"
		},
		"namespaces": {
			"type": "object",
			"description": "Method to add extra namespaces",
			"properties": {
				"id": {
					"type": "integer"
				},
				"constant": {
					"type": "string"
				},
				"name": {
					"type": "string"
				},
				"gender": {
					"type": "object",
					"properties": {
						"male": {
							"type": "string"
						},
						"female": {
							"type": "string"
						}
					}
				},
				"subpages": {
					"type": "boolean",
					"default": false
				},
				"content": {
					"type": "boolean",
					"default": false
				},
				"defaultcontentmodel": {
					"type": "string"
				}
			}
		},
		"TrackingCategories": {
			"type": "array",
			"description": "Tracking category message keys"
		},
		"DefaultUserOptions": {
			"type": "object",
			"description": "Default values of user options"
		},
		"HiddenPrefs": {
			"type": "array",
			"description": "Preferences users cannot set"
		},
		"GroupPermissions": {
			"type": "object",
			"description": "Default permissions to give to user groups"
		},
		"RevokePermissions": {
			"type": "object",
			"description": "Default permissions to revoke from user groups"
		},
		"ImplicitGroups": {
			"type": "array",
			"description": "Implicit groups"
		},
		"GroupsAddToSelf": {
			"type": "object",
			"description": "Groups a user can add to themselves"
		},
		"GroupsRemoveFromSelf": {
			"type": "object",
			"description": "Groups a user can remove from themselves"
		},
		"AddGroups": {
			"type": "object",
			"description": "Groups a user can add to users"
		},
		"RemoveGroups": {
			"type": "object",
			"description": "Groups a user can remove from users"
		},
		"AvailableRights": {
			"type": "array",
			"description": "User rights added by the extension"
		},
		"ContentHandlers": {
			"type": "object",
			"description": "Mapping of model ID to class name"
		},
		"RateLimits": {
			"type": "object",
			"description": "Rate limits"
		},
		"ParserTestFiles": {
			"type": "array",
			"description": "Parser test files to run"
		},
		"RecentChangesFlags": {
			"type": "object",
			"description": "Flags (letter symbols) shown on RecentChanges pages"
		},
		"ExtensionFunctions": {
			"type": [
				"array",
				"string"
			],
			"description": "Function to call after setup has finished"
		},
		"ExtensionMessagesFiles": {
			"type": "object",
			"description": "File paths containing PHP internationalization data"
		},
		"MessagesDirs": {
			"type": "object",
			"description": "Directory paths containing JSON internationalization data"
		},
		"ExtensionEntryPointListFiles": {
			"type": "object"
		},
		"SpecialPages": {
			"type": "object",
			"description": "SpecialPages implemented in this extension (mapping of page name to class name)"
		},
		"SpecialPageGroups": {
			"type": "object",
			"description": "Mapping of special page name to group it belongs to"
		},
		"AutoloadClasses": {
			"type": "object"
		},
		"Hooks": {
			"type": "object",
			"description": "Hooks this extension uses (mapping of hook name to callback)"
		},
		"JobClasses": {
			"type": "object",
			"description": "Job types this extension implements (mapping of job type to class name)"
		},
		"LogTypes": {
			"type": "array",
			"description": "List of new log types this extension uses"
		},
		"LogRestrictions": {
			"type": "object"
		},
		"FilterLogTypes": {
			"type": "array"
		},
		"LogNames": {
			"type": "object"
		},
		"LogHeaders": {
			"type": "object"
		},
		"LogActions": {
			"type": "object"
		},
		"LogActionsHandlers": {
			"type": "object"
		},
		"Actions": {
			"type": "object"
		},
		"APIModules": {
			"type": "object"
		},
		"APIFormatModules": {
			"type": "object"
		},
		"APIMetaModules": {
			"type": "object"
		},
		"APIPropModules": {
			"type": "object"
		},
		"APIListModules": {
			"type": "object"
		},
		"callback": {
			"type": [
				"array",
				"string"
			],
			"description": "A function to be called right after MediaWiki processes this file"
		},
		"config": {
			"type": "object",
			"description": "Configuration options for this extension"
		}
	}
}