Design Systems Team/Current Status

Basic Vue.js support in MediaWiki
✅

Vue.js is now shipped as part of MediaWiki core. JS code in skins and extensions can  from ResourceLoader just like any other module. Single-file components ( files) are supported via ResourceLoader. See here for guidelines about using Vue.js within MediaWiki.

Development of library of Codex Vue components
Codex contains a library of Vue components (as well as design tokens, icons, and other design system assets) and is under active development. Documentation for Codex can be found here.


 * Codex is currently in an early stage and breaking changes are still possible
 * Many components are still being developed; teams may need to supplement Codex components with custom components suitable for their needs. Check out the list of components that we plan to add to Codex.
 * This is an open-source project and contribution is welcomed

To learn more about Codex, check out:


 * Phabricator workboard (see the Design Systems Team workboard for sorted and prioritized tasks)
 * Code (or GitHub mirror)
 * Live demo site

Modern user interfaces for all users
Codex components are currently only available when modern JavaScript is available and once JavaScript has loaded, which would exclude users of older browsers. We would like to find a way to make user interfaces built with Codex work for these users as well.


 * See timeline for current status

Design and define design tokens
Design tokens are the smallest pieces of our design system — specifically, they are named entities that store visual design attributes. We use them in place of hard-coded values (such as hex values for color or pixel values for spacing) in order to maintain a scalable and consistent visual system for UI development.

Support for ES6 across MediaWiki
MediaWiki is using Vue 3, which dropped support for IE11. Features using Vue.js should ensure they are only delivered to modern browsers by setting  in their module definitions.
 * Developers of skins and extensions are encouraged to start using ES6 features in their Vue.js code now; Wikimedia's eslint-config rules include a preset for  that will be useful here.
 * This is in alignment with current guidelines about how to support legacy browsers like IE11 – in general new JS features should not target these browsers; if they must be supported, a server-rendered fallback should be defined.
 * Support for ES6 in gadgets is currently limited due to lack of support in the JS syntax checker. See T75714 for more information.

Vue 2 to Vue 3 Migration
T289017

The provided copy of Vue has been upgraded to the Vue 3 Migration Build. By default, the library will still behave in alignment with the Vue 2 API, but users can opt-in to the Vue 3 behavior by setting appropriate compatibility flags in their code.


 * Teams writing new Vue features should opt-in to Vue 3 behavior starting now.
 * Teams maintaining existing features (written for Vue 2 originally) should start planning their migrations.
 * Eventually the compatibility build will be removed (T289105), and all Vue code must be made Vue 3 compatible.