Release notes/1.36

= MediaWiki 1.36 =

MediaWiki 1.36.0-rc.0
THIS IS NOT A RELEASE YET

MediaWiki 1.36 is a pre-release testing branch, and is not recommended for use in production.

Upgrading notes for 1.36
Don't forget to always back up your database before upgrading!

See the file UPGRADE for more detailed per-version upgrade instructions from the oldest supported upgrading version, MediaWiki 1.27.

Some specific notes for MediaWiki 1.36 upgrades are below: referred to as Intl, ext-intl, or php-intl). MediaWiki:Block-autoblock-exemptionlist. If you use this feature, please move  the MediaWiki:Autoblock_whitelist page.  settings. This is not safe; extension functions are run relatively late, some  services are already initialized by that point and so they use the old  configuration. Changes in 1.36 make this kind of breakage even more common.  You can use the MediaWikiServices hook instead. (In the future there might be  a dedicated hook for configuration changes.)
 * MediaWiki 1.36 now requires the PHP internationalization extension (commonly
 * MediaWiki:Autoblock_whitelist has been moved to
 * (T275334) $wgExtensionFunctions is sometimes used to change configuration

For notes on 1.35.x and older releases, see HISTORY.

Configuration changes for system administrators in 1.36
MediaWiki update script, maintenance/update.php, used to accept `--nopurge` option to prevent clearing caches stored in the database during upgrade, this is no longer recommended and the option has been removed.

New configuration
marks edits as reverts if they restore the page to an exact previous state. This configuration variable sets the maximum number of revisions of a page that will be checked against every new edit. Set this to 0 to disable the feature entirely. control caching of ParserOutput for old revisions. on account log-in systems via RememberMeAuthenticationRequest. support meta tags. These tags make sharing of MediaWiki pages on a variety of social platforms more contentful and thus useful. plugin to be disabled. It has been enabled by default since MediaWiki 1.27.
 * (T256001) $wgManualRevertSearchRadius – This setting introduces a feature that
 * (T244058) $wgOldRevisionParserCacheExpireTime — This setting was added to
 * (T265263) $wgRememberMe - This setting configures the "remember me" checkbox
 * (T157145) $wgSkinMetaTags – This setting allows configuration of skins to
 * (T280944) $wgIncludejQueryMigrate - This setting allows the jQuery Migrate

Changed configuration
if you have not set one, will now be the new logo of MediaWiki. feature when users start writing an edit summary, has been deprecated. In future releases, this feature will always be enabled. scaling, was deprecated. Use the `thumbProxyUrl` setting in $wgLocalFileRepo instead. to $wgDatabaseReplicaLagWarning & $wgDatabaseReplicaLagCritical respectively. The former configuration variable names are deprecated, but will be used as the fall back if they are still set, and remain temporarily available for extensions which try to read them. deprecation. A new "coalesceScheme" option takes its place, and is "hash_stop" by default. If you use Dynomite, then set the new "coalesceKeys" option to "hash_tag". without deprecation. Use "broadcastRoutingPrefix" instead.
 * $wgLogos – The default value for the site logo, which is shown in an install
 * (T274695) $wgAjaxEditStash — This setting, to disable the edit stashing
 * $wgUploadStashScalerBaseUrl – This setting, to enable remote on-demand media
 * $wgSlaveLagWarning and $wgSlaveLagCritical – These settings have been renamed,
 * $wgWANObjectCaches - The "coalesceKeys" option was removed without
 * $wgWANObjectCaches - The "cluster" and "mcrouterAware" options were removed

Removed configuration
removed. group permission settings instead. For example, to prevent sysops from moving files, set `$wgGroupPermissions['sysop']['movefile'] = false;` $wgExtPGAlteredFields, $wgExtModifiedFields — These settings were removed. They became obsolete after 1.17 overhauled the database updater, but were kept for backwards compatibility. The LoadExtensionSchemaUpdates hook should be used instead. The preprocessor configuration which used to live within this setting was deprecated in 1.34 and removed in 1.35. the schema change upgrade path it controlled. If your site is still using it, meaning you have not yet applied the `pp_sortkey` schema change from 1.24, you must now apply it before upgrading. PasswordNotInLargeBlacklist were removed. Please use PasswordCannotMatchDefaults and PasswordNotInCommonList instead.
 * $wgUseTwoButtonsSearchForm — This setting, deprecated in 1.35, has been
 * $wgAllowImageMoving — This setting, deprecated in 1.35, has been removed. Use
 * $wgExtNewTables, $wgExtNewFields, $wgExtNewIndexes, $wgExtPGNewFields,
 * $wgParserConf - This setting, deprecated in 1.35, has been removed.
 * $wgEnableRestAPI - This setting, ignored since 1.35, has been removed.
 * $wgPagePropsHaveSortkey – This temporary setting has been removed, along with
 * The deprecated password policies PasswordCannotMatchBlacklist and

New user-facing features in 1.36
button shown in the skin footer will be different.
 * The logo of MediaWiki has changed. This means that the "Powered By MediaWiki"
 * All HTML5 named entities are now accepted in wikitext.
 * (T106263) The file description page's alternate sizes now include 2048px.

New developer features in 1.36
loaded, not just on the presence of a certain extension tag hook. This is a better fit for extensions like TimedMediaHandler, which affect the output but don't register parser hooks. Use `extension:Foo` in the `!! hooks` section of your parser test file to declare a dependency on the `Foo` extension being loaded. parts of the code, or to extensions, the new BlockUser and UnblockUser command objects were added. Use the BlockUserFactory and UnblockUserFactory services to create them. instead of \Wikimedia\Rdbms\DBConnRef, as the first parameter. over-riding MediaHandler::formatTag( $key, $value ). The default for unknown tags is numeric formatting; non-EXIF tags which are non-numeric should always use this method to specify the desired formatting. to parse wikitext for an article, based on user preferences, title, etc. Unicode NFC normalization done on inputs of type 'string', so it more suitable when the input is binary or may contain deprecated Unicode sequences or characters (such as U+2001) that should be passed unmodified. called BoxedCommand. A BoxedCommand object can be obtained with MediaWikiServices::getInstance->getCommandFactory->createBoxed. `'es6' => true` in their module definition. ES6-only modules will not be executed in browsers that don't support ES6, such as IE11.
 * Parser test files can now declare a dependency on a specific extension being
 * To expose code previously present in SpecialBlock/SpecialUnblock to other
 * The hook UsersPagerDoBatchLookupsHook takes now a \Wikimedia\Rdbms\IDatabase,
 * MediaHandlers can now customize the formatting of the metadata they emit by
 * The new 'title' type can be used to validate action API and REST API inputs.
 * The new ArticleParserOptions hook allows customizing the parser options used
 * The new 'raw' type can be used to validate action API inputs. It bypasses the
 * (T260330) A new abstraction for running shell commands has been introduced,
 * ResourceLoader modules can now mark themselves as ES6-only by setting

New external libraries

 * Added wikimedia/minify 2.2.1.
 * Added wikimedia/request-timeout 1.1.0.
 * Added wikimedia/shellbox 1.0.4.
 * Added WVUI 0.1.0.

Changed external libraries

 * Updated composer/semver from 1.5.1 to 3.2.4.
 * Updated guzzlehttp/guzzle from 6.5.4 to 7.2.0.
 * Updated jQuery from v3.4.1 to v3.6.0.
 * Updated jQuery Migrate from v3.1.0 to v3.3.2.
 * Updated jquery.client from 2.0.2 to 3.0.0.
 * Updated OOUI from 0.39.3 to 0.41.3.
 * Updated pear/mail_mime from 1.10.8 to 1.10.9.
 * Updated pear/net_smtp from 1.9.1 to 1.9.2.
 * Updated pimple/pimple from 3.3.0 to 3.3.1.
 * Updated wikimedia/at-ease from 2.0.0 to 2.1.0.
 * Updated wikimedia/cldr-plural-rule-parser from 1.0.0 to 2.0.0.
 * Updated wikimedia/common-passwords from 0.2.0 to 0.3.0.
 * Updated wikimedia/composer-merge-plugin from 1.4.1 to 2.0.1.
 * Updated wikimedia/html-formatter from 1.0.2 to 3.0.1.
 * Updated wikimedia/ip-set from 2.1.0 to 3.0.0.
 * Updated wikimedia/ip-utils from 1.0.0 to 3.0.2.
 * Updated wikimedia/less.php from 3.0.0 to 3.1.0.
 * Updated wikimedia/object-factory from 2.1.0 to 3.0.0.
 * Updated wikimedia/php-session-serializer from 1.0.7 to 2.0.0.
 * Updated wikimedia/remex-html from 2.2.0 to 2.2.2.
 * Updated wikimedia/utfnormal from 2.0.0 to 3.0.2.
 * Updated wikimedia/wait-condition-loop from 1.0.1 to 2.0.1.
 * Updated wikimedia/xmp-reader from 0.7.0 to 0.8.1.

Changed development-only external libraries

 * Updated composer/spdx-licenses from 1.5.3 to 1.5.4.
 * Updated doctrine/dbal from 2.10.2 to 3.0.0.
 * Updated doctrine/sql-formatter from 1.1.0 to 1.1.1.
 * Updated mediawiki/mediawiki-phan-config from 0.10.2 to 0.10.6.
 * Updated monolog/monolog from 1.25.3 to 2.2.0.
 * Updated nikic/php-parser from 4.4.0 to 4.10.2.
 * Updated psy/psysh from 0.10.4 to 0.10.5.
 * Updated seld/jsonlint from 1.7.1 to 1.8.3.
 * Updated symfony/yaml from ~3.4|~4.3|~5.0.5 to ~3.4|~5.1.
 * Updated wikimedia/testing-access-wrapper from 1.0.0 to 2.0.0.

Removed external libraries
been dropped. support for logging in Avro format has been dropped.
 * The html5shiv library has been removed, as support for Internet Explorer 8 has
 * The wikimedia/avro suggested development-only library has been removed, as the

Bug fixes in 1.36
if it founds you reversed them (based on assumption that higher revision ID indicates a later revision). The assumption is not always true, and is hindering proper edit undoing in some cases, hence the logic has been removed. Reversing the parameters will now lead to edit conflict or undefined behavior. redirects will now be recorded as deleted if no revision is being left in the source page (that's if all revisions of the page have been merged to another).
 * (T190285) ApiEditPage module used to switch 'undo' and 'undoafter' parameters,
 * (T263340) In history merging, pages with a content model that does not support

Action API changes in 1.36
allowed for cross-origin API requests ($wgAllowedCorsHeaders). added to the watchlist when making API edits, regardless of their preferences. This is to reduce the size of the watchlist data in the database. To add API bot edits to the watchlist, explicitly set the 'watch' option.
 * (T269636) `Access-Control-Max-Age` was added to the default list of headers
 * (T258108) Accounts with the 'bot' right no longer have pages automatically

Languages updated in 1.36
MediaWiki supports over 350 languages. Many localisations are updated regularly. Below only new and removed languages are listed, as well as changes to languages because of Phabricator reports.


 * (T258975) Added a Latin/Cyrillic script converter for the Talysh language.
 * (T245359) Split Bali script locale from "ban" (Balinese) (ban-bali).
 * (T259330) Added language support for Mara (mrh).
 * (T263968) Added language support for Nias (nia).
 * (T264582) Added language support for Madurese (mad).
 * (T270365) Added language support for Tyap (kcg).
 * (T276745) Added language support for Wayuu (guc).

Breaking changes in 1.36
title was not set using setContextTitle. Previously, this mis-use would only cause a deprecation warning to be emitted. individually hard deprecated previously. The following have now been removed: - ApiTestCase::doLogin - Article::doDeleteArticle - Article::doDeleteArticleReal - Article::getComment - Article::getCreator - Article::getUser - Article::getUserText - Article::insertProtectNullRevision - File::delete - File::recordUpload - ForeignDBFile::delete - ForeignDBFile::recordUpload - LocalFile::delete - LocalFile::deleteOld - LocalFile::recordUpload - PageArchive::undelete - RecentChange::markPatrolled - Title::getUserPermissionsErrors - Title::quickUserCan - Title::userCan - WebRequest::getLimitOffset - WikiPage::doDeleteArticle - WikiPage::insertProtectNullRevision SpecialPageFactory service instead. to the $wgUser global variable. Not passing a User to those methods was previously hard deprecated, and support for not passing a User has now been removed: - ArchivedFile::userCan - File::userCan - FileDeleteForm::__construct - FileDeleteForm::doDelete - LocalFileDeleteBatch::__construct - LogEventsList::getExcludeClause (only needed for the 'user' audience) - LogEventsList::userCan - LogEventsList::userCanBitfield - LogEventsList::userCanViewLogType - LogPage::addEntry (also accepts user id instead) - OldLocalFile::userCan - PatrolLog::record - Title::getNotificationTimestamp (though the entire method is deprecated) - WikiPage::getComment (only needed for the FOR_THIS_USER audience) - WikiPage::getCreator (only needed for the FOR_THIS_USER audience) - WikiPage::getUser (only needed for the FOR_THIS_USER audience) - WikiPage::getUserText (only needed for the FOR_THIS_USER audience) - APIQueryInfoTokens - APIQueryRecentChangesTokens - APIQueryRevisionsTokens - APIQueryUsersTokens - ApiTokensGetTokenTypes checked if the context user ($wgUser) had that right. Passing a right was hard deprecated in 1.35, and support for passing a right has now been removed. fifth parameter, and fell back to $wgUser if not user was provided. The signature changed to have the user as the second parameter, and the old signature was hard deprecated in 1.35. Support for the old signature has now been removed. which had no known callers was removed entirely. Additionally, the following public methods were made private: - ::extractSectionTitle - ::getSummaryInputWidget - ::noSuchSectionPage - ::initialiseForm were removed. Use the SpamChecker service instead. in 1.35, has been removed. Use LBFactory::waitForReplication instead. string, was deprecated in 1.35 and support was now removed. parameter was deprecated in 1.35 and support was now removed. should generally be migrated to WANObjectCache, or if you really need the internal object, use ObjectCache::getLocalClusterInstance instead. has been removed. in 1.35, has been removed. now throws an exception; support has also been removed for several deprecated variants on the arguments passed to Parser::__construct. Direct invocation of Parser::__construct was deprecated in 1.34. private: - $mTagHooks - use Parser::getTags - $mFunctionHooks - use Parser::getFunctionHooks - $mOutput - use Parser::getOutput - $mPreprocessor - use Parser::getPreprocessor deprecated in 1.35, have been removed. either marked as @internal or deprecated in 1.35. (provided by mediawiki.mixins.less), which have been deprecated since 1.35, have now been removed. MediaWiki no longer supports any browser which would require this SVG-fallback PNG support, so you can simply use the regular CSS `background-image:` declaration instead. 'oldshared.css', deprecated since 1.35 has been removed (T248357). nature of this parameter was deprecated in 1.34. can instead use the HtmlPageLinkRendererBegin and HtmlPageLinkRendererEnd hooks, respectively. hook handlers to add error messages, indicate that they have sent the email instead of core, etc. Setting the parameter to something other than a Status object, true, false, an empty string, an array, or a MessageSpecifier, object, which had been deprecated in 1.29, is no longer supported, and now results in an MWException being thrown. should use action=raw&ctype=text/css directly. removed: - ::isDnsBlacklisted - ::inDnsBlacklist - ::isLocallyBlockedProxy - ::trackBlockWithCookie deprecated in 1.35. (T174199) an array of messages or a boolean value. This function was also marked as @internal and is no longer safe to call it publicly. without deprecation. You should use mw.Title.getExtension and prepend the dot if need be. been removed. method was introduced in 1.35 for internal use, and appears unused outside of MediaWiki core. removed. removed. - ::prevents, deprecated in 1.33 - ::shouldTrackWithCookie, deprecated in 1.34 - ::getBlocker, deprecated in 1.35 - ::setBlocker, deprecated in 1.35 - ::getBlockErrorParams, deprecated in 1.35 have been removed: - ::setCookie - ::clearCookie - ::getCookieValue - ::getIdFromCookieValue - ::shouldTrackWithCookie removed. This method was for internal use only, and appears unused outside of MediaWiki core. removed. has been removed: - ::initFromRow - ::newFromRow - use UserGroupManager::newGroupMembershipFromRow - ::selectFields - use UserGroupManager::getQueryInfo - ::delete - use UserGroupManager::removeUserFromGroup - ::insert - use UserGroupManager::addUserToGroup - ::purgeExpired - use UserGroupManager::purgeExpired - ::getMembershipsForUser - use UserGroupManager::getUserGroupMemberships - ::getMembership - use UserGroupManager::getUserGroupMemberships removed. This method was for internal use only, and appears unused outside of MediaWiki core. has been removed. This method was for internal use only, and appears unused outside of MediaWiki core. ::checkExistingRevision were marked as @internal to allow for breaking changes. They are no longer safe to call. The methods were unused outside of MediaWiki core. When extending these special pages, a call to the grandparent constructor (`SpecialPage::__construct`) in the sub-class would now break the derived special page, as the fallback code in the parent constructor cannot set the services as needed. Be sure to call the parent constructor when extending core special pages. Extending core's special pages is not part of the stable interface, and should generally be avoided. been removed. removed. nature of this option was deprecated in 1.35. unused outside of MediaWiki core. use Skin::prepareSubtitle. It had no known callers. a bool. been added. The methods appeared to be unused outside of MediaWiki core. removed. WikiPage instance that where constructed on a title that does not refer to a proper page (but rather a special page or interwiki link). The behavior was previously undefined and could in some cases lead to data corruption. Affected methods are: getId, insertOn, newPageUpdater, doUpdateRestrictions, doDeleteArticleReal, doRollback, and doEditContent. clones all database tables before running tests, like MediaWikiIntegrationTest does. If an extension was mis-using the hook to *exclude* tables from the clone, that will no longer occur, and tests may fail. in public MediaWiki-related git, were removed: - MockWebRequest - UserWrapper getNextRevision, hard deprecated since 1.31, was prohibited. documented and are not altered by previous calls to these methods. MediaWiki\Shell\Result. Any type hints should be updated. - countRevisionsBetween - getAuthorsBetween was removed, and MediaWikiServices::redefineService should be used instead. and NamespaceInfo services, deprecated in 1.34, was removed. Note that the MediaWikiTitleCodec class is not @newable or @stable to create, and should be retrieved from MediaWikiServices instead. MediaWikiServices::getInstance->getContentLanguage. WatchlistManager::clearAllUserNotifications instead. - checkFlags - checkTouched - clearPreparedEdit - doDeleteUpdates - doEditUpdates - doPurge - doViewUpdates - exists - followRedirect - getAutoDeleteReason - getCategories - getContentHandler - getContentModel - getContributors - getDeletionUpdates - getHiddenCategories - getId - getLatest - getLinksTimestamp - getMinorEdit - getOldestRevision - getRedirectTarget - getRedirectURL - getRevision - getTouched - getUndoContent - hasViewableContent - insertOn - insertRedirect - insertRedirectEntry - isCountable - isRedirect - loadFromRow - loadPageData - lockAndGetLatest - makeParserOptions - pageDataFromId - pageDataFromTitle - prepareContentForEdit - protectDescription - protectDescriptionLog - replaceSectionAtRev - replaceSectionContent - setTimestamp - shouldCheckParserCache - supportsSections - triggerOpportunisticLinksUpdate - updateCategoryCounts - updateIfNewerOn - updateRedirectOn - updateRevisionOn - doUpdateRestrictions - updateRestrictions - doRollback - commitRollback - generateReason the AvroFormatter class and the AvroValidator utility class have been removed without deprecation. Use AbstractBlock::getReasonComment and AbstractBlock::setReason instead.
 * Grade C (non-JavaScript) support for Internet Explorer 8 has been dropped.
 * (T249459) wfIsBadImage, deprecated in 1.34, has been removed.
 * (T176526) EditPage::getContextTitle will now throw an exception if a context
 * The DeferredStringifier class, deprecated since 1.31, was removed.
 * Multiple methods that fell back to the $wgUser global variable were
 * The SpecialPageFactory class, deprecated in 1.32, has been removed. Use the
 * Multiple methods previously had optional User parameters, with fallbacks
 * The following hooks have been removed:
 * LogEventsList::typeAction previously accepted an optional right parameter, and
 * WikiPage::doDeleteArticleReal previously accepted an optional user as its
 * User::addNewUserLogEntry, deprecated since 1.27, was removed.
 * As part of refactoring the EditPage class, EditPage::setPreloadedContent,
 * EditPage::matchSpamRegex and ::matchSummarySpamRegex, deprecated in 1.35,
 * The global function `wfWaitForSlaves`, deprecated in 1.27 and hard-deprecated
 * Calling Action::factory with null as the first parameter, rather than a
 * Calling Action::factory with an object that wasn't an Article as the second
 * The global variable $wgMemc, deprecated since 1.35, has been removed. Usage
 * The preprocessDump.php maintenance script was removed.
 * CategoryFinder, which was deprecated in 1.31 and hard-deprecated in 1.35,
 * GenderCache::singleton, which was deprecated in 1.28 and hard-deprecated
 * Sanitizer::escapeId, deprecated in 1.30, has been removed.
 * Direct invocation of Parser::__construct (instead of via a ParserFactory)
 * Parser::setFunctionTagHook, deprecated in 1.35, has been removed.
 * The following properties of Parser, deprecated in 1.35, have been made
 * The ParserBeforeTidy hook, deprecated in 1.35, has been removed.
 * The ParserBeforeTidy, ParserBeforeStrip, and ParserAfterStrip hooks,
 * All methods of MWTidy except for MW::tidy have been removed. These were each
 * (T248062) Mixins `.background-image-svg` and `.background-image-svg-quick`
 * The ResourceLoader module `mediawiki.legacy.oldshared` and its file
 * `ResourceLoader::__construct` now requires a Config parameter. The optional
 * The LinkBegin and LinkEnd hooks, deprecated in 1.28, have been removed. You
 * The EmailUser hook passes its fifth param, $error, by reference, to allow
 * Skin::getDynamicStylesheetQuery, deprecated in 1.32, has been removed. You
 * Skin::makeI18nUrl, deprecated in 1.35, has been removed.
 * The following User methods, deprecated and moved to BlockManager in 1.34, were
 * Support for v1 of the parser tests file format has been removed; it was
 * SpecialUnblockUser::processUIUnblock now returns a Status object instead of
 * mw.Title.getDotExtension from the 'mediawiki.Title' module was removed
 * Profiler::getTemplated and Profiler::setTemplated, deprecated in 1.34, have
 * Removed HookContainer::getOriginalHooksForTest without deprecation. This
 * ParserCache::__construct now requires three parameters.
 * Message->getFormat, deprecated in 1.29, has been removed.
 * Support for passing Article to ParserCache::get, deprecated in 1.35, has been
 * ParserCache::singleton, deprecated in 1.30, has been removed.
 * DatabaseBlock::deleteIfExpired and ::fromMaster, deprecated in 1.35, have been
 * Some deprecated AbstractBlock methods have been removed:
 * Multiple DatabaseBlock methods dealing with cookies, deprecated in 1.34,
 * The public static callback function SpecialUnblock::processUIUnblock has been
 * ChangeTags::truncateTagDescription, deprecated in 1.35, has been removed.
 * Deprecated null fallbacks in PasswordReset constructor have been removed.
 * User::isEveryoneAllowed and User::getAllRights, deprecated in 1.34, has been
 * The following methods of the UserGroupMembership class, deprecated in 1.35,
 * The public static callback function SpecialBlock::validateTargetField has been
 * The public static callback function SpecialUploadStash::tryClearStashedUploads
 * SpecialComparePages::showDiff ::revOrTitle, ::checkExistingTitle, and
 * Each special page within core now uses service injection via it constructor.
 * Language::getExtraUserToggles and ::viewPrevNext, deprecated in 1.34, have
 * StreamFile::send404Message and ::parseRange, deprecated in 1.34, have been
 * SVGMetadataExtractor class, deprecated in 1.34, has been removed.
 * ProcessCacheLRU class, deprecated in 1.32, has been removed.
 * wfForeignMemcKey, deprecated in 1.35, has been removed.
 * LoadBalancer::safeWaitForMasterPos, deprecated in 1.34, has been removed.
 * JobQueue::factory now requires its `idGenerator` option. The optional
 * ApiFeedRecentChanges::getFeedObject has been changed to private, and appears
 * Skin::subPageSubtitle has been changed to private method. Callers should
 * RevisionDeleter::checkRevisionExistence was removed without deprecation.
 * wfForeignMemcKey and wfMemcKey, deprecated in 1.35, have been removed.
 * MediaWiki now also requires the php-intl extension.
 * BotPassword::save now returns a Status object for the result rather than
 * The methods in CoreTagHooks have been marked @internal and type hints have
 * SquidPurgeClient and SquidPurgeClientPool, deprecated since 1.35, have been
 * Several methods on WikiPage will now throw an exception when called on a
 * The ParserTestRunner no longer invokes the ParserTestTables hook. Instead, it
 * The following classes, which were only loaded for tests and had no uses found
 * Passing Title as a second parameter to RevisionStore::getPreviousRevision and
 * (T275619) Maintenance::hasOption and Maintenance::getOption now behave as
 * The internal class FirejailCommand was removed.
 * Command::execute now returns a Shellbox\Command\UnboxedResult instead of a
 * WikiPage::$mIsRedirect was removed.
 * ObjectCache::detectLocalServerCache, deprecated in 1.35, was removed.
 * The following functions from the Title class have been removed:
 * The PageProps class was converted to a service. PageProps::overrideInstance
 * Support for creating a MediaWikiTitleCodec object without the InterwikiLookup
 * The $wgContLang variable, deprecated in 1.32, was removed. You can instead use
 * User::clearAllNotifications, hard deprecated in 1.35, was removed. Use
 * DatabaseBlock::getBlocker can return any UserIdentity instance, not just User.
 * MediaWiki::triggerJobs, deprecated in 1.34, was removed.
 * The following Article methods, deprecated in 1.35, were removed:
 * The monolog-based logging system has dropped the Avro format. Because of this,
 * AbstractBlock::$mReason, deprecated in 1.34, was removed.

Deprecations in 1.36
a subsequent release. Use MWGrants::grantName instead. ->getStatsdDataFactory->updateCount instead. WikiPage::doUserEditContent instead. Note that doEditContent was also deprecated in 1.32 for unrelated reasons and doUserEditContent is deprecated for other reasons, however, using doUserEditContent is  recommended over using doEditContent. PageUpdater::saveRevision instead. Note that the new method expects callers to take care of checking EDIT_MINOR against the minoredit right, and to apply the autopatrol right as appropriate. warnings. Use ::recordUpload3 instead. a User object, which falls back to the global $wgUser, is now deprecated. meaning that it is no longer safe to manually call the constructor via `new User`. Instead, use the UserFactory service. Additionally, the following static constructor methods were deprecated in favor of using the UserFactory service: - User::newFromName - User::newFromId - User::newFromActorId - User::newFromIdentity - User::newFromAnyId - User::newFromConfirmationCode UserEditTracker service: - User::getFirstEditTimestamp - User::getLatestEditTimestamp of the method it wraps, User->isRegistered. been deprecated. Preprocessor_DOM was removed in 1.35. 1.35. be made private to the class, as it appears to have no uses outside the Sanitizer class. by reimplementing the method using the raw indicators data from OutputPage::getIndicators. ResourceLoader::makeInlineScript instead. Use SpecialPageFactory::getUsablePages instead. instead. DatabaseBlock::delete are deprecated. Use DatabaseBlockStore::insertBlock, DatabaseBlockStore::updateBlock, DatabaseBlockStore::purgeExpiredBlocks and DatabaseBlockStore::deleteBlock instead. Call BlockUtils::parseBlockTarget instead. service instead. MediaWikiIntegrationtestCase::clearHook. has been deprecated. Use Title or SpecialPage methods directly. respective equivalents in SkinFactory instead. instead. deprecated. Please use Skin::footerLink instead. ResourceLoaderSkinModule. If you are having problems styling table of contents ensure you have an updated skin. is now available in a sidebar data array which you can get from any class that's extending QuickTemplate class. without a $hookContainer parameter is deprecated. Use UserGroupManager instead. BlockPermissionChecker::checkEmailPermissions instead. BlockPermissionChecker::checkBlockPermissions instead. BlockUser::parseExpiryInput instead. use BlockUtils instead. LanguageConverterFactory::getLanguageConverter directly. ParserCache::makeParserOutputKey instead. was removed. MediaWiki support for PHPUnit 4 ended with the removal of HHVM support. was removed without deprecation. This class was introduced during the upgrade to PHPUnit 8, but never used. incompatibility with PHPUnit 8, was removed. explicitly. and will be removed in a subsequent release: - findVariantLink - convertTitle - updateConversionTable - commafy - getPreviousRevisionID - getNextRevisionID - getEarliestRevTime - getDefaultOptions - getDefaultOption the deprecation of Language::commafy. Use mw.language.convertNumber instead. use Title::getDeletedEditsCount and Title::hasDeletedEdits instead. was hard-deprecated. Use explicit formatting methods instead, such as Message::text and Message::escaped. are now unconditionally enabled. - wfAppendToArrayIfNotDefault - wfAcceptToPrefs - wfClearOutputBuffers - wfConfiguredReadOnlyReason - wfDebugMem - wfGetPrecompiledData - wfNegotiateType with the new BeforeParserFetchTemplateRevisionRecord hook. (The similar ParserFetchTemplateHook was deprecated in 1.35; the new hook  replaces both.) with future wikitext parsers (which need to enumerate all interwiki prefixes). In test cases please use $wgInterwikiCache instead. represent editable pages (e.g. special pages). WikiPages were always documented to represent "MediaWiki article and history". the direct path to the resources. been deprecated. after a ParserTestRunner refactoring. SpecialCachedPage, CacheHelper, ICacheHelper. They were unused in MediaWiki ecosystem, so no replacement was provided. ProtectionFormAddFormFields hook instead. MutableRevisionRecord should be constructed directly via constructor. to application logic. Storage layer code should use the ActorNormalization service for normalizing and denormalizing user names. deprecated. The parameter should be omitted. Storage layer code should use the ActorNormalization service for normalizing and denormalizing user names. now implemented as an Executor option. false since 1.33. favor of the new method maybeEnqueueWatchlistExpiryJob that takes care of relevant configuration checks. favor of ::getPerformerIdentity. MediaWikiServices::getAuthManager instead. WatchlistManager::clearTitleUserNotification instead. is now allowed. option, which now accepts UserIdentity. Passing user ID is deprecated. DatabaseBlock::isExemptedFromAutoblocks instead. Use the UserNameUtils service or IPUtils directly. footer icons from template data requested via $this->get('footericons'). basic browser support. Use unprefixed property `box-shadow:` instead. ::authorizeMerge instead. Use the UserNameUtils service instead. defunct after the classic edit toolbar was removed. Use one of the many other EditPage hooks instead. MediaWiki\Watchlist\WatchlistManager instead. Deprecated the method MediaWikiServices->getWatchlistNotificationManager; use MediaWikiServices->getWatchlistManager instead. been removed. Other hooks like "RecentChange_save" can be used instead.
 * (T278026) The DB_MASTER constant has been deprecated in favour of DB_PRIMARY.
 * (T245963) User::getGrantName is now hard deprecated and will be removed in
 * wfIncrStats is now deprecated. Use MediaWikiServices::getInstance
 * WikiPage::doEditContent is now deprecated. Use
 * WikiPage::doUserEditContent is now deprecated. Use
 * LocalFile::recordUpload2, soft deprecated in 1.35, now emits deprecation
 * Constructing a new instance of the ParserOptions class without providing
 * The User class, which was marked as @newable in 1.35, is no longer newable,
 * The following User methods have been hard deprecated in favor of the new
 * The confusingly-named User->isLoggedIn method has been deprecated in favour
 * Use of the `preprocessor=Preprocessor_DOM` option in parser test files has
 * ParserOptions::setTidy has been deprecated. It has had no effect since
 * Sanitizer::escapeIdReferenceList has been deprecated; it will eventually
 * Sanitizer::hackDocType is deprecated; it will eventually be made private.
 * Skin::getIndicatorsHTML is deprecated. The functionality can be retained
 * Skin::makeVariablesScript has been deprecated. Use
 * SpecialPageFactory::getRestrictedPages has been deprecated.
 * Title::nameOf is deprecated; use Title::newFromID->getPrefixedDBkey
 * DatabaseBlock::insert, DatabaseBlock::update, DatabaseBlock::purgeExpired and
 * SpecialBlock::getTargetAndType and AbstractBlock::parseTarget are deprecated.
 * SpecialUnblock::processUnblock was deprecated - use UnblockUserFactory
 * Deprecated MediaWikiIntegrationtestCase::removeTemporaryHook in favor of
 * Skin::getSearchLink, also exposed as 'searchaction' option in SkinTemplate,
 * Skin::getAllowedSkins and ::getSkinNames have been deprecated. Use their
 * The RollbackComplete hook has been deprecated, use the PageSaveComplete hook
 * Skin::makeUrl has been deprecated. Title methods should be used instead.
 * Skin::privacyLink, Skin::disclaimerLink and Skin::aboutLink have been
 * Skin::getLogo has been deprecated. Use ResourceLoaderSkinModule instead.
 * The module `mediawiki.toc.styles` has been replaced by
 * Skin::mainPageLink has been deprecated. Use LinkRenderer service instead.
 * BaseTemplate::getToolbox method has been hard deprecated. The toolbox data
 * Constructing a DefaultPreferencesFactory, LinkHolderArray or PasswordReset
 * Autopromote class, soft deprecated since 1.35, now emits deprecation warnings.
 * SpecialBlock::canBlockEmail has been deprecated. Please use
 * SpecialBlock::checkUnblockSelf has been deprecated. Please use
 * SpecialBlock::parseExpiryInput was deprecated - use
 * SpecialBlock::validateTarget has been deprecated, use BlockUtils instead.
 * SpecialBlock::validateTargetField has been deprecated for external use,
 * SpecialPage::getLanguageConverter has been deprecated, use
 * ParserCache::getKey has been deprecated. Use ParserCache::getMetadata and
 * The PHPUnit4And6Compat class, used to provide compatibility with PHPUnit 4,
 * The PHPUnit6And8Compat class, used to provide compatibility with PHPUnit 6,
 * MediaWikiIntegrationTestCase::assertType, hard-deprecated in 1.35 due to
 * ParserCache::getETag has been deprecated, instead build suitable etag
 * The following functions from the Language class have been hard deprecated
 * The following functions from the Title class have been hard deprecated:
 * The following functions from the User class have been hard deprecated:
 * The mw.language.commafy client-side method has been deprecated, to match
 * The "es6-promise" module has been deprecated. Use "es6-polyfills" instead.
 * Title::isDeleted and Title::isDeletedQuick have been deprecated. Please
 * Article::getContentObject, soft-deprecated since 1.32, was hard-deprecated.
 * WikiRevision::importUpload, soft-deprecated since 1.31, was hard-deprecated.
 * Html::infoBox has been deprecated. There's no replacement.
 * Message::toString without a $format parameter, soft-deprecated since 1.28,
 * BagOStuff::makeKeyInternal usage outside of BagOStuff has been deprecated.
 * BagOStuff::setDebug is deprecated and calls to it are ignored. Debug logs
 * The following global functions have been hard deprecated:
 * BeforeParserFetchTemplateAndtitleHook has been deprecated; replace
 * The InterwikiLoadPrefix hook has been deprecated; it is not compatible
 * WikiPage instances should no longer be constructed for titles that do not
 * Skin::getSkinStylePath has been deprecated. Please replace usages with
 * The second argument of EnhancedChangesList::getDiffHistLinks, $query, has
 * The ParserTestTables hook has been deprecated; it is no longer necessary
 * The following classes have been hard deprecated: CachedAction,
 * The ProtectionForm::buildForm hook has been deprecated. Please use the
 * RevisionStore::newMutableRevisionFromArray has beed hard deprecated. Instead,
 * UserIdentity::getActorId is deprecated. The actor ID should not be exposed
 * Constructing a UserIdentityValue with an actor ID as the third parameter is
 * Command::cgroup is deprecated and no longer functional. $wgShellCgroup is
 * Command::restrict is deprecated. Instead use the new separate accessors.
 * MWTidy::tidy is deprecated. Use MediaWikiServices::getTidy-tidy instead.
 * TidyDriverBase::supportsValidate is deprecated; it has always returned
 * WatchedItem::getUser hard-deprecated in favor of ::getUserIdentity.
 * WatchedItemStoreInterface::enqueueWatchlistExpiryJob was hard deprecated in
 * LogEntry::getPerformer and its implementations have been hard-deprecated, in
 * AuthManager::singleton, deprecated in 1.35, is hard deprecated. Use
 * User::clearNotification, deprecated in 1.35, is hard deprecated. Use
 * Passing string to DatabaseBlock::setBlocker was deprecated. Only UserIdentity
 * DatabaseBlock constructor 'byText' option was deprecated in favour of 'by'
 * Parser::getUser was deprecated. Use Parser::getUserIdentity instead.
 * DatabaseBlock::isWhitelistedFromAutoblocks was deprecated. Use
 * User::isIPRange, deprecated in 1.35, is hard deprecated.
 * BaseTemplate::getFooterIcons, deprecated in 1.35, is hard deprecated. Read
 * `box-shadow` LESS mixin from mediawiki.mixins is deprecated due to updated
 * MergeHistory::checkPermissions was deprecated. Use ::probablyCanMerge or
 * User::isValidUserName, deprecated in 1.35, is hard deprecated.
 * The TitleArrayFromResult hook has been deprecated.
 * The EditPageBeforeEditToolbar hook has been deprecated; it has become
 * Deprecated the class name MediaWiki\User\WatchlistNotificationManager; use
 * The "ArticleEditUpdatesDeleteFromRecentchanges" hook, deprecated in 1.35, has

Other changes in 1.36
It has had no effect since 1.35. for use when automatically escaping the `=` character in template arguments. A tracking category and parser warning have been added to this release when `=` is used and it expands to something other than `=`. parser test file parser. This should be compatible with existing code, but it only supports version 2 of the test file specification and may be more strict when parsing invalid input, including duplicate tests. old BeforeParserFetchTemplateAndtitleHook and ParserFetchTemplateHook. to the import path for LESS stylesheets. Skins can use this to provide a custom version of mediawiki.skin.variables.less, setting skin-specific values for certain LESS variables. ContentHandler::getDataForSearchIndex has been clarified (the latter should only be called with the result of the former). Extensions may override getParserOutputForIndexing to skip generating HTML, which may improve indexing performance. (The default implementation still generates HTML, and getDataForSearchIndex implementations can still rely on it if they do not  over-ride getParserOutputForIndexing.) ::mRevIdFetched, all deprecated since 1.32, were removed. to JSON serialization. In case some installed extension do not support JSON yet, $wgParserCacheUseJson can be used to revert back to PHP serialization. ::getGroupsWithPermission were deprecated, use GroupPermissionsLookup service instead. LinkTarget, calling with LinkTarget was deprecated. extension.json schema. Extensions that define namespaces can set it to `false` to disallow moving pages in the specified namespace. Extensions should either use this or NamespaceIsMovableHook, but not both. The hook overides the attribute.
 * The 'tidy' key in ParserOptions (used in the parser cache) has been removed.
 * A future release of MediaWiki will make `=` a built-in parser function,
 * The implementation of TestFileReader::read has been changed to use Parsoid's
 * BeforeParserFetchTemplateRevisionRecord, a new hook, unifies and replaces the
 * The SkinLessImportPaths attribute was added, allowing skins to add a directory
 * The interaction between ContentHandler::getParserOutputForIndexing and
 * Article::fetchContentObject, ::mContentObject, ::mContentLoaded,
 * Article::mParserOptions and ::setParserOptions were removed.
 * Article and ImagePage::getEmptyPageParserOutput, unused, were removed.
 * ParserCache's default serialization format was changed from PHP serialization
 * PermissionManager::groupHasPermission, ::getGroupPermissions and
 * WatchedItemStoreInterface now accepts PageIdentity where it accepted
 * 'movable' attribute has been added to the 'namespaces' property of

Compatibility
MediaWiki 1.36 requires PHP 7.3.19 or later and the following PHP extensions:


 * ctype
 * dom
 * fileinfo
 * iconv
 * intl
 * json
 * mbstring
 * xml

MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used, but support for them is somewhat less mature.

The supported versions are:


 * MySQL 5.5.8 or later
 * PostgreSQL 9.4 or later
 * SQLite 3.8.0 or later

Online documentation
Documentation for both end-users and site administrators is available on MediaWiki.org, and is covered under the GNU Free Documentation License (except for pages that explicitly state that their contents are in the public domain):

https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation

Mailing list
A mailing list is available for MediaWiki user support and discussion:

https://lists.wikimedia.org/mailman/listinfo/mediawiki-l

A low-traffic announcements-only list is also available:

https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce

It's highly recommended that you sign up for one of these lists if you're going to run a public MediaWiki, so you can be notified of security fixes.

IRC help
There's usually someone online in #mediawiki on irc.freenode.net.