Skins and extensions share the same registration mechanism (
wfLoadSkin / wfLoadExtension) and both use a JSON manifest file, but a skin’s manifest is named skin.json rather than extension.json.Skins vs. extensions
Skins
Control HTML structure, CSS, and JavaScript for the entire page layout. A skin wraps page content and renders navigation, footers, and UI chrome.
Extensions
Add or modify wiki functionality—new special pages, parser functions, API endpoints, or hooks. Extensions do not control the overall page layout.
skins/ and extensions/) under the MediaWiki root, and both are loaded by queuing their JSON manifest via ExtensionRegistry.
Bundled skins
MediaWiki ships five skins out of the box. They are distributed separately from core and must be installed into theskins/ directory.
- Vector 2022
- Vector (legacy)
- MinervaNeue
- Timeless
- MonoBook
The default skin since MediaWiki 1.37 (2022). A modernised version of Vector with improved accessibility and mobile support. First introduced in the 1.36 release (2021).
Loading skins with wfLoadSkin()
Installing a skin requires placing its files in a subdirectory underskins/ and calling wfLoadSkin() in LocalSettings.php.
LocalSettings.php
wfLoadSkin() resolves the skin’s skin.json path and queues it through ExtensionRegistry:
includes/GlobalFunctions.php
wfLoadSkins():
LocalSettings.php
wfLoadSkin() line. User skin preferences are preserved and will be restored if the skin is re-enabled.
The SkinTemplate base class
Most skins extendSkinTemplate, which itself extends the abstract Skin base class (in MediaWiki\Skin\Skin). The class hierarchy is:
Skin defines the core interface—outputPage(), initPage(), getTemplateData(), buildSidebar(), buildNavUrls(), and more. SkinTemplate adds QuickTemplate rendering and portlet data assembly.
includes/Skin/SkinTemplate.php
Custom CSS and JavaScript per skin
MediaWiki lets administrators and users customise styles and scripts without editing server files. These pages are edited like any wiki page and are delivered via ResourceLoader.Site-wide customisation
| Wiki page | Scope |
|---|---|
MediaWiki:Common.css | CSS applied across all skins |
MediaWiki:Common.js | JavaScript applied across all skins |
MediaWiki:Vector.css | CSS applied only when Vector is active |
MediaWiki:Vector.js | JavaScript applied only when Vector is active |
MediaWiki:Minerva.css | CSS applied only when MinervaNeue is active |
MediaWiki:<skinname>.css applies to any skin; the skinname used is the lowercase internal name registered in skin.json.
Per-user customisation
Individual users can override styles for themselves by editing subpages of their user page:Skin preferences and user skin selection
Registered users can choose their preferred skin in Special:Preferences under the Appearance tab. The choice is stored as a user option. TheSkin::normalizeKey() method resolves a skin preference value to a loadable skin name, falling back through the configured default ($wgDefaultSkin) and then the hardcoded fallback skin if the preference is unavailable:
includes/Skin/Skin.php
$wgSkipSkins without uninstalling them:
LocalSettings.php
Finding additional skins
A full list of available skins is maintained at MediaWiki.org. Most community skins are available via Gerrit and can be cloned directly into theskins/ directory.
