MediaWiki 1.35/diq

MediaWiki 1.35 is the current stable long-term support release of MediaWiki. Consult the file for the full list of changes. It was deployed on Wikimedia Foundation wikis through incremental ""-branches starting 1 October 2019. The 1.35.0 stable release came out on 25 September 2020. Download or checkout the   branch in Git to follow this release. It will go end-of-life in September 2023.

New features

 * Special pages Special:EditPage, Special:PageHistory, Special:PageInfo, and Special:Purge have been created as shortcuts for each action. Special:EditPage/Foo redirects to title=foo&action=edit, with PageHistory, PageInfo, and Purge corresponding to &action= history, info, and purge respectively. When linked to, its subpage is used as the target. Otherwise, it displays a basic interface to allow the end user to specify the target manually (see ).
 * The form at "?action=watch" has a new dropdown list to support expiry dates for watchlist items (if is  ).

New bundled extensions
MediaWiki 1.35 bundled the extension, which provides a visual editing experience as an alternative to the traditional source editor. It will not be necessary to setup a separate instance of Parsoid, as it is built into MediaWiki core.

In addition and  are bundled. They force https links on your wiki, and add a tag and an api to allow editors to specify how templates should be invoked.

Action API changes

 * The  parameter of   has been deprecated. The API behaves the same with and without this parameter. It was previously used by  to partially disable the API if set to . Specifically, it would deny internal frontend requests carrying this parameter, whilst accepting other requests.
 * Integer-type parameters are now validated for syntax rather than being interpreted in surprising ways. For example, the following will now return a badinteger error:
 * "1.9" - formerly interpreted as "1"
 * " 1" - formerly interpreted as "1"
 * "1e1" - formerly interpreted as "1" or "10", depending on the PHP version
 * "1foobar" - formerly interpreted as "1"
 * "foobar" (formerly intepreted as "0") parameters. Ranges should be assumed to be enforced.
 * Many user-type parameters now accept a user ID, formatted like "#12345".
 * The  parameter used by all API modules now supports the value  . When specified, the API will return the 'assertanonfailed' error if the user is logged in.
 * action=edit now supports the 'baserevid' parameter for edit conflict detection, as an alternative to 'basetimestamp'. Note that self-conflicts will continue to be ignored if 'basetimestamp' is set, but not if only 'baserevid' is set.
 * A new module was added to change the content model of existing pages. Use action=changecontentmodel. Unlike Special:ChangeContentModel, the api module does not work for pages that do not already exist.
 * If is, the following API changes are made:
 * action=watch accepts a new 'expiry' parameter analagous to the expiry accepted by action=userrights, action=block, etc., except it must be no greater than, or an infinity value.
 * action=query&list=watchlistraw returns pages' watchlist expiry dates.
 * action=login will now return Failed rather than NeedToken on session loss.

Action API internal changes

 * The Action API now uses the Wikimedia\ParamValidator library for parameter validation, which brings some new features and changes. For the most part existing module code should work as it did before, but see subsequent notes for changes.
 * The values for all ApiBase PARAM_* constants have changed. Code should have been using the constants rather than hard-coding the values.
 * Several ApiBase PARAM_* constants have been deprecated, see the in-class documentation for details. Use the equivalent ParamValidator constants instead.
 * The value returned for 'upload'-type parameters has changed from WebRequestUpload to Psr\Http\Message\UploadedFileInterface.
 * Validation of 'user'-type parameters is more flexible. PARAM constants exist to specify the type of "user" allowed and to request UserIdentity objects rather than name strings. The default is to accept all types (name, IP, range, and interwiki) that were formerly accepted.
 * Maximum limits are no longer ignored in "internal mode".
 * The $paramName to ApiBase::handleParamNormalization should now include the prefix.
 * meta=siteinfo&siprop=interwikimap no longer reports language or extralanglink when is false.