Merge "tests: Use ::class for class name resolution"
[mediawiki.git] / RELEASE-NOTES-1.43
blob91dcbc6dc56b6989d4ad09ad4b8668f99e3154d0
1 = MediaWiki 1.43 =
3 == MediaWiki 1.43.0-PRERELEASE ==
5 THIS IS NOT A RELEASE YET
7 MediaWiki 1.43 is an alpha-quality development branch, and is not recommended
8 for use in production.
10 == Upgrading notes for 1.43 ==
11 Don't forget to always back up your database before upgrading!
13 See the file UPGRADE for more detailed per-version upgrade instructions from the
14 oldest supported upgrading version, MediaWiki 1.35.
16 Some specific notes for MediaWiki 1.43 upgrades are below:
18 * It is now necessary that the OpenSSL PHP extension is installed.
19 * …
21 For notes on 1.42.x and older releases, see HISTORY.
23 === Configuration changes for system administrators in 1.43 ===
25 * $wgBlockTargetMigrationStage, which was introduced in 1.42, is now deprecated
26   and has no effect.
27 * …
29 ==== New configuration ====
31 * (T13555) $wgParserEnableLegacyHeadingDOM - Defaults to `true`, can be set to
32   `false` to enable new, more accessible HTML markup for wikitext headings.
33   Note that each skin must also use the 'supportsMwHeading' option to allow it.
34   More information: https://www.mediawiki.org/wiki/Heading_HTML_changes
35   In a future release the new markup will become the default,
36   and later this option will be removed.
37 * (T12347) $wgEnableProtectionIndicators - Defaults to false, setting it to true
38   shows a lock icon indicator on protected pages.
39 * (T373480) $wgSortedCategories - Defaults to false, setting it to true will
40   sort the categories shown on article pages.  This is an experimental setting;
41   its future will depend on community adoption and feedback on the phab task
42   is welcome.
43 * …
45 ==== Changed configuration ====
47 * wgPageLinksSchemaMigrationStage – (T299947) This temporary setting, which
48   controls the database schema migration for the page links table, is now set
49   by default to write to both old and new data and read from the new data.
50 * wgFooterIcons – (T256190) The default "Powered by MediaWiki" button icon has
51   been updated to an SVG icon, and the footer icons are now wrapped as buttons
52   in HTML, rather than faking it within the icons themselves. You should adjust
53   any footer icons you provide or over-ride to match.
54 * The "error-json" channel, configurable via $wgDebugLogGroups, has been
55   removed. For structured logging, use the "error" channel directly instead.
56   Since MediaWiki 1.25, structured logging is supported via Monolog for all
57   channels, including the "error" channel. For silenced errors, you use the
58   "silenced-error" channel added in MediaWiki 1.42. (T193472)
59 * wgResourceLoaderUseObjectCacheForDeps - (T343492) This is now enabled by
60   default. This means ResourceLoader writes information to the MainStash
61   instead of a core database table, which can be set to a separate database
62   via wgMainStash. If you find issues, please drop a comment on T343492.
63   It is now deprecated and will be removed in MediaWiki 1.44.
64 * …
66 ==== Removed configuration ====
68 * wgSessionInsecureSecrets has been removed since OpenSSL is now a required
69   PHP extension.
70 * $wgTemplateLinksSchemaMigrationStage has been removed.
71 * $wgSamplingStatsdClient has been removed. It was introduced in MW 1.28 for
72   use in the Wikibase extension, but never used. The new StatsFactory service
73   should be used for new instrumentations, which already supports sampling.
74   Beware that sampling is generally not needed even at scale, and that sampling
75   does not significantly reduce runtime overhead, thus making it slow to
76   instrument very hot code even with built-in sampling.
77 * (T294397) The 'writeapi' userright, which controlled access to some API
78   modules, has been removed.
79 * …
81 === New user-facing features in 1.43 ===
83 * (T338341) Support reading XMP and EXIF from WebP files
84 * (T365636) Wiki's with wgAllowExternalImages enabled now detect urls
85   with AVIF, SVG and WebP images.
86 * (T242346) Special:TalkPage is a new special page that will redirect to the
87   associated talk namespace page, e.g. [[Special:TalkPage/Foo]] redirects to
88   [[Talk:Foo]]; [[Special:TalkPage/Project:Foo]] goes to [[Project talk:Foo]].
89   This allows for links by templates and tools without having to parse what
90   namespaces are valid and have associated talk pages.
91 * New preference: "Send password reset emails only when both email address
92   and username are provided."
93 * (T4085) Added new magic word {{USERLANGUAGE}} which returns the language code
94   of the interface set by the user.
95 * …
97 === New features for sysadmins in 1.43 ===
99 * …
101 === New developer features in 1.43 ===
103 * StatusValue class gained new method getMessages(): MessageSpecifier[],
104   allowing the errors to be inspected and displayed more easily, for example:
105     foreach ( $status->getMessages() as $msg ) {
106       if ( $msg->getKey() !== 'ignored-message' ) {
107         $this->getOutput()->addWikiMsg( $msg );
108       }
109     }
110 * The REST API framework now supports defining redirects in route definition
111   files. See MediaWiki\Rest\Handler\RedirectHandler for details.
112 * (T13555) Skins can enable the 'supportsMwHeading' option for new, more
113   accessible HTML markup for wikitext headings. MediaWiki's own styles and
114   scripts have been updated to support it, but your skin may also need updates.
115   More information: https://www.mediawiki.org/wiki/Heading_HTML_changes
116   A future release will emit deprecation warnings for skins with
117   'supportsMwHeading' set to false.
118 * The AuthPreserveQueryParams hook was added.
119 * (T219397) New `Language::formatDurationBetweenTimestamps()` function added
120   which takes two timestamps and a precision in order to calculate a more
121   accurate text representation of duration.
122 * Added an interactive mode to the install.php maintenance script.
123 * The ResourceLoaderModifyStartupSourceUrls hook was added.
124 * The AuthManagerFilterProviders hook was added.
125 * The AuthManagerVerifyAuthentication hook was added.
126 * The OutputPageRenderCategoryLink hook was added, as a replacement for the
127   deprecated OutputPageMakeCategoryLinks hook.
128 * PreAuthenticationProvider, PrimaryAuthenticationProvider, and
129   SecondaryAuthenticationProvider now receive a `canAlwaysAutocreate` flag in
130   the options of the `testUserForCreation` invocation. This flag is true when
131   the session provider is exempt from autocreate user permissions checks.
132 * The CentralIdLookup service gained the isOwned() method, which can be used
133   to check if a local username is reserved for a central user, even if a local
134   user account does not exist yet. This can be used by extensions to look
135   up information about the central user.
136 * (T251790) A Jest-based test suite has been introduced for testing front-end
137   code such as Vue components. Tests can be run via `npm run jest`, and test
138   files live in `tests/jest/`. See https://www.mediawiki.org/wiki/Jest
139   for more information.
140 * …
142 === External library changes in 1.43 ===
144 * The OOjs Router library has been merged into core and will be archived
145   upstream.
147 ==== New external libraries ====
149 * …
151 ===== New development-only external libraries =====
153 * (T251790) Some development-only external libraries have been added for the new
154   testing tools for front-end Vue components:
155  * Added jest and jest-environment-jsdom at v29.7.0.
156  * Added @vue/test-utils v2.4.6.
157  * Added @vue/vue3-jest v29.2.6.
158  * Added @babel/preset-env v7.25.4.
159  * Codex, already available via ResourceLoader, now has the npm versions, i.e.
160    @wikimedia/codex and @wikimedia/codex-icons, also installed for this testing.
161 * …
163 ==== Changed external libraries ====
165 * Updated codex, codex-design-tokens and codex-icons
166   from v1.3.6 to v1.13.0.
167 * Updated composer/semver from 3.4.0 to 3.4.2.
168 * Updated guzzlehttp/guzzle from 7.7.1 to 7.8.1.
169 * Updated jquery.i18n from 1.0.7 to 1.0.10.
170 * Updated pear/net_smtp from 1.11.1 to 1.12.1.
171 * Updated monolog/monolog from 2.9.2 to 2.9.3.
172 * Updated symfony/yaml from 5.4.35 to 5.4.39.
173 * Updated OOUI from v0.49.1 to v0.51.1.
174 * Updated wikimedia/json-codec from 3.0.1 to 3.0.2.
175 * Updated wikimedia/less.php from 4.2.1 to 5.1.1.
176 * Updated wikimedia/minify from 2.7.0 to 2.8.0.
177 * Updated vue from 3.3.9 to 3.4.27.
178 * Updated symfony/polyfill-php80 from 1.29.0 to 1.30.0.
179 * Updated symfony/polyfill-php81 from 1.29.0 to 1.30.0.
180 * Updated symfony/polyfill-php82 from 1.29.0 to 1.30.0.
181 * Updated symfony/polyfill-php83 from 1.29.0 to 1.30.0.
182 * …
184 ===== Changed development-only external libraries =====
186 * Updated doctrine/dbal from 3.7.2 to 3.8.4.
187 * Updated eslint-config-wikimedia from 0.26.0 to 0.27.0.
188 * Updated mediawiki/mediawiki-codesniffer from 43.0.0 to 44.0.0.
189 * Updated phpunit/phpunit from 9.6.16 to 9.6.19.
190 * Updated seld/jsonlint from 1.10.1 to 1.10.2.
191 * …
193 ==== Removed external libraries ====
195 * …
197 === Bug fixes in 1.43 ===
199 * When using the 'runMaintenance' method in a LoadExtensionSchemaUpdates hook
200   handler, only the script's class name is required, not its path. (T367918)
201 * QueryPage::recache() (used by the updateSpecialPages.php maintenance script)
202   no longer attempts to ignore database errors. (T278543)
203 * …
205 === Action API changes in 1.43 ===
207 * APIQueryUserInfo now returns null in the field registrationdate for users
208   created before December 2005 (their registration date was not recorded).
209 * …
211 === Action API internal changes in 1.43 ===
213 * …
215 === Languages updated in 1.43 ===
216 MediaWiki supports over 350 languages. Many localisations are updated regularly.
217 Below only new and removed languages are listed, as well as changes to languages
218 because of Phabricator reports.
220 * (T357853) Added unidirectional script conversion for Meitei to Bengali script.
221 * (T367377) Updated the autonym for Tai Nuea (tdd)
222 * (T354937, T362041) Added language support for Minnan (Traditional Han script)
223   (nan-hant).
224 * (T290657) Added language support for Levantine Arabic (apc).
225 * (T364291) Added language support for Musi, also known as Palembang (mui).
226 * (T364737) Added language support for Haryanvi (bgc).
227 * (T365365) Added language support for Chakma (ccp).
228 * (T367991) Added language support for Iban (iba).
229 * (T367688) Added language support for Interslavic (Latin) (isv-latn).
230 * (T370123) Added language support for Nupe (nup).
231 * (T371051) Added language support for Saint Lucian Creole (acf).
232 * (T354937, T370987) Added language support for Minnan (Pe̍h-ōe-jī)
233   (nan-latn-pehoeji).
234 * (T354937, T369899) Added language support for Minnan (Tâi-lô)
235   (nan-latn-tailo).
236 * (T375052) Added language support for Tigre (tig).
237 * …
239 === Breaking changes in 1.43 ===
241 * ErrorPageError public properties 'msg' and 'title' may now contain
242   any MessageSpecifier object, not just Message.
243 * Reset button functionality suppressReset() and $mShowReset from HTMLForm
244   was removed without replacement.
245 * UserGroupMembership::getGroupName(), deprecated in 1.38, and
246   UserGroupMembership::getGroupMemberName(), deprecated in 1.40, have
247   been removed.
248 * SerializedValueContainer::isUnified(), deprecated in 1.42, has been
249   removed.
250 * Parser::getFreshParser(), deprecated in 1.39, has been removed.
251 * ConfigFactory::getDefaultInstance(), deprecated since 1.27, has been
252   removed.
253 * wfGetLangObj(), deprecated since 1.41, has been removed in favor of
254   LanguageFactory::getLanguage().
255 * wfRemoveDotSegments(), deprecated in 1.39, has been removed.
256 * IReadableDatabase::getReplicaPos() has been removed without deprecation
257   as it's not used anywhere.
258 * ILoadBalancer::laggedReplicaUsed() has been moved to ILoadBalancerForOwner::
259   effectively making it internal.
260 * Define DB_MASTER, deprecated since 1.36, has been removed.
261 * ILoadBalancer::DB_MASTER, deprecated since 1.36, has been removed.
262 * Overriding MWException::getHTML(), ::getText(), ::getPageTitle(), and
263   ::reportHTML() in order to display custom exception messages is no
264   longer supported.
265 * In PageHandlerTestTrait, the newRouter() method was renamed to
266   newRouterForPageHandler() to avoid a conflict with a method of the same
267   name in RestTestTrait. Also, PageHandlerTestTrait is no longer marked as
268   "stable to use". It was marked this way by accident, the functionality it
269   provides is specific to certain handlers implemented in MediaWiki core.
270 * MediaWikiIntegrationTestCase::addCoreDBData(), deprecated since 1.41, has
271   been removed.
272 * wfUnpack(), deprecated since 1.42, has been removed in favor of
273   StringUtils::unpack().
274 * UIDGenerator, deprecated since 1.35, has been removed.
275 * TablePager::getBody(), final and deprecated since 1.24, has been removed.
276   Use ::getBodyOutput() or ::getFullOutput() instead.
277 * ImportableUploadRevisionImporter::downloadSource(), deprecated in 1.31, is now
278   private. Its only known external caller was removed in 1.40.
279 * The following methods in the User class have been removed:
280   * Deprecated in 1.33:
281     * User::isBlockedFrom()
282   * Deprecated in 1.34:
283     * User::isBlocked()
284   * Deprecated in 1.35:
285     * User::addGroup()
286     * User::getAllGroups()
287     * User::getGroups()
288     * User::getGroupMemberships()
289     * User::getImplicitGroups()
290     * User::getOption()
291     * User::removeGroup()
292   * Deprecated in 1.37:
293     * User::isBlockedFromCreateAccount()
294 * BotPassword::invalidateAllPasswordsForCentralId() and
295   BotPassword::removeAllPasswordsForCentralId(), deprecated in 1.37,
296   have been removed.
297 * Title::getBrokenLinksFrom(), deprecated in 1.42, has been removed.
298 * The $type parameter to Skin::getCopyright(), deprecated in 1.40, has been
299   removed.
300 * The module `mediawiki.icon`, deprecated in 1.42, has been removed.
301 * The `@vue/composition-api` module, a deprecated alias for `vue` since 1.41,
302   has been removed. Use `vue` directly.
303 * SiteConfiguration::extractVar() and ::extractGlobal(), deprecated in 1.41,
304   have been removed.
305 * Skin::footerLink(), deprecated in 1.40, has been removed.
306 * Skin::getAction(), deprecated in 1.39, has been removed.
307 * Title::getCdnUrls() and Title::purgeSquid(), deprecated in 1.35, have been
308   removed.
309 * The `mediawiki.pager.tablePager` module, deprecated in 1.38, has been
310   removed in favor of the more generic `mediawiki.pager.styles`.
311 * BagOStuff::setNewPreparedValues(), deprecated in 1.40, has been removed.
312 * Constructing MWHttpRequest objects now requires timeout and connectTimeout to
313   be set; this was deprecated in 1.35.
314 * Hooks that were run from SpecialContributions are now run from the parent,
315   ContributionsSpecialPage. The page passed in is a ContributionsSpecialPage
316   type, and documentation and type comparisons may need to be updated. Affected
317   hooks are: ContributionsBeforeMainOutputHook, ContributionsToolLinksHook,
318   SpecialContributions__getForm__filtersHook.
319 * Hooks that were run from ContribsPager are now run from the parent,
320   ContributionsPager. If a pager is passed in, it is a ContributionsPager type,
321   and documentation and type comparisons may need to be updated. Affected
322   hooks are: ContribsPager__reallyDoQueryHook, ContribsPager__getQueryInfoHook,
323   ContributionsLineEndingHook, SpecialContributions__formatRow__flagsHook.
324 * Hooks that were run from DeletedContribsPager are now run from the parent,
325   ContributionsPager. If a pager is passed in, it is a ContributionsPager type,
326   and documentation and type comparisons may need to be updated. Affected
327   hooks are: DeletedContribsPager__reallyDoQueryHook and
328   DeletedContributionsLineEndingHook.
329 * The public method ContributionsSpecialPage::getUserLinks has been made
330   protected. Although not marked @internal, the method was public to be called
331   from SpecialDeletedContributions (call now removed), and was not called from
332   anywhere else.
333 * DatabaseBlock::purgeExpired, deprecated since 1.38, has been removed.
334 * AbstractBlock::getPermissionsError, deprecated since 1.35, has been removed.
335 * IDatabase::namedLocksEnqueue() has been removed without deprecation.
336 * IDatabase::getTopologyRole() has been removed without deprecation.
337 * IDatabase::getTopologyBasedServerId() has been removed without deprecation.
338   Use IDatabase::getServerName() instead.
339 * IReadableDatabase::wasReadOnlyError() has been removed without deprecation.
340   Use IDatabase::isReadOnly() instead.
341 * IReadableDatabase::wasDeadlock() has been removed without deprecation.
342 * ILoadBalancer::getWriterIndex() has been removed without deprecation.
343   Use ServerInfo::WRITER_INDEX constant instead.
344 * MaintainableDBConnRef, deprecated since 1.39, has been removed.
345 * ILoadBalancer::reuseConnection(), deprecated since 1.39, has been removed.
346 * WikiPage::doDeleteArticleBatched, hard deprecated since 1.37, has been
347   removed.
348 * SpecialEmailUser::submit, deprecated since 1.41, has been removed.
349 * SpecialEmailUser::validateTarget, deprecated since 1.41, has been removed.
350 * SpecialEmailUser::getPermissionsError, deprecated since 1.41 has been
351   removed.
352 * SpecialBlock::getTargetAndType, deprecated since 1.36, has been removed.
353 * ApiQueryBlockInfoTrait::addBlockInfoToQuery(), deprecated since 1.42, has been
354   removed.
355 * Linker::makeExternalLink() has been deprecated in favor of
356   LinkRenderer::makeExternalLink(), which has a improved API to help phan's
357   SecurityCheckPlugin provide more accurate checks for escaping issues.
358 * Linker::makeHeadline(), Linker::generateTOC(), Linker::tocIndent(),
359   Linker::tocUnindent(), Linker::tocLine(), Linker::tocLineEnd(), and
360   Linker::tocList(), deprecated in 1.42, have been removed.
361 * Linker::formatComment(), Linker::formatLinksInComment(),
362   Linker::commentBlock(), and Linker::revComment(), deprecated in 1.38,
363   have been removed.
364 * UserCache::singleton(), deprecated in 1.43, now emits deprecation warnings.
365   Use MediaWikiServices::getInstance()->getUserCache() instead.
366 * DummyLinker has been removed. The former DummyLinker parameter
367   to the 'ImageBeforeProduceHTML' hook is now null.
368 * The following methods of IDatabase have been moved to internal interface
369   IDatabaseForOwner without deprecation. These methods are internal and
370   shouldn't be used outside of rdbms library:
371   - ::pendingWriteCallers()
372   - ::flushSession()
373   - ::lastDoneWrites()
374   - ::setTransactionListener()
375   - ::serverIsReadOnly()
376   - ::getPrimaryPos()
377   - ::pendingWriteQueryDuration()
378   - ::writesOrCallbacksPending()
379   - ::writesPending()
380   - ::primaryPosWait()
381 * IMaintainableDatabase::listViews(), deprecated since 1.42, has been removed.
382 * IMaintainableDatabase::truncate(), deprecated since 1.42, has been removed.
383 * IMaintainableDatabase::textFieldSize() was removed without deprecation.
384 * ReplicatedBagOStuff, deprecated since 1.42, has been removed.
385 * The 'replicaOnly' option to SqlBagOStuff has been removed without deprecation.
386   It existed for internal use by SqlBagOStuff only.
387 * Support for WinCache as local server cache has been removed, because WinCache
388   is not available for supported versions of PHP. The WinCacheBagOStuff class
389   has been removed. Use MediaWikiServices::getLocalServerObjectCache() instead,
390   or the CACHE_ACCEL type instead, which automatically selects APCu when
391   available.
392   The "wincache" cache type (e.g. to ObjectCache::getInstance, and in
393   "wg*CacheType" configuration) remains supported as an alias for CACHE_ACCEL.
394 * LockManager::sha1Base16Absolute(), has been removed without deprecation.
395 * The "options" parameter to User::createNew() and the $data parameter to
396   UserOptionsManager::loadUserOptions() were removed.
397 * `.list-style-image()` mixin from mediawiki.mixins.less, deprecated since 1.38,
398   has been removed.
399 * `.background-image()` mixin from mediawiki.mixins.less, deprecated since 1.38,
400   has been removed.
401 * IDatabase::nextSequenceValue(), deprecated since 1.30, was removed.
402 * $wgAPIRequestLog was removed without deprecation. Use "api" and "api-request"
403   wgDebugLogGroups channels or SPI instead.
404 * The setStats() method in MediaWiki\Rest\Router now expects a StatsFactory
405   rather than a StatsdDataFactoryInterface. The method has been marked @internal
406   and should not be called by extensions.
407 * All `@width-breakpoint-*` Less variables have been removed. Use
408   `@min-width-breakpoint-*`/`@max-width-breakpoint-*` instead.
409 * The MessageContent class, deprecated since 1.38, is now removed. This also
410   means that the Message::content() method is also removed.
411 * The following ParserOption methods, deprecated since 1.35, were removed:
412   - ::setAllowExternalImages()
413   - ::setAllowExternalImagesFrom()
414   - ::setEnableImageWhitelist()
415 * Sanitizer::removeHTMLtags(), deprecated since 1.38, has been removed.
416 * OutputPage::getCSPNonce(), deprecated since 1.35, has been removed.
417 * UserMailer::rfc822Phrase(), deprecated since 1.38, has been removed.
418 * QueryPage::getSQL(), deprecated since 1.39, has been removed. The replacement
419   QueryPage::getQueryInfo() is now abstract.
420 * update-keys.sql was removed. It is not recommended to install MediaWiki by
421   manually sourcing SQL files, but if you are doing this, run
422   `update.php --initial` instead of sourcing update-keys.sql.
423 * …
425 === Deprecations in 1.43 ===
427 * The methods StatusValue::getErrors() and StatusValue::getErrorsByType(),
428   as well as Status::getErrorsArray() and Status::getWarningsArray(), have
429   been deprecated in favor of new method StatusValue::getMessages().
430 * PermissionManager::getPermissionErrors() has been deprecated in favor
431   of getPermissionStatus().
432 * PermissionStatus::toLegacyErrorArray() is deprecated with no replacement.
433 * PermissionsError properties $errors and $permission are deprecated.
434   To display the error, throw it or use ->report().
435 * (T166010) All PHP code in MediaWiki is slowly being moved to be in a class
436   namespace as appropriate, so that we can use PSR-4 auto-loading, which will
437   speed up general code loading of MediaWiki. The old global namespace class
438   names are being left behind as deprecated aliases.
440   In this release of MediaWiki, XYZ classes now have a namespace and XYZ do
441   not yet (XYZ% done, up from 69% in MediaWiki 1.42.0). The following have newly
442   been moved:
443   - MediaWiki\Content:
444     - AbstractContent
445     - CodeContentHandler
446     - Content
447     - ContentHandler
448     - ContentModelChange
449     - CssContent
450     - CssContentHandler
451     - FallbackContent
452     - FallbackContentHandler
453     - FileContentHandler
454     - JavaScriptContent
455     - JavaScriptContentHandler
456     - JsonContent
457     - JsonContentHandler
458     - TextContent
459     - TextContentHandler
460     - WikitextContent
461     - WikitextContentHandler
462     - WikiTextStructure
463   - MediaWiki\Debug:
464     - DeprecationHelper
465     - MWDebug
466   - MediaWiki\Deferred:
467     - RefreshSecondaryDataUpdate
468   - MediaWiki\FileBackend:
469     - FileBackendGroup – FIXME: Should this be in Wikimedia\FileBackend instead?
470   - MediaWiki\Json:
471     - FormatJson
472   - MediaWiki\Language:
473     - Language
474     - LanguageCode
475     - ILanguageConverter
476     - LanguageConverter
477     - ConverterRule
478     - ReplacementArray
479   - MediaWiki\RCFeed:
480     - FormattedRCFeed
481     - IRCColourfulRCFeedFormatter
482     - JSONRCFeedFormatter
483     - MachineReadableRCFeedFormatter
484     - RCFeed
485     - RCFeedFormatter
486     - RedisPubSubFeedEngine
487     - UDPRCFeedEngine
488     - XMLRCFeedFormatter
489   - MediaWiki\RenameUser:
490     - RenameUserJob
491   - MediaWiki\Registration:
492     - ExtensionDependencyError
493     - ExtensionJsonValidationError
494     - ExtensionJsonValidator
495     - ExtensionProcessor
496     - ExtensionRegistry
497     - MissingExtensionException
498     - Processor
499     - VersionChecker
500   - MediaWiki\RevisionList:
501     - RevisionItem
502     - RevisionItemBase
503     - RevisionList
504     - RevisionListBase
505   - MediaWiki\Watchlist:
506     - ActivityUpdateJob
507     - ClearUserWatchlistJob
508     - ClearWatchlistNotificationsJob
509     - NoWriteWatchedItemStore
510     - WatchedItem
511     - WatchedItemQueryService
512     - WatchedItemQueryServiceExtension
513     - WatchedItemStore
514     - WatchedItemStoreInterface
515     - WatchlistExpiryJob
516   - MediaWiki\Xml:
517     - Xml
518     - XmlSelect
519   - Wikimedia\FileBackend:
520     - FileBackend
521   - Wikimedia\Http:
522     - MultiHttpClient
523   - Wikimedia\Message:
524     - MessageSpecifier
525   - Wikimedia\ObjectCache:
526     - APCUBagOStuff
527     - BagOStuff
528     - CachedBagOStuff
529     - EmptyBagOStuff
530     - HashBagOStuff
531     - IStoreKeyEncoder
532     - MediumSpecificBagOStuff
533     - MemcachedBagOStuff
534     - MemcachedPeclBagOStuff
535     - MemcachedPhpBagOStuff
536     - MultiWriteBagOStuff
537     - RESTBagOStuff
538     - RedisBagOStuff
539     - WinCacheBagOStuff
540 * MessageCache::get() with $language other than Language or null is
541   deprecated and emits deprecation warnings. For high-level access,
542   use wfMessage() or RequestContext::msg() instead.
543 * Manually constructing a Language object, deprecated in 1.35, now emits
544   deprecation warnings. Use LanguageFactory instead.
545 * MediaWiki\Languages\Data\Names::$names is deprecated.
546 * SearchEngineConfig::getConfig() has been deprecated, use DI with
547   ServiceOptions to inject the required options.
548 * ObjectCache::isDatabaseId() and ::getLocalClusterInstance() have been
549   deprecated. Use their equivalents in ObjectCacheFactory.
550 * Using the "post" source in parameter declarations returned from
551   Handler::getParamSettings() is deprecated, use "body" instead.
552 * ISQLPlatform::tableNamesN() is now deprecated.
553 * The implementation in SQLPlatform of ISQLPlatform::tableNames(), deprecated in
554   MediaWiki 1.39, now emits deprecation warnings.
555 * Title::getTitleProtection(), deprecated in 1.37, now emits warnings. You can
556   use RestrictionStore::getCreateProtection() instead.
557 * Title::loadRestrictions(), deprecated in 1.37, now emits warnings.
558 * Title::flushRestrictions(), deprecated in 1.37, now emits warnings.
559 * Title::getPageViewLanguage(), deprecated in 1.42, now emits warnings.
560 * wfUrlProtocols(), deprecated in 1.39, now emits warnings.
561 * wfGetServerUrl(), deprecated in 1.39, now emits warnings.
562 * wfExpandIRI(), deprecated in 1.39, now emits warnings.
563 * The following methods, previously deprecated, now emit deprecation warnings:
564   - ContentHandler::getDefaultModelFor(), deprecated since 1.33
565   - ContentHandler::getAllContentFormats(), deprecated since 1.35
566   - ContentHandler::getContentModels(), deprecated since 1.35
567   - ContentHandler::getForContent(), deprecated since 1.35
568   - ContentHandler::getForModelID(), deprecated since 1.35
569   - ContentHandler::getContentText(), deprecated since 1.37
570 * Passing a Message argument to OutputPage::setPageTitle(), which was
571   deprecated in 1.41, now emits warnings.
572 * OutputPage::showFatalError() is deprecated, use showErrorPage() instead.
573 * OutputPage::showPermissionsErrorPage() is deprecated,
574   use showPermissionStatus() instead.
575 * OutputPage::formatPermissionsErrorMessage(), deprecated since 1.36,
576   now emits deprecation warnings. Use formatPermissionStatus() instead.
577 * OutputPage::setCategoryLinks() has been deprecated and emits deprecation
578   warnings.  Use ::addCategoryLinks() instead.
579 * LoadBalancer::getConnectionRef(), deprecated since 1.39, now emits deprecation
580   warnings. Use ::getConnection() instead.
581 * DBAccessObjectUtils::getDBOptions() is deprecated, use
582   SelectQueryBuilder::recency() instead.
583 * IDatabase::lockForUpdate is deprecated, use
584   SelectQueryBuilder::acquireRowLocks instead.
585 * wfGetUrlUtils() is deprecated; instead, get a UrlUtils from services.
586 * DerivedPageDataUpdater::getPreparedEdit(), provided for back-compatibility, is
587   now deprecated; use the getters directly, instead.
588 * AuthManager::forcePrimaryAuthenticationProviders(), provided for back-
589   compatibility, is now deprecated.
590 * WikiPage::hasDifferencesOutsideMainSlot(), provided as a stop-gap before
591   refactoring to support MCR, is now deprecated.
592 * ChangesList::getTimestamp() has been deprecated; use ::revDateLink() instead.
593 * RecentChange::doMarkPatrolled() is deprecated, use
594   RecentChange::markPatrolled() instead.
595 * LogFormatter::newFromRow() and LogFormatter::newFromEntry(), deprecated since
596   1.42, now emit deprecation warnings.
597 * LinksUpdate::getAddedLinks(), ::getRemovedLinks(), deprecated since 1.38, now
598   emit deprecation warnings.
599 * TitleLinksTable::getTitleArray(), deprecated since 1.38, now emits deprecation
600   warnings.
601 * SiteConfig::variants() has been deprecated; use ::variantsFor().
602 * ObjectCache::$instances and ::getInstance() have been deprecated; instead, use
603   ObjectCacheFactory::getInstance().
604 * WANObjectCache::clearLastError() and BagOStuff::clearLastError have been hard
605   deprecated, use ::watchErrors() together with ::getLastErrors() instead.
606 * BagOStuff::getSegmentationSize() and ::getSegmentedValueMaxSize() no longer
607   have any usage. The subclass' method in MediumSpecificBagOStuff overrides also
608   have no usage as well.
609 * ApiBase::errorArrayToStatus() is deprecated with no replacement.
610 * ApiTestCase::setExpectedApiException() has been deprecated; instead, use
611   ::expectApiErrorCode() to test error codes instead of messages.
612 * ApiPageSet::getTitles(), ApiPageSet::getGoodTitles(),
613   ApiPageSet::getMissingTitles(), ApiPageSet::getGoodAndMissingTitles(),
614   ApiPageSet::getRedirectTitles() and ApiPageSet::getSpecialTitles, deprecated
615   since 1.37, now emit deprecation warnings.
616 * QueryPage::setDBLoadBalancer() and ::getDBLoadBalancer() have been deprecated,
617   use QueryPage::setDatabaseProvider() or ::getDatabaseProvider() instead.
618 * User::isBlockedGlobally(), deprecated since 1.40, now emits deprecation
619   warnings.
620 * User::isBlockedFromEmailuser() and User::canSendEmail(), deprecated since
621   1.41, now emit deprecation warnings.
622 * wfMergeErrorArrays() has been deprecated.
623 * User::whoIs() and User::whoIsReal(), have been deprecated.
624 * UserCache class and MediaWikiServices::getUserCache(), have been deprecated.
625 * JsonUnserializable and related classes have been renamed to JsonDeserializable
626   to make it clearer that they're related to converting serialized content back
627   into JSON, rather than stating that things are not representable in JSON. The
628   previous class names have been left behind as deprecated aliases:
629    - JsonUnserializable -> JsonDeserializable
630    - JsonUnserializableTrait -> JsonDeserializableTrait
631    - JsonUnserializer -> JsonDeserializer
632   Additionally, JsonCodec's unserialize() and unserializeArray() methods have
633   also been renamed to deserialize() and deserializeArray(), with the old names
634   deprecated.
635 * In the REST framework, the the BodyValidator interface and all functionality
636   related to it are deprecated. They have been replaced by
637   Handler::getBodyParamSettings() and Handler::parseBodyData(). The following
638   interfaces, classes, and methods are affected:
639   - interface BodyValidator
640   - class JsonBodyValidator
641   - class NullValidator
642   - function Handler::getBodyValidator
643   - function Validator::validateBody
644 * StatusValue will emit deprecation warnings when an error is given as
645   a MessageSpecifier combined with a parameters array, which is usually
646   a mistake, as the parameters have always been ignored.
647 * In StatusValue::replaceMessage(), ::hasMessage() and ::hasMessagesExcept()
648   passing MessageSpecifier or MessageValue as $source has been deprecated.
649 * PageArchive::undeleteAsUser, deprecated since 1.35, now emits deprecation
650   warnings.
651 * DatabaseBlock::getQueryInfo() and DatabaseBlock::getRangeCond() are
652   deprecated and emit deprecation warnings. Use the equivalent methods in
653   DatabaseBlockStore.
654 * DatabaseBlockStore::getReadStage() and ::getWriteStage() are deprecated.
655   Use the new schema unconditionally.
656 * UserOptionsManager::resetOptions(), ::listOptionKinds and ::getOptionKinds are
657   deprecated and will emit deprecation warnings. Use the corresponding methods
658   in PreferencesFactory and UserOptionsManager::resetOptionsByName().
659 * The `i18n-all-lists-margins` and `interface-message-box` module of SkinModule
660   are deprecated. The former has been merged into the `elements` module, the
661   latter has no required replacement. See JavaScript console for instructions.
662 * ParsoidOutputAccess and all of its methods have been deprecated.  Use
663   ParserOutputAccess with ParserOptions::setUseParsoid() instead.
664 * ParserOutput::addJsConfigVars(), deprecated since 1.38, now emits deprecation
665   warnings. Use ParserOutput::setJsConfigVar() instead.
666 * To support a future change allowing serializing of MessageValue objects
667   as JSON, the methods MessageValue::objectParams(), Message::objectParams()
668   and Message::objectParam() are deprecated. The UserGroupMembershipParam
669   class and the ParamType::OBJECT constant are likewise deprecated.
670 * The Less mixin .column-break-after-avoid() is deprecated. Use just the
671   CSS rule `break-after: avoid-column;` instead now.
672 * The following method are deprecated; instead call the appropriate
673   constructor method in PageRestHelperFactory with the appropriate
674   initialization arguments:
675   * HtmlOutputRendererHelper::init()
676   * HtmlMessageOutputHelper::init()
677   * HtmlInputTransformHelper::init()
678   Similarly, calling the constructor method in PageRestHelperFactory
679   without the appropriate initialization arguments is now deprecated.
680 * HTMLForm methods getPreText, setPreText, addPreText, getPostText,
681   setPostText, addPostText, getHeaderText, setHeaderText, addHeaderText,
682   getFooterText, setFooterText and addFooterText, deprecated since 1.38, now
683   emit deprecation warnings.
684 * FormSpecialPage methods preText and postText, deprecated since 1.38, now
685   emit deprecation warnings.
686 * EditPage::internalAttemptSave() is deprecated as part of cleaning up how
687   edits are saved, see T157658 for details.
688 * The MessageCache::get hook, deprecated since 1.41, now emits deprecation
689   warnings.
690 * Twelve deprecated properties of OutputPage now will emit warnings; their
691   relevant getters or setters should be used instead:
692   * mCategoryLinks       - getCategoryLinks() and setCategoryLinks()
693   * mCategories          - getCategories()
694   * mIndicators          - getIndicators() and setIndicators()
695   * mHeadItems           - getHeadItemsArray(), hasHeadItem(), addHeadItem(),
696                            and addHeadItems()
697   * mModules             - getModules() and addModules()
698   * mModuleStyles        - getModuleStyles() and addModuleStyles()
699   * mJsConfigVars        - getJsConfigVars() and addJsConfigVars()
700   * mTemplateIds         - getTemplateIds()
701   - mEnableClientCache   - Set with enableClientCache() and disableClientCache()
702   - mNewSectionLink      - Get with showNewSectionLink()
703   - mHideNewSectionLink  - Set with forceHideNewSectionLink()
704   - mNoGallery           - getNoGallery()
705 * mw.cookie.getCrossSite() has been deprecated due to the removal of
706   $wgUseSameSiteLegacyCookies in MW 1.42. Use mw.cookie.get().
707 * The 'help' key in HTMLForm descriptors is deprecated. Use the 'help-raw'
708   key instead.
709 * ImageGalleryBase::setWidths() and ::setHeights() will now emit a deprecation
710   warning if they are called without ImageGalleryBase::setParser() having been
711   called.  Please set the parser appropriately when using the image gallery.
712 * The hook OutputPageMakeCategoryLinks is deprecated. Use the new hook
713   OutputPageRenderCategoryLink instead.
714 * …
716 === Other changes in 1.43 ===
718 * Class aliases to support the old PHPUnit 4 style un-namespaced `PHPUnit_`
719   classes (such as PHPUnit_Framework_Error) have been removed.
720 * [Temporary accounts] If $wgAutoCreateTempUser is enabled, then MediaWiki
721   will create a temporary account and log the user in for unsuccessful edit
722   attempts and null edits, in addition to edits that change content. This is
723   a change from the previous paradigm, where temporary accounts were created
724   only for successful edits. This change is done to support better logging
725   support and moderation, to ensure that hooks run in a pre-save context have
726   a user object to associate log entries and other actions with.
727 * Several entries have been removed from the default list of interwikis used
728   when installing new wikis. This does not affect existing wikis.
729 * User auto-creations are now performed as the target user instead of
730   anonymous IP user.
731 * [Temporary accounts] T359043 Temporary accounts for anonymous edits are
732   enabled in DevelopmentSettings.php. To disable the feature, set
733   `$wgAutoCreateTempUser['enabled'] = false;` in LocalSettings.php
734 * Corrected the interpretation of empty arrays in extension configuration when
735   the default value is null. Previously, an empty array specified by the
736   administrator would transform into the default null value. It now
737   appropriately retains its empty array state.
738 * (T362536) Exempted "deletedhistory", "deletedtext", and "viewsuppressed"
739   rights from namespace protection ($wgNamespaceProtection) since that's
740   only meant to prevent write actions.
741 * Image captions are no longer trimmed.
742 * 'SpecialPasswordResetOnSubmit' hook handlers can now receive both the
743   username and the email provided by the user, instead of only one of them.
744 * …
746 == Compatibility ==
748 MediaWiki 1.43 requires PHP 8.1.0 or later and the following PHP extensions:
750 * ctype
751 * dom
752 * fileinfo
753 * iconv
754 * intl
755 * json
756 * mbstring
757 * openssl
758 * xml
760 MariaDB is the recommended database software. MySQL, PostgreSQL, or SQLite can
761 be used instead, but support for them is somewhat less mature.
763 The supported versions are:
765 * MariaDB 10.3 or higher
766 * MySQL 5.7.0 or higher
767 * PostgreSQL 10 or later
768 * SQLite 3.8.0 or later
770 == Online documentation ==
771 Documentation for both end-users and site administrators is available on
772 MediaWiki.org, and is covered under the GNU Free Documentation License (except
773 for pages that explicitly state that their contents are in the public domain):
775   <https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation>
777 == Mailing list ==
778 A mailing list is available for MediaWiki user support and discussion:
780   <https://lists.wikimedia.org/postorius/lists/mediawiki-l.lists.wikimedia.org/>
782 A low-traffic announcements-only list is also available:
784   <https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/>
786 It's highly recommended that you sign up for one of these lists if you're
787 going to run a public MediaWiki, so you can be notified of security fixes.
789 == IRC help ==
790 There's usually someone online in #mediawiki on irc.libera.chat.