CINXE.COM
Wikimedia Engineering Architecture Principles - MediaWiki
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Wikimedia Engineering Architecture Principles - MediaWiki</title> <script>(function(){var className="client-js vector-feature-language-in-header-disabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )mediawikiwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"f96f92b5-8ea0-4ea1-8ab7-56274abad40d","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Wikimedia_Engineering_Architecture_Principles","wgTitle":"Wikimedia Engineering Architecture Principles","wgCurRevisionId":5103613,"wgRevisionId":5103613,"wgArticleId":784930,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Wikimedia development policies"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Wikimedia_Engineering_Architecture_Principles","wgRelevantArticleId":784930,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"mediawiki","wgCiteReferencePreviewsActive":true, "wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgInternalRedirectTargetUrl":"/wiki/Wikimedia_Engineering_Architecture_Principles","wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgDiscussionToolsFeaturesEnabled":{"replytool":true,"newtopictool":true,"sourcemodetoolbar":true,"topicsubscription":false,"autotopicsub":false,"visualenhancements":false,"visualenhancements_reply":false,"visualenhancements_pageframe":false},"wgDiscussionToolsFallbackEditMode":"visual","wgULSPosition":"personal","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList", "mobile","model","platform","platformVersion"]};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.discussionTools.init.styles":"ready","oojs-ui-core.styles":"ready","oojs-ui.styles.indicators":"ready","mediawiki.widgets.styles":"ready","oojs-ui-core.icons":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.pt":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["mediawiki.action.view.redirect","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth", "ext.discussionTools.init","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.checkUser.clientHints"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.discussionTools.init.styles%7Cext.uls.pt%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cmediawiki.widgets.styles%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui.styles.indicators%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:site_name" content="MediaWiki"> <meta property="og:title" content="Wikimedia Engineering Architecture Principles - MediaWiki"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//m.mediawiki.org/wiki/Wikimedia_Engineering_Architecture_Principles"> <link rel="alternate" type="application/x-wiki" title="Edit" href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/mediawiki.png"> <link rel="icon" href="/static/favicon/mediawiki.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="MediaWiki (en)"> <link rel="EditURI" type="application/rsd+xml" href="//www.mediawiki.org/w/api.php?action=rsd"> <link rel="canonical" href="https://www.mediawiki.org/wiki/Wikimedia_Engineering_Architecture_Principles"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"> <link rel="alternate" type="application/atom+xml" title="MediaWiki Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="ext-discussiontools-replytool-enabled ext-discussiontools-newtopictool-enabled ext-discussiontools-sourcemodetoolbar-enabled skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Wikimedia_Engineering_Architecture_Principles rootpage-Wikimedia_Engineering_Architecture_Principles skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/MediaWiki" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-mw-download" class="mw-list-item"><a href="/wiki/Download"><span>Get MediaWiki</span></a></li><li id="n-mw-extensions" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Category:Extensions"><span>Get extensions</span></a></li><li id="n-blog-text" class="mw-list-item"><a href="https://techblog.wikimedia.org/"><span>Tech blog</span></a></li><li id="n-mw-contribute" class="mw-list-item"><a href="/wiki/Special:MyLanguage/How_to_contribute"><span>Contribute</span></a></li> </ul> </div> </div> <div id="p-support" class="vector-menu mw-portlet mw-portlet-support" > <div class="vector-menu-heading"> Support </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Help:Contents" title="The place to find out"><span>User help</span></a></li><li id="n-mw-faq" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:FAQ"><span>FAQ</span></a></li><li id="n-mw-manual" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Manual:Contents"><span>Technical manual</span></a></li><li id="n-mw-supportdesk" class="mw-list-item"><a href="/wiki/Project:Support_desk"><span>Support desk</span></a></li><li id="n-mw-communication" class="mw-list-item"><a href="/wiki/Special:MyLanguage/Communication"><span>Communication</span></a></li> </ul> </div> </div> <div id="p-development" class="vector-menu mw-portlet mw-portlet-development" > <div class="vector-menu-heading"> Development </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mw-developerportal" class="mw-list-item"><a href="https://developer.wikimedia.org/"><span>Developer portal</span></a></li><li id="n-svn-statistics" class="mw-list-item"><a href="/wiki/Development_statistics"><span>Code statistics</span></a></li> </ul> </div> </div> <div id="p-mediawiki.org" class="vector-menu mw-portlet mw-portlet-mediawiki_org" > <div class="vector-menu-heading"> mediawiki.org </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-portal" class="mw-list-item"><a href="/wiki/Project:Help" title="About the project, what you can do, where to find things"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-mw-translate" class="mw-list-item"><a href="/wiki/Special:LanguageStats"><span>Translate content</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x"><span>Random page</span></a></li><li id="n-mw-discussion" class="mw-list-item"><a href="/wiki/Project:Village_Pump"><span>Village pump</span></a></li><li id="n-Sandboxlink-portlet-label" class="mw-list-item"><a href="/wiki/Project:Sandbox"><span>Sandbox</span></a></li> </ul> </div> </div> <div id="p-lang" class="vector-menu mw-portlet mw-portlet-lang" > <div class="vector-menu-heading"> In other languages </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-add wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:NewItem?site=mediawikiwiki&page=Wikimedia+Engineering+Architecture+Principles" title="Add interlanguage links" class="wbc-editpage">Add links</a></span></div> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/MediaWiki" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/mediawikiwiki.svg" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="MediaWiki" src="/static/images/mobile/copyright/mediawikiwiki-wordmark.svg" style="width: 7.5em; height: 1.125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search MediaWiki [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search MediaWiki" aria-label="Search MediaWiki" autocapitalize="sentences" title="Search MediaWiki [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-uls" class="mw-list-item active user-links-collapsible-item"><a data-mw="interface" href="#" class="uls-trigger cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>English</span></a> </li> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Wikimedia+Engineering+Architecture+Principles" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Wikimedia+Engineering+Architecture+Principles" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="More options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?utm_source=donate&utm_medium=sidebar&utm_campaign=spontaneous&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Wikimedia+Engineering+Architecture+Principles" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Wikimedia+Engineering+Architecture+Principles" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Wikimedia Engineering Architecture Principles</span></h1> <div class="mw-indicators"> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Wikimedia_Engineering_Architecture_Principles" title="View the content page [c]" accesskey="c"><span>Page</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Wikimedia_Engineering_Architecture_Principles" rel="discussion" title="Discussion about the content page [t]" accesskey="t"><span>Discussion</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Wikimedia_Engineering_Architecture_Principles"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Wikimedia_Engineering_Architecture_Principles"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit" title="Edit the source code of this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Wikimedia_Engineering_Architecture_Principles" title="A list of all wiki pages that link here [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Wikimedia_Engineering_Architecture_Principles" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//commons.wikimedia.org/wiki/Special:UploadWizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&oldid=5103613" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Wikimedia_Engineering_Architecture_Principles&id=5103613&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FWikimedia_Engineering_Architecture_Principles"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fwww.mediawiki.org%2Fwiki%2FWikimedia_Engineering_Architecture_Principles"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-create_a_book" class="mw-list-item"><a href="/w/index.php?title=Special:Book&bookcmd=book_creator&referer=Wikimedia+Engineering+Architecture+Principles"><span>Create a book</span></a></li><li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Wikimedia_Engineering_Architecture_Principles&action=show-download-screen"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects emptyPortlet" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div id="siteSub" class="noprint">From mediawiki.org</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r6824882">.mw-parser-output table.ambox{margin:0 10%;width:unset;border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output table.ambox+table.ambox,.mw-parser-output table.ambox+link+table.ambox,.mw-parser-output table.ambox+style+table.ambox{margin-top:-1px}.mw-parser-output .ambox td.mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox th.mbox-text,.mw-parser-output .ambox td.mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox td.mbox-image{padding:2px 0 2px 0.5em}.mw-parser-output .ambox td.mbox-imageright{padding:2px 0.5em 2px 0}.mw-parser-output table.ambox-notice{border-left-color:#36c}.mw-parser-output table.ambox-speedy{background-color:var(--background-color-error-subtle,#fee7e6)}.mw-parser-output table.ambox-delete,.mw-parser-output table.ambox-speedy{border-left-color:var(--background-color-error--active,#b32424)}.mw-parser-output table.ambox-content{border-left-color:#f28500}.mw-parser-output table.ambox-style{border-left-color:#fc3}.mw-parser-output table.ambox-move{border-left-color:#9932cc}.mw-parser-output table.ambox-protection{border-left-color:#a2a9b1}html body.mediawiki .mw-parser-output .ambox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;box-sizing:border-box;width:238px;font-size:88%;line-height:1.25em}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;box-sizing:border-box;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}</style><table class="ambox ambox-notice plainlinks metadata" role="presentation"><tbody><tr><td class="mbox-image"><div style="width:52px"><span typeof="mw:File"><a href="/wiki/File:OOjs_UI_icon_check-constructive.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f6/OOjs_UI_icon_check-constructive.svg/30px-OOjs_UI_icon_check-constructive.svg.png" decoding="async" width="30" height="30" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/f6/OOjs_UI_icon_check-constructive.svg/45px-OOjs_UI_icon_check-constructive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f6/OOjs_UI_icon_check-constructive.svg/60px-OOjs_UI_icon_check-constructive.svg.png 2x" data-file-width="20" data-file-height="20"/></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This page documents an official <a href="/wiki/Special:MyLanguage/Development_policy" title="Special:MyLanguage/Development policy">Wikimedia development policy</a>. There is no current mechanism to make changes, as the <a href="/wiki/Special:MyLanguage/Requests_for_comment" title="Special:MyLanguage/Requests for comment">TechCom RFC process</a> is defunct.</div></td></tr></tbody></table> <style data-mw-deduplicate="TemplateStyles:r6605224">.mw-parser-output .tpl-sidebar{background-color:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-divider,#a2a9b1);color:var(--color-base,#202122);width:22em;padding:.2em;text-align:center;line-height:1.4em;font-size:88%}.mw-parser-output .tpl-sidebar-pagedir-ltr,.mw-parser-output .tpl-sidebar.tpl-sidebar-floatright{float:right;clear:right;margin:.5em 0 1em 1em}.mw-parser-output .tpl-sidebar-pagedir-rtl,.mw-parser-output .tpl-sidebar.tpl-sidebar-floatleft{float:left;clear:left;margin:.5em 1em 1em 0}.mw-parser-output .tpl-sidebar.tpl-sidebar-floatnone{float:none;clear:both;margin:.5em 0 1em 1em}.mw-parser-output .tpl-sidebar>caption{padding-bottom:.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .tpl-sidebar>tbody>tr>th,.mw-parser-output .tpl-sidebar>tbody>tr>td{padding:0}.mw-parser-output .tpl-sidebar .tpl-sidebar-topimage>td{padding:.4em 0}.mw-parser-output .tpl-sidebar-imagecaption{padding-top:.2em;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-pretitle>td{padding-top:.4em;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-topimage+.tpl-sidebar-pretitle>td{padding-top:.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-title>th{padding:.2em .4em .2em;font-size:145%;line-height:1.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-pretitle+.tpl-sidebar-title>th{padding-top:0}.mw-parser-output .tpl-sidebar .tpl-sidebar-image>td{padding:.2em 0 .4em}.mw-parser-output .tpl-sidebar .tpl-sidebar-abovebelow>td{padding:.3em .4em;font-weight:bold}.mw-parser-output .tpl-sidebar .tpl-sidebar-heading>th{padding-top:.2em}.mw-parser-output .tpl-sidebar .tpl-sidebar-image~.tpl-sidebar-heading-first>th{padding-top:.4em}.mw-parser-output .tpl-sidebar .tpl-sidebar-content>td{padding-bottom:.2em}.mw-parser-output .tpl-sidebar :not(.tpl-sidebar-heading)+.tpl-sidebar-content-first>td{padding-top:.2em}.mw-parser-output .tpl-sidebar-navbar>td{font-size:115%}.mw-parser-output .tpl-sidebar-pagedir-ltr .tpl-sidebar-navbar>td{text-align:right}.mw-parser-output .tpl-sidebar-pagedir-rtl .tpl-sidebar-navbar>td{text-align:left}</style><table class="vertical-navbox tpl-sidebar tpl-sidebar-pagedir-ltr nowraplinks" role="navigation" style="width:22em; border-spacing: 0.4em 0;"><tbody><tr class="tpl-sidebar-title"> <th class="" style="">Development policies</th> </tr><tr class="tpl-sidebar-content tpl-sidebar-content-first"> <td class="" style=";"> <style data-mw-deduplicate="TemplateStyles:r6219282">.mw-parser-output .plainlist ul{line-height:inherit;list-style:none none;margin:0}.mw-parser-output .plainlist ul li{margin-bottom:0}</style><div class="plainlist"> <ul><li><a href="/wiki/Special:MyLanguage/Development_policy" title="Special:MyLanguage/Development policy">Development policy</a><span style="display:none"><a href="/wiki/Development_policy" title="Development policy"> </a></span></li> <li><b><a href="/wiki/Special:MyLanguage/Wikimedia_Engineering_Architecture_Principles" title="Special:MyLanguage/Wikimedia Engineering Architecture Principles">Architecture principles</a></b><span style="display:none"><a class="mw-selflink selflink"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Wikimedia_services_policy" title="Special:MyLanguage/Wikimedia services policy">Services policy</a><span style="display:none"><a href="/wiki/Wikimedia_services_policy" title="Wikimedia services policy"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Support_policy_for_PHP" title="Special:MyLanguage/Support policy for PHP">Support policy for PHP</a><span style="display:none"><a href="/wiki/Support_policy_for_PHP" title="Support policy for PHP"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Gerrit/Privilege_policy" title="Special:MyLanguage/Gerrit/Privilege policy">Gerrit privilege policy</a><span style="display:none"><a href="/wiki/Gerrit/Privilege_policy" title="Gerrit/Privilege policy"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/Stable_interface_policy" title="Special:MyLanguage/Stable interface policy">Stable interface policy</a><span style="display:none"><a href="/wiki/Stable_interface_policy" title="Stable interface policy"> </a></span></li> <li><a href="/wiki/Special:MyLanguage/MediaWiki_database_policy" title="Special:MyLanguage/MediaWiki database policy">MediaWiki database policy</a><span style="display:none"><a href="/wiki/MediaWiki_database_policy" title="MediaWiki database policy"> </a></span></li></ul> </div></td> </tr><tr class="tpl-sidebar-heading"> <th class="" style=";">See also</th> </tr><tr class="tpl-sidebar-content"> <td class="" style=";"> <a href="/wiki/Special:MyLanguage/Development_guidelines" title="Special:MyLanguage/Development guidelines">Development guidelines</a><span style="display:none"><a href="/wiki/Development_guidelines" title="Development guidelines"> </a></span></td> </tr><tr class="tpl-sidebar-navbar"> <td style=""><style data-mw-deduplicate="TemplateStyles:r4692751">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar ul{display:inline;white-space:nowrap}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em;width:6em}</style><span class="noprint plainlinks navbar" style=""><small><span style="white-space:nowrap;word-spacing:-.12em;"><a href="/wiki/Template:Development_policy" title="Template:Development policy"><span style="" title="View this template">v</span></a><span style=""> <b>·</b> </span><a class="external text" href="https://www.mediawiki.org/wiki/Template_talk:Development_policy"><span style="" title="Discuss this template">d</span></a><span style=""> <b>·</b> </span><a class="external text" href="https://www.mediawiki.org/w/index.php?title=Template:Development_policy&action=edit"><span style="" title="Edit this template">e</span></a></span></small></span></td> </tr> </tbody></table> <p><br/> The following <b>architecture principles and requirements</b> guide all Wikimedia engineering endeavors. They extend the Wikimedia Foundation <a href="https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Guiding_Principles" class="extiw" title="metawiki:Wikimedia Foundation Guiding Principles">Guiding Principles</a>, and are inspired by <a href="https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Medium-term_plan_2019" class="extiw" title="metawiki:Wikimedia Foundation Medium-term plan 2019">Wikimedia 2030 movement strategic direction</a> and established best practices of the software industry. They are informed by past experience as well as present needs and constraints, and are expected to evolve when these needs and constraints change. </p><p>The architecture principles are defined by the <a href="/wiki/Technical_Decision_Forum" class="mw-redirect" title="Technical Decision Forum">Technical Decision Forum</a>. Any substantial change to the normative part of this document (labeled "Principles") must be discussed and approved using the TechCom's <a href="/wiki/Requests_for_comment/Process" class="mw-redirect" title="Requests for comment/Process">RFC process</a>. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Application" data-mw-thread-id="h-Application"><span data-mw-comment-start="" id="h-Application"></span>Application<span data-mw-comment-end="h-Application"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=1" title="Edit section: Application"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Application","replies":[]}}--></div> <p>The below principles are intended to guide engineering decisions on all levels, from detailed core review to high-level RFCs. People with merge rights on software in production on WMF servers, as well as people responsible for technical decision making and planning for such systems, are expected to know and apply these principles. Any new component we design should be checked against these principles. It is however acknowledged that not all existing code is compliant with all the principles. Teams working on such code should make an effort to improve compliance as far as reasonably possible. Prototype projects do not have to comply with all principles immediately, but have to be made compliant before they are made available to the public, including as "beta" or "pilot" functionality. </p><p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a rel="nofollow" class="external text" href="https://tools.ietf.org/html/rfc2119">RFC 2119</a>. Any proposed change to the code or design that violates a MUST principle is to be rejected. Any violation of a SHOULD principle requires documentation of the rationale for violating the principle. When existing code is discovered to violate a MUST or SHOULD principle, steps for making the code compliant with the architecture principles need to be planned. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Principles" data-mw-thread-id="h-Principles"><span data-mw-comment-start="" id="h-Principles"></span>Principles<span data-mw-comment-end="h-Principles"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=2" title="Edit section: Principles"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Principles","replies":[]}}--></div> <p><span class="anchor" id="equity"></span> <b>To allow users to consume, create, and interact in a form suitable for their devices, with the connectivity they have, in a language they speak,</b> </p> <ul><li><span class="anchor" id="equity/device"></span> EQUITY/DEVICE: software that interacts with users MUST be designed to make key functionality available on devices with a variety of capability and restrictions, with tradeoffs explicitly considered for mobile form factors and connectivity.</li> <li><span class="anchor" id="equity/language"></span> EQUITY/LANGUAGE: software that interacts with users MUST support internationalization. Internationalization mechanisms SHOULD be consistent across platforms.</li> <li><span class="anchor" id="equity/access"></span> EQUITY/ACCESS: software that interacts with users MUST consider accessibility concerns and SHOULD follow accessibility guidelines.</li></ul> <p>Motivation: These principles aim at the <i>equity</i> goal set by the <i>Movement Strategy Outcomes</i> and reflected in the Wikimedia Foundation's <i>Goals and Priorities</i>: <i>"Grow participation globally, focusing on emerging markets</i>". They address issues discussed throughout the <i>Point of View</i> essays, especially the ones on <i>Inclusion</i>, <i>Content, Ubiquity</i>, and <i>Form Factor</i>, as well as the one on <i>Tools for Moderators</i>. </p><p><span class="anchor" id="empower"></span> <b>To empower contributors to collaboratively grow and curate content, and to build the tools that they need to do so,</b> </p> <ul><li><span class="anchor" id="empower/tweak"></span> EMPOWER/TWEAK: our software SHOULD provide APIs, libraries, and services that empower the community with ways to develop workflows using programming languages, and ensure safety and maintainability of custom programs.</li> <li><span class="anchor" id="empower/combine"></span> EMPOWER/COMBINE: software that manages or interacts with user-editable content SHOULD support close integration of different media and data types from local and remote sources.</li></ul> <p>Motivation: These principles aim at the <i>equity</i> goal set by the <i>Movement Strategy Outcomes</i> and reflected in the Wikimedia Foundation's <i>Goals and Priorities</i>: <i>"Modernize our product experience</i>", particularly by <i>"integrating content from Commons, Wikidata, Wikisource and other projects into Wikipedia"</i>. They address issues discussed in the <i>Reliability, Resilience</i>, <i>Inclusion,</i> and <i>Contributors</i> essays. The need to empower the community to contribute code and build their own tools is stressed especially in the <i>Tools for Developers</i> chapter, while the <i>Content Curation</i> chapter calls for communities to contribute to training AI systems. </p><p><span class="anchor" id="api"></span> <b>To provide public APIs that allow efficient interaction with wiki content, as well as provide data that can be easily processed and reused in bulk,</b> </p> <ul><li><span class="anchor" id="api/domain"></span> API/DOMAIN: for all interactions defined on the abstract domain model, stable public APIs MUST exist. APIs geared towards a specific user interface MUST be considered part of the component that implements that user interface, and MAY be considered private to that component.</li> <li><span class="anchor" id="api/structured"></span> API/STRUCTURED: our software MUST be designed in a way that makes all content and public meta-data available as structured data or media with semantic markup (e.g. as JSON or as annotated HTML).</li> <li><span class="anchor" id="api/schema"></span> API/SCHEMA: data we offer for re-use MUST use clearly specified data schemas and SHOULD be based on widely used open standards.</li> <li><span class="anchor" id="api/granular"></span> API/GRANULAR: public APIs SHOULD allow access to content with high granularity.</li> <li><span class="anchor" id="api/format"></span> API/FORMAT: APIs MUST be designed to enable clients to process content without the need to parse or manipulate wikitext.</li> <li><span class="anchor" id="api/source"></span> API/SOURCE: data formats and APIs that provide access to user-generated content SHOULD be designed to ensure verifiability through the integration of provenance information.</li> <li><span class="anchor" id="api/license"></span> API/LICENSE: data formats and APIs that provide access to user-generated content MUST be designed to provide easy access to all relevant information about authorship and licensing.</li></ul> <p>Motivation: These principles aim at the <i>Knowledge as a Service</i> goal set by the <i>Movement Strategy Outcomes</i> and the Wikimedia Foundation's <i>Goals and Priorities</i>: <i>"enable people, institutions, sites and machines to create, share, and access the sum of all knowledge, on and off the Wikimedia sites"</i>. They address issues around the creation of specialized user experiences mentioned throughout the <i>Point of View</i> essays, especially in the <i>Form Factor</i> chapter of the <i>Experience</i> topic. They also touch upon issues related to verifiability and licensing, as discussed in the <i>Reliability</i> essay, and the need for distributing our content though APIs and as dumps, as discussed in the <i>Resilience</i> essay. </p><p><span class="anchor" id="open"></span> <b>To provide an open-source software stack that can be easily used, modified, and extended by others,</b> </p> <ul><li><span class="anchor" id="open/floss"></span> OPEN/FLOSS: software we write MUST be published under a free license for the ability of third parties to audit our code and to create forks of the codebase.</li> <li><span class="anchor" id="open/reuse"></span> OPEN/REUSE: software components that implement broadly applicable functionality SHOULD be designed for reusability and be published for re-use.</li> <li><span class="anchor" id="open/release"></span> OPEN/RELEASE: software that exposes public interfaces (as libraries, frameworks, hooks, or APIs do) SHOULD be subject to release management with clear and consistent versioning. Any breaking changes to such interfaces then MUST be announced in a timely and predictable manner over relevant channels.</li> <li><span class="anchor" id="open/stable"></span> OPEN/STABLE: any elements scheduled for removal from a stable public interface MUST be documented to be deprecated beforehand, and SHOULD be kept for backward compatibility for a reasonable time.</li> <li><span class="anchor" id="open/modular"></span> OPEN/MODULAR: our software architecture SHOULD be modular, with components exposing narrow interfaces, to allow components to be replaced and refactored while maintaining a stable interface towards other components as well as third-party extensions.</li> <li><span class="anchor" id="open/giants"></span> OPEN/GIANTS: our software SHOULD be built on top of reliable, documented, well-maintained open-source components.</li></ul> <p>Motivation: These principles aim at the <i>equity</i> goal set by the <i>Movement Strategy Outcomes</i> and the <i>Product Directions</i> in a broad sense, enabling third-party developers to re-use our software components for their own purpose. The need for a modular architecture is also evident in the call for specialized user experiences throughout the <i>Point of View</i> essays, such as the one on <i>Rich Content</i>. </p><p><span class="anchor" id="solid"></span> <b>To maintain a code base that can be modified with confidence and readily understood,</b> </p> <ul><li><span class="anchor" id="solid/model"></span> SOLID/MODEL: our software architecture SHOULD follow explicitly specified <a href="https://en.wikipedia.org/wiki/Domain_model" class="extiw" title="en:Domain model">domain models</a> that define relevant entities and actions (nouns and verbs), to facilitate clear communication between software components as well as among people.</li> <li><span class="anchor" id="solid/test"></span> SOLID/TEST: all code SHOULD be designed for testability.</li> <li><span class="anchor" id="solid/cover"></span> SOLID/COVER: the software we develop MUST provide a test suite, which SHOULD be sufficiently detailed, comprehensive, and noticeable to provide confidence for developers to see that their changes did not break anything.</li> <li><span class="anchor" id="solid/docs"></span> SOLID/DOCS: comprehensive documentation MUST be maintained along with the code.</li></ul> <p>Motivation: These principles aim at the goal of being <i>Extensible and Sustainable</i> and the need for <i>fast and confident deployment</i> defined in the <i>Product Directions</i> and reflected in the Wikimedia Foundation's <i>Goals and Priorities</i>, which calls for a <i>"fully automated and continuous code health and deployment infrastructure"</i>, requires tooling to be <i>"easy to use, well-documented, and accessible"</i><b>,</b> and states that <i>"intentional focus on code quality and testing will allow for more innovative and faster experimentation"</i>. More generally, these principles reflect best practices of software engineering processes. </p><p><span class="anchor" id="run"></span> <b>To provide a web application that can be freely used to collaboratively collect and share knowledge,</b> </p> <ul><li><span class="anchor" id="run/everywhere"></span> RUN/EVERYWHERE: the basic MediaWiki stack MUST be easy to deploy on standard hosting platforms.</li> <li><span class="anchor" id="run/cheap"></span> RUN/CHEAP: small MediaWiki instances MUST function in low-budget hosting environments.</li> <li><span class="anchor" id="run/more"></span> RUN/MORE: for every component and feature, the intended target audience and supported target platform MUST be clearly defined.</li> <li><span class="anchor" id="run/easy"></span> RUN/EASY: it SHOULD be possible to install and upgrade MediaWiki without much technical knowledge.</li> <li><span class="anchor" id="run/update"></span> RUN/UPDATE: it MUST be possible to upgrade MediaWiki without the risk of losing content or disrupting operation.</li></ul> <p>Motivation: These principles aim at the <i>equity</i> goal set by the <i>Movement Strategy Outcomes</i> and the <i>Product Directions</i>, working to provide others with the tools to collect, curate, and share knowledge. More generally, they aim at the values of the <i>Free Software Movement</i>, to allow others to run, study, modify, and share our software. </p><p><span class="anchor" id="fast"></span> <b>To ensure availability and performance of WMF projects through scalable and resilient system design,</b> </p> <ul><li><span class="anchor" id="fast/scale"></span> FAST/SCALE: horizontal scalability SHOULD be a design goal on all levels of the architecture, especially for storage and query mechanisms.</li> <li><span class="anchor" id="fast/measure"></span> FAST/MEASURE: observability and analytic instrumentation SHOULD be explicitly considered in the design of new components and services.</li> <li><span class="anchor" id="fast/load"></span> FAST/LOAD: our software and infrastructure SHOULD be designed to be resilient against spikes in demand and failure of backend systems.</li> <li><span class="anchor" id="fast/route"></span> FAST/ROUTE: services and APIs SHOULD be designed to allow the identification of read-only and read-write HTTP requests to optimize routing and caching.</li> <li><span class="anchor" id="fast/geo"></span> FAST/GEO: storage and caching systems SHOULD be designed with a distributed multi-datacenter architecture in mind.</li> <li><span class="anchor" id="fast/change"></span> FAST/CHANGE: system design and technology choice SHOULD aim to reduce operational overhead and the cost of change management.</li></ul> <p>Motivation: These principles aim to provide <i>"infrastructure to serve [content] with high performance, high redundancy, and low latency to all parts of the world"</i> as requested by the Wikimedia Foundation's <i>Goals and Priorities,</i> by addressing issues discussed in detail in the essays under the <i>Scale</i> topic. </p><p><span class="anchor" id="secure"></span> <b>To ensure the data integrity of the content on WMF systems, and protect the privacy of our users,</b> </p> <ul><li><span class="anchor" id="secure/austere"></span> SECURE/AUSTERE: our software systems MUST be designed to only collect data needed for a specific purpose, and retain it only as long as necessary.</li> <li><span class="anchor" id="secure/private"></span> SECURE/PRIVATE: our software and infrastructure MUST be designed in such a way to prevent unauthorized access to sensitive information.</li> <li><span class="anchor" id="secure/isolated"></span> SECURE/ISOLATED: our system architecture SHOULD isolate components to reduce attack surface, and to minimize the impact of individual components being compromised.</li> <li><span class="anchor" id="secure/integrity"></span> SECURE/INTEGRITY: resilience against data corruption MUST be a design goal for our system architecture, and be built into the software we write.</li> <li><span class="anchor" id="secure/act"></span> SECURE/ACT: tools and processes SHOULD be designed to allow us to be responsive as well as proactive in ensuring security.</li> <li><span class="anchor" id="secure/patch"></span> SECURE/PATCH: our deployment infrastructure and dependency management SHOULD make it easy to keep system components up to date.</li> <li><span class="anchor" id="secure/config"></span> SECURE/CONFIG: our deployment infrastructure SHOULD make it easy to change configuration settings without disruption.</li></ul> <p>Motivation: These principles aim to guarantee good <i>platform uptime</i> as required by the <i>Product Directions,</i> by addressing issues discussed in the essay about <i>Scale</i>. They aim to provide software <i>"that ships with testing, analytics, monitoring, security and privacy built in"</i> as specified in the Wikimedia Foundations <i>Goals and Priorities</i>, and reflect the best practice of system administration. </p> <div class="mw-heading mw-heading2 ext-discussiontools-init-section"><h2 id="Additional_Notes_and_Considerations_(not_normative)" data-mw-thread-id="h-Additional_Notes_and_Considerations_(not_normative)"><span id="Additional_Notes_and_Considerations_.28not_normative.29"></span><span data-mw-comment-start="" id="h-Additional_Notes_and_Considerations_(not_normative)"></span>Additional Notes and Considerations (not normative)<span data-mw-comment-end="h-Additional_Notes_and_Considerations_(not_normative)"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=3" title="Edit section: Additional Notes and Considerations (not normative)"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span><!--__DTELLIPSISBUTTON__{"threadItem":{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Additional_Notes_and_Considerations_(not_normative)","replies":["h-Product_Guidance_and_Requirements-Additional_Notes_and_Considerations_(not_normative)","h-Processes_and_Practices-Additional_Notes_and_Considerations_(not_normative)","h-Product_Strategy_Documents-Additional_Notes_and_Considerations_(not_normative)"]}}--></div> <p>This section contains some notes and considerations that do not fit the scope of <i>architecture principles</i>, and are beyond the authority of this document. These include engineering practices, processes, and community engagement which seem relevant in this context. They are included here for consideration, but are not prescriptive. </p> <div class="mw-heading mw-heading3"><h3 id="Product_Guidance_and_Requirements" data-mw-thread-id="h-Product_Guidance_and_Requirements-Additional_Notes_and_Considerations_(not_normative)"><span data-mw-comment-start="" id="h-Product_Guidance_and_Requirements-Additional_Notes_and_Considerations_(not_normative)"></span>Product Guidance and Requirements<span data-mw-comment-end="h-Product_Guidance_and_Requirements-Additional_Notes_and_Considerations_(not_normative)"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=4" title="Edit section: Product Guidance and Requirements"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>MediaWiki SHOULD provide equitable access to knowledge, for contribution and consumption</li> <li>MediaWiki SHOULD be built in a way that allows different user interfaces to be built for different tasks and audiences.</li> <li>MediaWiki SHOULD be easy to install and upgrade in a development environment.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Processes_and_Practices" data-mw-thread-id="h-Processes_and_Practices-Additional_Notes_and_Considerations_(not_normative)"><span data-mw-comment-start="" id="h-Processes_and_Practices-Additional_Notes_and_Considerations_(not_normative)"></span>Processes and Practices<span data-mw-comment-end="h-Processes_and_Practices-Additional_Notes_and_Considerations_(not_normative)"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=5" title="Edit section: Processes and Practices"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>See also <a href="/wiki/Technical_Collaboration_Guidance/Principles" title="Technical Collaboration Guidance/Principles">Technical Collaboration Guidance/Principles</a></li> <li>See also the <a href="/wiki/Architecture_guidelines" title="Architecture guidelines">Architecture guidelines</a> and <a href="/wiki/Manual:Coding_conventions/PHP" title="Manual:Coding conventions/PHP">Manual:Coding conventions/PHP</a> for best practices when making changes to MediaWiki</li> <li>Development processes SHOULD ensure good coverage with unit tests that enforce compliance with the documented interface contracts.</li> <li>Unit tests <i>are not</i> a replacement for integration tests. We SHOULD have unit tests as well as integration tests and compliance tests.</li> <li>The creation of user interface tests SHOULD be well integrated into the development process.</li> <li>Documentation on all levels SHOULD explain the rationale behind specific design decisions.</li> <li>Technical debt SHOULD only be incurred consciously. New technical debt should be documented and tracked explicitly, with a clear plan and timeline for reduction or elimination</li> <li>We SHOULD contribute upstream any improvements we make to tools and libraries we use, and be part of the ecosystem of the tools and libraries we use.</li> <li>Our software architecture and development processes SHOULD be geared towards building an ecosystem of third-party re-users and all kinds of contributors to the code base (programmers, designers, documenters, translators), volunteers and professionals alike.</li> <li>Document the rationale of engineering decisions, make explicit the trade-off considerations.</li> <li>Features and non-functional requirements are constantly traded off against engineering constraints and the estimated cost of overcoming such constraints. This requires constant iteration of the decision-making process between product owners and engineers, and should involve the respective communities when appropriate.</li> <li>Failures on all levels SHOULD be followed by a post-mortem analysis and documentation.</li> <li>Engineering solution SHOULD be "eventually consistent": we should allow for experiments and make breaking changes where needed, but we should aim for architectural coherence and avoid diverging technologies.</li> <li>We SHOULD aim to be inclusive towards technical contributions from people who do not speak English.</li> <li>Communication in technical spaces SHOULD be welcoming and constructive, and MUST follow the <a href="/wiki/Code_of_Conduct" title="Code of Conduct">Code of Conduct</a>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Product_Strategy_Documents" data-mw-thread-id="h-Product_Strategy_Documents-Additional_Notes_and_Considerations_(not_normative)"><span data-mw-comment-start="" id="h-Product_Strategy_Documents-Additional_Notes_and_Considerations_(not_normative)"></span>Product Strategy Documents<span data-mw-comment-end="h-Product_Strategy_Documents-Additional_Notes_and_Considerations_(not_normative)"></span></h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&action=edit&section=6" title="Edit section: Product Strategy Documents"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The architecture principles are derived from <b>strategic and operational goals</b> of the organization, as understood and interpreted by TechCom. This document refers to these goals to document the motivation for the architecture principles. They are linked here for reference. </p> <ul><li><b>Movement Strategy <a href="https://meta.wikimedia.org/wiki/Strategy/Wikimedia_movement/2017/Reports/Summary_of_phase_1_process_and_outcomes" class="extiw" title="meta:Strategy/Wikimedia movement/2017/Reports/Summary of phase 1 process and outcomes">outcomes</a> and <a href="/wiki/File:Movement_Strategy_2017_-_williamsworks_final_synthesis_report.pdf" title="File:Movement Strategy 2017 - williamsworks final synthesis report.pdf">report</a></b> (Phase One, September 2017)</li> <li><a href="https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Medium-term_plan_2019" class="extiw" title="meta:Wikimedia Foundation Medium-term plan 2019"><b>Wikimedia Foundation Goals and Priorities</b></a> (Medium-term plan 2019)</li> <li><b><a href="/wiki/File:Product_Directions_session_at_Wikimedia_Technical_Conference_2018.pdf" title="File:Product Directions session at Wikimedia Technical Conference 2018.pdf">Product Directions</a></b> (Wikimedia Technical Conference 2018, Toby Negrin)</li></ul> <p><b>Points of View Essays:</b> </p><p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Trust" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Trust">Trust</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Trust/Reliability" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Trust/Reliability">Reliability</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Trust/Transparency" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Trust/Transparency">Transparency</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Trust/Accountability" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Trust/Accountability">Accountability</a></li></ul> <p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience">Experience</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience/Form_Factor" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience/Form Factor">Form Factor</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience/Rich_Content" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience/Rich Content">Rich Content</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience/Contributors" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience/Contributors">Contributors</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience/Customization" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience/Customization">Customization</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Experience/Discovery" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Experience/Discovery">Discovery</a></li></ul> <p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Scale" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Scale">Scale</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Scale/Communities" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Scale/Communities">Community</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Scale/Content" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Scale/Content">Content</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Scale/Resilience" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Scale/Resilience">Resilience</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Scale/Ubiquity" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Scale/Ubiquity">Ubiquity</a></li></ul> <p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Augmentation" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Augmentation">Augmentation</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Augmentation/Content_Curation" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Augmentation/Content Curation">Content Curation</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Augmentation/Content_Generation" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Augmentation/Content Generation">Content Generation</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Augmentation/Governance" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Augmentation/Governance">Governance</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Augmentation/Machine_Translation" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Augmentation/Machine Translation">Machine Translation</a></li></ul> <p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Culture" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Culture">Culture</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Culture/Inclusion" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Culture/Inclusion">Inclusion</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Culture/Language" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Culture/Language">Language</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Culture/Content_Gaps" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Culture/Content Gaps">Content Gaps</a></li></ul> <p><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Tools" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Tools">Tools</a>: </p> <ul><li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Tools/Tools_for_Developers" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Tools/Tools for Developers">Tools For Developers</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Tools/Tools_for_Organizers" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Tools/Tools for Organizers">Tools For Organizers</a></li> <li><a href="/wiki/Wikimedia_Audiences/2018_Product_points_of_view/Tools/Tools_For_Moderators" class="mw-redirect" title="Wikimedia Audiences/2018 Product points of view/Tools/Tools For Moderators">Tools For Moderators</a></li></ul> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐6b6c9bdc8b‐vlc45 Cached time: 20241103124307 Cache expiry: 2592000 Reduced expiry: false Complications: [no‐toc] DiscussionTools time usage: 0.015 seconds CPU time usage: 0.221 seconds Real time usage: 0.307 seconds Preprocessor visited node count: 1618/1000000 Post‐expand include size: 24038/2097152 bytes Template argument size: 7086/2097152 bytes Highest expansion depth: 20/100 Expensive parser function count: 12/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 4546/5000000 bytes Lua time usage: 0.078/10.000 seconds Lua memory usage: 1606511/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 244.404 1 -total 76.81% 187.715 1 Template:Policy 46.43% 113.481 1 Template:Sidebar 24.42% 59.694 8 Template:Ll 23.16% 56.598 1 Template:Plainlist 21.81% 53.315 48 Template:Anchor 17.59% 42.984 1 Template:Mbox 8.16% 19.948 16 Template:Translatable 7.68% 18.768 9 Template:Pagelang 5.59% 13.653 1 Template:Navbar --> <!-- Saved in parser cache with key mediawikiwiki:pcache:idhash:784930-0!canonical and timestamp 20241103124307 and revision id 5103613. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://www.mediawiki.org/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&oldid=5103613">https://www.mediawiki.org/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&oldid=5103613</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Category</a>: <ul><li><a href="/wiki/Category:Wikimedia_development_policies" title="Category:Wikimedia development policies">Wikimedia development policies</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 9 March 2022, at 21:57.</li> <li id="footer-info-copyright">Text is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-ShareAlike License</a>; additional terms may apply. Text in <a class="external text" href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">the Help: namespace</a> is available under the <a rel="nofollow" class="external text" href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons CC0 License</a>. By using this site, you agree to the <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use">Terms of Use</a> and <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy Policy</a>.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Project:About">About mediawiki.org</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Project:General_disclaimer">Disclaimers</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/www.mediawiki.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//m.mediawiki.org/w/index.php?title=Wikimedia_Engineering_Architecture_Principles&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-vlr7t","wgBackendResponseTime":96,"wgDiscussionToolsPageThreads":[{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Application","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Principles","replies":[]},{"headingLevel":2,"name":"h-","type":"heading","level":0,"id":"h-Additional_Notes_and_Considerations_(not_normative)","replies":[{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Product_Guidance_and_Requirements-Additional_Notes_and_Considerations_(not_normative)","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Processes_and_Practices-Additional_Notes_and_Considerations_(not_normative)","replies":[]},{"headingLevel":3,"name":"h-","type":"heading","level":0,"id":"h-Product_Strategy_Documents-Additional_Notes_and_Considerations_(not_normative)","replies":[]}]}],"wgPageParseReport":{"discussiontools":{"limitreport-timeusage":"0.015"},"limitreport":{"cputime":"0.221","walltime":"0.307","ppvisitednodes":{"value":1618,"limit":1000000},"postexpandincludesize":{"value":24038,"limit":2097152},"templateargumentsize":{"value":7086,"limit":2097152},"expansiondepth":{"value":20,"limit":100},"expensivefunctioncount":{"value":12,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":4546,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 244.404 1 -total"," 76.81% 187.715 1 Template:Policy"," 46.43% 113.481 1 Template:Sidebar"," 24.42% 59.694 8 Template:Ll"," 23.16% 56.598 1 Template:Plainlist"," 21.81% 53.315 48 Template:Anchor"," 17.59% 42.984 1 Template:Mbox"," 8.16% 19.948 16 Template:Translatable"," 7.68% 18.768 9 Template:Pagelang"," 5.59% 13.653 1 Template:Navbar"]},"scribunto":{"limitreport-timeusage":{"value":"0.078","limit":"10.000"},"limitreport-memusage":{"value":1606511,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-6b6c9bdc8b-vlc45","timestamp":"20241103124307","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>