MediaWiki 1.31

MediaWiki 1.31 is a future release of MediaWiki.

Consult the  file for the full list of changes.

It is currently deployed on Wikimedia Foundation wikis through incremental "wmf"-branches starting 26 September 2017.

The 1.31.0 stable release is expected to come out on sometime in June 2018.

Download the or checkout the   branch download>Special:MyLanguage/Download from Git|in Git to follow this release.

More bundled extensions
The set of extensions that are bundled with the MediaWiki tarball is increasing. The new additions are:
 * provides a more friendly editor when editing CSS and JavaScript on-wiki.
 * provides a lightbox viewer for images and galleries.
 * provides two-factor authentication for wiki accounts.

Tidy replaced with HTML 5 parsing algorithm

 * See the frequently asked questions for more details

The buggy, HTML 4 based tidy library has been replaced by a pure-PHP HTML 5 parser to clean up improper wikitext in a modern and standards compliant way. If your content relied on some of the tidy fix-ups that are not being continued, they will need to be fixed. [Something about how in the long-run this will all be better. Pointers to Linter and ParserMigration].

Interwiki usernames
???

Further UI standardization
???

Configuration changes

 * $wgEnableAPI and $wgEnableWriteAPI are now deprecated and will be removed in a future version. The API is now considered to be stable, secure and essential.
 * $wgUsejQueryThree was removed, as it is now the default. This was documented as a temporary variable during the migration period, deprecated since 1.29.
 * $wgLogoHD has been updated to support svg images and uses $wgLogo where possible for fallback images such as png.
 * $wgFilterLogTypes will no longer ignore 'patrol' when user does not have the right to mark things patrolled.
 * Wikis that contain imported revisions or CentralAuth global blocks should run maintenance/cleanupUsersWithNoId.php.
 * $wgResourceLoaderMinifierStatementsOnOwnLine and $wgResourceLoaderMinifierMaxLineLength were removed (deprecated since 1.27).


 * $wgReferrerPolicy now supports having fallbacks for browsers that are not using the latest version of the Referrer Policy specification.
 * $wgFragmentMode is now set to [ 'legacy', 'html5' ] by default. This is a first step of migration to human-readable section IDs that will later result in 'html5' being the default mode.
 * The old CategorizedRecentChanges feature, including its related configuration option $wgAllowCategorizedRecentChanges, has been removed.
 * (T188472) The 'comma' value for $wgArticleCountMethod is no longer supported forperformance reasons, and installations with this setting will now work as if it was configured with 'any'.

New features

 * Wikimedia\Rdbms\IDatabase->select and similar methods now support joins with parentheses for grouping.
 * As a first pass in standardizing dialog boxes across the MediaWiki product, Html class now provides helper methods for messageBox, successBox, errorBox and warningBox generation.
 * Imports will now record unknown (and, optionally, known) usernames in a format like "iw>Example".
 * Linker (used on history pages, log pages, and so on) will display usernames formed like "iw>Example" as interwiki links, as if by wikitext like iw>Example.
 * The 'ImportHandleUnknownUser' hook allows extensions to auto-create users during an import.
 * Added a hook, ParserOutputPostCacheTransform, to allow extensions to affect the ParserOutput::getText post-cache transformations.

Languages updated

 * Mirandese (mwl) now supports gendered NS_USER/NS_USER_TALK namespaces.

Other changes

 * MessageBlobStore::insertMessageBlob (deprecated in 1.27) was removed.
 * The global function wfBCP47 was renamed to LanguageCode::bcp47.
 * The global function wfBCP47 is now deprecated.
 * The global function wfCountDown is now deprecated in favor of Maintenance::countDown
 * The OutputPage class constructor now requires a context parameter, (instantiating without context was deprecated in 1.18)
 * mw.page (deprecated in 1.30) was removed.
 * Article::getLastPurgeTimestamp, WikiPage::getLastPurgeTimestamp, and the related WikiPage::PURGE_* constants, deprecated in 1.29, were removed.
 * The Article::selectFields, Article::onArticleCreate, Article::onArticleDelete, and Article::onArticleEdit methods, deprecated in 1.24, were removed.
 * Installer::locateExecutable and Installer::locateExecutableInDefaultPaths were removed, use ExecutableFinder::findInDefaultPaths instead.
 * Several methods for returning lists of fields to select from the database have been deprecated in favor of similar methods that also return the tables to select from and the join conditions for those tables.
 * Block::selectFields → Block::getQueryInfo
 * RecentChange::selectFields → RecentChange::getQueryInfo
 * ArchivedFile::selectFields → ArchivedFile::getQueryInfo
 * LocalFile::selectFields → LocalFile::getQueryInfo
 * LocalFile::getCacheFields with a prefix no longer works
 * LocalFile::getLazyCacheFields with a prefix no longer works
 * OldLocalFile::selectFields → OldLocalFile::getQueryInfo
 * RecentChange::selectFields → RecentChange::getQueryInfo
 * Revision::userJoinCond → Revision::getQueryInfo( [ 'user' ] )
 * Revision::selectUserFields → Revision::getQueryInfo( [ 'user' ] )
 * Revision::pageJoinCond → Revision::getQueryInfo( [ 'page' ] )
 * Revision::selectPageFields → Revision::getQueryInfo( [ 'page' ] )
 * Revision::selectTextFields → Revision::getQueryInfo( [ 'text' ] )
 * Revision::selectFields → Revision::getQueryInfo
 * Revision::selectArchiveFields → Revision::getArchiveQueryInfo
 * User::selectFields → User::getQueryInfo
 * WikiPage::selectFields → WikiPage::getQueryInfo
 * Due to significant refactoring, method ContribsPager::getUserCond that had no access restriction has been removed.
 * Revision::setUserIdAndName was deprecated.
 * Access to TitleValue class properties was deprecated, the relevant getters should be used instead.
 * DifferenceEngine::getDiffBodyCacheKey is deprecated. Subclasses should override DifferenceEngine::getDiffBodyCacheKeyParams instead.
 * The deprecated MW_DIFF_VERSION constant was removed. DifferenceEngine::MW_DIFF_VERSION should be used instead.
 * Use of Maintenance::error( $err, $die ) to exit script was deprecated. Use Maintenance::fatalError instead.
 * Passing a ParserOptions object to OutputPage::parserOptions is deprecated.
 * Browser support for Opera 12 and older was removed. Opera 15+ continues at Grade A support.
 * The Block class will no longer accept usable-but-missing usernames for 'byText' or ->setBlocker. Callers should either ensure the blocker exists locally or use a new interwiki-format username like "iw>Example".
 * The following methods that get and set ParserOutput state are deprecated. Callers should use the new stateless $options parameter to ParserOutput::getText instead.
 * ParserOptions::getEditSection
 * ParserOptions::setEditSection
 * ParserOutput::getEditSectionTokens
 * ParserOutput::setEditSectionTokens
 * ParserOutput::getTOCEnabled
 * ParserOutput::setTOCEnabled
 * OutputPage::enableSectionEditLinks
 * OutputPage::sectionEditLinksEnabled
 * The public ParserOutput state fields $mTOCEnabled and $mEditSectionTokens are also deprecated.
 * The following methods and constants from the WatchedItem class were deprecated in 1.27 have been removed.
 * WatchedItem::getTitle
 * WatchedItem::fromUserTitle
 * WatchedItem::addWatch
 * WatchedItem::removeWatch
 * WatchedItem::isWatched
 * WatchedItem::duplicateEntries
 * WatchedItem::IGNORE_USER_RIGHTS
 * WatchedItem::CHECK_USER_RIGHTS
 * WatchedItem::DEPRECATED_USAGE_TIMESTAMP