for (;;);{"error":null,"payload":{"timeline":"\u003cdiv class=\"phui-timeline-older-transactions-are-hidden\" data-sigil=\"show-older-block\"\u003eThere are a very large number of changes, so older changes are hidden. \u003ca href=\"\/transactions\/showolder\/PHID-TASK-o47oln57tv4tbvxqwo62\/?after=5766561&quoteTargetID=UQ0_1&quoteRef=T241180\" data-mustcapture=\"1\" data-sigil=\"show-older-link\"\u003eShow Older Changes\u003c\/a\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_242\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/all4nmu7r2zy4tkzylqf\/PHID-FILE-2vmllqw3gk3opezv5lar\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jan_Dittrich\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5766561\" id=\"5766561\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_241\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jan_Dittrich\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_0\"\u003eJan_Dittrich\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5766561\" data-sigil=\"has-tooltip\" data-meta=\"0_240\"\u003e\u003cspan class=\"screen-only\"\u003eDec 30 2019, 8:14 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-12-30 08:14:30 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_238\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_239\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_87\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eWhat is also in vue\u2019s favor but something that is not highlighted in the RFC is that the documentation is very good. This does not only mean comprehensive and not wrong, but also that there are different types of documentation for different usecases (Onboarding, General Learning, Reference). This was one of the key points when some colleagues and me were thinking about a new framework at WMDE. A lot of people come from PHP or OOUI rather than from other MVVM-frameworks. Thus, a good documentation which \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003equickly shows people what the framework is about\u003c\/a\u003e, is important. Since the js file of vue is sufficient, people can quickly try it out what the documentation tells them (there are also embedded examples, but maybe you want to try in a mediawiki-context or whatever)\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_246\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/all4nmu7r2zy4tkzylqf\/PHID-FILE-2vmllqw3gk3opezv5lar\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jan_Dittrich\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5766563\" id=\"5766563\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_244\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-heart-1 phui-timeline-token\" data-meta=\"0_245\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jan_Dittrich\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_88\"\u003eJan_Dittrich\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5766563\" data-sigil=\"has-tooltip\" data-meta=\"0_243\"\u003e\u003cspan class=\"screen-only\"\u003eDec 30 2019, 8:14 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-12-30 08:14:39 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_249\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/xgwhe457x2mpoape27fc\/PHID-FILE-xstukxq53ilthb4afahd\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/santhosh\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5766660\" id=\"5766660\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_248\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/santhosh\/\" class=\"phui-handle handle-availability-partial phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_89\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e santhosh\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5766660\" data-sigil=\"has-tooltip\" data-meta=\"0_247\"\u003e\u003cspan class=\"screen-only\"\u003eDec 30 2019, 9:17 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-12-30 09:17:25 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_252\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ied4uhepf36ypa3nofxt\/PHID-FILE-3wexu5vn7ik2tafjyzdk\/profile-profile-baselogo135.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Base\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5767471\" id=\"5767471\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_251\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Base\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_90\"\u003eBase\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5767471\" data-sigil=\"has-tooltip\" data-meta=\"0_250\"\u003e\u003cspan class=\"screen-only\"\u003eDec 30 2019, 7:32 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2019-12-30 19:32:43 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_257\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/2zz2qufv676bzdu6xl35\/PHID-FILE-u2exw2yza7wcs3xhtrry\/4eb4f3-alphanumeric_lato-white_A.png-0%2C0%2C0%2C0.3.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/abi_\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5770100\" id=\"5770100\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_254\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-heart-1 phui-timeline-token\" data-meta=\"0_255\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/abi_\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_91\"\u003eabi_\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5770100\" data-sigil=\"has-tooltip\" data-meta=\"0_253\"\u003e\u003cspan class=\"screen-only\"\u003eJan 2 2020, 6:59 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-02 06:59:44 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_256\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/abi_\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_92\"\u003eabi_\u003c\/a\u003e subscribed.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_260\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/uvuvpzke6akpdmtaum6m\/PHID-FILE-nojnhpdwsdztlxi3cgpa\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/KartikMistry\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5770102\" id=\"5770102\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_259\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/KartikMistry\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_93\"\u003eKartikMistry\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5770102\" data-sigil=\"has-tooltip\" data-meta=\"0_258\"\u003e\u003cspan class=\"screen-only\"\u003eJan 2 2020, 7:02 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-02 07:02:32 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_263\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/sz5c2ymwsti7lllv37fb\/PHID-FILE-nw6x4whb5r5kwvduhbar\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Pginer-WMF\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5770166\" id=\"5770166\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_262\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Pginer-WMF\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_94\"\u003ePginer-WMF\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5770166\" data-sigil=\"has-tooltip\" data-meta=\"0_261\"\u003e\u003cspan class=\"screen-only\"\u003eJan 2 2020, 7:51 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-02 07:51:24 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_267\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/vkbdrif2qx4aoarbhmbr\/PHID-FILE-wgm76sunyarnnrruhqyb\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/alexhollender_WMF\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5770973\" id=\"5770973\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_265\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-medal-3 phui-timeline-token\" data-meta=\"0_266\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/alexhollender_WMF\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_95\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e alexhollender_WMF\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5770973\" data-sigil=\"has-tooltip\" data-meta=\"0_264\"\u003e\u003cspan class=\"screen-only\"\u003eJan 2 2020, 2:49 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-02 14:49:56 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_270\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/qg6iwggo535pagkoqbkr\/PHID-FILE-pj4bbpforckskr5bm42m\/alphanumeric_aleo-white_W.png-_ce9793-255%2C255%2C255%2C0.4.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/WMDE-leszek\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5777298\" id=\"5777298\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_269\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/WMDE-leszek\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_96\"\u003eWMDE-leszek\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5777298\" data-sigil=\"has-tooltip\" data-meta=\"0_268\"\u003e\u003cspan class=\"screen-only\"\u003eJan 6 2020, 9:16 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-06 09:16:57 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_273\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/l2cg2zimvt2uq6xna6zg\/PHID-FILE-it2g7whiwxxkzdfzans5\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Lucas_Werkmeister_WMDE\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5778644\" id=\"5778644\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_272\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Lucas_Werkmeister_WMDE\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_97\"\u003eLucas_Werkmeister_WMDE\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5778644\" data-sigil=\"has-tooltip\" data-meta=\"0_271\"\u003e\u003cspan class=\"screen-only\"\u003eJan 6 2020, 6:11 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-06 18:11:15 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_278\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/2l7uv4x2vztmhfegadod\/PHID-FILE-jme7mgcgolydsjpf5clz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/awight\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5780771\" id=\"5780771\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_275\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-wmf-1 phui-timeline-token\" data-meta=\"0_276\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/awight\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_98\"\u003eawight\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5780771\" data-sigil=\"has-tooltip\" data-meta=\"0_274\"\u003e\u003cspan class=\"screen-only\"\u003eJan 7 2020, 8:39 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-07 08:39:34 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_277\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/awight\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_99\"\u003eawight\u003c\/a\u003e subscribed.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_282\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/4dvz3wjifcjxlo6c5nne\/PHID-FILE-xhjv3luiq35gjml3rsyv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/gabriel-wmde\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5782450\" id=\"5782450\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_280\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-heart-1 phui-timeline-token\" data-meta=\"0_281\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/gabriel-wmde\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_100\"\u003egabriel-wmde\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5782450\" data-sigil=\"has-tooltip\" data-meta=\"0_279\"\u003e\u003cspan class=\"screen-only\"\u003eJan 7 2020, 4:05 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-07 16:05:54 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_285\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/4dvz3wjifcjxlo6c5nne\/PHID-FILE-xhjv3luiq35gjml3rsyv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/gabriel-wmde\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5782472\" id=\"5782472\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_284\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/gabriel-wmde\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_101\"\u003egabriel-wmde\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5782472\" data-sigil=\"has-tooltip\" data-meta=\"0_283\"\u003e\u003cspan class=\"screen-only\"\u003eJan 7 2020, 4:09 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-07 16:09:53 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_288\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3b2u6t3rpqitrnep34og\/PHID-FILE-jphtzkuxubpx5bfnxwqv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Pablo-WMDE\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5783307\" id=\"5783307\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_287\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Pablo-WMDE\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_102\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Pablo-WMDE\u003c\/a\u003e mentioned this in \u003ca href=\"\/T199004\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_103\"\u003eT199004: RFC: Add a frontend build step to skins\/extensions to our deploy process\u003c\/a\u003e.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5783307\" data-sigil=\"has-tooltip\" data-meta=\"0_286\"\u003e\u003cspan class=\"screen-only\"\u003eJan 7 2020, 6:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-07 18:52:02 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_299\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3ndsxtl44eofytwep42p\/PHID-FILE-4ybkrghfwjvx4ndzbgkv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/kchapman\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-yellow \" href=\"\/badges\/view\/21\/\" data-sigil=\"has-tooltip\" data-meta=\"0_297\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-users\" data-meta=\"0_298\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5789742\" id=\"5789742\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_296\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_105\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5789742\" data-sigil=\"has-tooltip\" data-meta=\"0_295\"\u003e\u003cspan class=\"screen-only\"\u003eJan 9 2020, 2:56 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-09 14:56:31 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_293\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_294\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_104\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_1\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e are you okay with this going on last call after the TechCom meeting next week?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_310\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bcjpua4r57wx43zxfghi\/PHID-FILE-he7vv2keyzoo67ipt2um\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/egardner\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/22\/\" data-sigil=\"has-tooltip\" data-meta=\"0_308\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-graduation-cap\" data-meta=\"0_309\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5789763\" id=\"5789763\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_307\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_106\"\u003eegardner\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5789763\" data-sigil=\"has-tooltip\" data-meta=\"0_306\"\u003e\u003cspan class=\"screen-only\"\u003eJan 9 2020, 3:00 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-09 15:00:13 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_304\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_305\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_107\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_2\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@kchapman\u003c\/span\u003e\u003c\/a\u003e I assume that after Last Call, there is some kind of official vote on whether or not to adopt a given proposal \u2013\u00a0is this correct?\u003c\/p\u003e\n\n\u003cp\u003eI'm not seeing the kinds of questions or disagreements that would necessitate keeping this RFC in the discussion phase longer, so I'm fine to move things forward.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_319\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/myddkk65ayu6zrphr37o\/PHID-FILE-nmzwbv5k56wl4j7oqv5b\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Izno\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5790160\" id=\"5790160\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_318\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Izno\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_109\"\u003eIzno\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5790160\" data-sigil=\"has-tooltip\" data-meta=\"0_317\"\u003e\u003cspan class=\"screen-only\"\u003eJan 9 2020, 5:14 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-09 17:14:10 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_315\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_316\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_108\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eWhat discussion has been held regarding the fact we have multiple other Javascript libraries (some mentioned in the description) in use and\/or is this framework intended to deprecate those? If it, what has been discussed about the process? For example, Jquery.ui is still in use, while that was on-paper deprecated some long time ago.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_329\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ahnkehb5yzydqcgkmqra\/PHID-FILE-jwc6m4xc2qoc7jfj2v5y\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/stjn\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5797821\" id=\"5797821\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_328\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/stjn\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_111\"\u003estjn\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5797821\" data-sigil=\"has-tooltip\" data-meta=\"0_327\"\u003e\u003cspan class=\"screen-only\"\u003eJan 13 2020, 3:13 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-13 15:13:47 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_325\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_326\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_110\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eVue.js is great and, from what I\u2019ve heard, has a better community in comparison to others, but one can only hope that this means the adoption of it \u003cem\u003ein advanced interfaces that benefit from its features\u003c\/em\u003e, not in everything that requires some JS to work. The prospect of not being able to edit or read stuff, like you already can\u2019t with big Wikidata items, because of the increased costs of JavaScript execution won\u2019t be exactly welcoming to people from developing countries, for example.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_340\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ms665yc73j6nadjitytk\/PHID-FILE-mocohumlrcbe2lcuplml\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Anomie\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/5\/\" data-sigil=\"has-tooltip\" data-meta=\"0_338\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_339\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5798663\" id=\"5798663\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_337\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Anomie\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_113\"\u003eAnomie\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5798663\" data-sigil=\"has-tooltip\" data-meta=\"0_336\"\u003e\u003cspan class=\"screen-only\"\u003eJan 13 2020, 5:36 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-13 17:36:32 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_334\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_335\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_112\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote\u003e\u003cp\u003eAdditionally, Vue.js has been used successfully in production by Wikidata for several years; \u003ca href=\"https:\/\/wikitech.wikimedia.org\/wiki\/WMDE\/Wikidata\/SSR_Service\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eWMDE is currently experimenting with the use of server-side rendering\u003c\/a\u003e for a new feature.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI'm a bit concerned by the fact that this is experimental, and that it requires an external service to function. The service linked in that page there seems to be extremely bespoke, it's not clear it supports anything other than Wikibase's termbox.\u003c\/p\u003e\n\n\u003cp\u003eOne of the strengths of Wikipedia and MediaWiki is that they largely function when in-browser JavaScript is unavailable. This makes it seem like continuing that is not a priority, and will require complex setup for any wiki that wants to try to do so.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5797821\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_3\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5797821\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/stjn\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_4\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@stjn\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eVue.js is great and, from what I\u2019ve heard, has a better community in comparison to others, but one can only hope that this means the adoption of it \u003cem\u003ein advanced interfaces that benefit from its features\u003c\/em\u003e, not in everything that requires some JS to work. The prospect of not being able to edit or read stuff, like you already can\u2019t with big Wikidata items, because of the increased costs of JavaScript execution won\u2019t be exactly welcoming to people from developing countries, for example.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThe wording here makes me suspect that everything that has been converted to OOUI (and everything where that was intended but not yet gotten around to) would be converted to this, even though most of it really doesn't need much JS fanciness. The best I hope for is that they'll take a "prerendering" approach (i.e. build-time generation of the server-side HTML) rather than "\u003ca href=\"https:\/\/www.reddit.com\/r\/webdev\/comments\/6gscso\/graceful_degradationprogressive_enhancement_and\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewe don't care about non-JS users anymore\u003c\/a\u003e" or a server-side rendering nodejs service.\u003c\/p\u003e\n\n\u003cp\u003eI'm struck by a quote I found when briefly researching the ability of vue.js generically to not cause this problem:\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"https:\/\/github.com\/chrisvfritz\/prerender-spa-plugin\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/chrisvfritz\/prerender-spa-plugin\u003c\/a\u003e, the author of that plugin wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eRecently, SSR (Server Side Rendering) has taken the JavaScript front-end world by storm. The fact that you can now render your sites and apps on the server before sending them to your clients is an absolutely revolutionary idea (and totally not what everyone was doing before JS client-side apps got popular in the first place...)\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_343\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5799020\" id=\"5799020\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_342\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_114\"\u003edbarratt\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5799020\" data-sigil=\"has-tooltip\" data-meta=\"0_341\"\u003e\u003cspan class=\"screen-only\"\u003eJan 13 2020, 7:06 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-13 19:06:05 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_349\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5799233\" id=\"5799233\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_345\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-medal-1 phui-timeline-token\" data-meta=\"0_346\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_115\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5799233\" data-sigil=\"has-tooltip\" data-meta=\"0_344\"\u003e\u003cspan class=\"screen-only\"\u003eJan 13 2020, 7:59 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-13 19:59:11 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_347\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-medal-1 phui-timeline-token strikethrough\" data-meta=\"0_348\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_116\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e rescinded a token.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_354\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5799303\" id=\"5799303\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_351\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-like-1 phui-timeline-token\" data-meta=\"0_352\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_117\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5799303\" data-sigil=\"has-tooltip\" data-meta=\"0_350\"\u003e\u003cspan class=\"screen-only\"\u003eJan 13 2020, 8:22 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-13 20:22:52 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_353\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_118\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e subscribed.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_364\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5800440\" id=\"5800440\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_363\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_119\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5800440\" data-sigil=\"has-tooltip\" data-meta=\"0_362\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 2:27 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 02:27:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_360\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_361\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_120\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eOverall I think this is awesome. I think it's an overdue change. \ud83d\udc4f Thanks for all of your hard work. \ud83d\ude03\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eAfter much research and discussion, the working group believes that the open-source Vue.js framework is the best match for the Foundation\u2019s requirements right now as well as for the foreseeable future.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI think it's important to remember that Vue is \u003ca href=\"https:\/\/web.archive.org\/web\/20170603052649\/https:\/\/betweenthewires.org\/2016\/11\/03\/evan-you\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eeffectively a fork\u003c\/a\u003e of \u003ca href=\"https:\/\/angularjs.org\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eAngularJS\u003c\/a\u003e. In a way, it rejects all of the \u003ca href=\"http:\/\/blog.angularjs.org\/2014\/03\/angular-20.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ereasons\u003c\/a\u003e it was rewritten into \u003ca href=\"https:\/\/angular.io\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eAngular\u003c\/a\u003e. Not saying that's a good or bad thing, just that it's important to know the framework's philosophy.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eReact uses JSX files, while Vue.js uses single-file components. But Vue.js can also use templates provided as HTML strings (which can be provided \u003ca href=\"https:\/\/vuejsdevelopers.com\/2017\/03\/24\/vue-js-component-templates\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ein a variety of ways\u003c\/a\u003e). This allows us still define UI elements in a declarative way, one of our key requirements. \u003ca href=\"https:\/\/reactjs.org\/docs\/react-without-jsx.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact can also be used without a build tool\u003c\/a\u003e, but it falls back on its imperative CreateElement API which is not ideal for general use.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI must be missing something because from the \u003ca href=\"https:\/\/reactjs.org\/docs\/react-without-jsx.htm\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003edocumentation\u003c\/a\u003e, there isn't any difference between JSX and \u003ca href=\"https:\/\/reactjs.org\/docs\/react-api.html#createelement\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact.createElement()\u003c\/a\u003e. In fact, when JSX is compiled, it is compiled \u003cem\u003einto\u003c\/em\u003e \u003ca href=\"https:\/\/reactjs.org\/docs\/react-api.html#createelement\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact.createElement()\u003c\/a\u003e am I missing something? Obviously \u003ca href=\"https:\/\/reactjs.org\/docs\/react-dom.html#render\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReactDOM.render()\u003c\/a\u003e is imperative, but that is only used to mount the application into the DOM and is used with or without JSX. For instance, here's a Hello World example (from their \u003ca href=\"https:\/\/reactjs.org\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehomepage\u003c\/a\u003e) in JSX:\u003c\/p\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"javascript\" data-sigil=\"remarkup-code-block\"\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan class=\"kd\"\u003efunction\u003c\/span\u003e \u003cspan class=\"nx\"\u003eHelloMessage\u003c\/span\u003e\u003cspan class=\"p\"\u003e(\u003c\/span\u003e\u003cspan class=\"nx\"\u003eprops\u003c\/span\u003e\u003cspan class=\"p\"\u003e)\u003c\/span\u003e \u003cspan class=\"p\"\u003e{\u003c\/span\u003e\n \u003cspan class=\"k\"\u003ereturn\u003c\/span\u003e \u003cspan class=\"p\"\u003e(\u003c\/span\u003e\n \u003cspan class=\"o\"\u003e<\u003c\/span\u003e\u003cspan class=\"nx\"\u003ediv\u003c\/span\u003e\u003cspan class=\"o\"\u003e>\u003c\/span\u003e\n \u003cspan class=\"nx\"\u003eHello\u003c\/span\u003e \u003cspan class=\"p\"\u003e{\u003c\/span\u003e\u003cspan class=\"nx\"\u003eprops\u003c\/span\u003e\u003cspan class=\"p\"\u003e.\u003c\/span\u003e\u003cspan class=\"nx\"\u003ename\u003c\/span\u003e\u003cspan class=\"p\"\u003e}\u003c\/span\u003e\n \u003cspan class=\"o\"\u003e<\u003c\/span\u003e\u003cspan class=\"err\"\u003e\/div>\u003c\/span\u003e\n \u003cspan class=\"p\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cp\u003eand then without JSX:\u003c\/p\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"javascript\" data-sigil=\"remarkup-code-block\"\u003e\u003cpre class=\"remarkup-code\"\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan class=\"kd\"\u003efunction\u003c\/span\u003e \u003cspan class=\"nx\"\u003eHelloMessage\u003c\/span\u003e\u003cspan class=\"p\"\u003e(\u003c\/span\u003e\u003cspan class=\"nx\"\u003eprops\u003c\/span\u003e\u003cspan class=\"p\"\u003e)\u003c\/span\u003e \u003cspan class=\"p\"\u003e{\u003c\/span\u003e\n \u003cspan class=\"k\"\u003ereturn\u003c\/span\u003e \u003cspan class=\"nx\"\u003eReact\u003c\/span\u003e\u003cspan class=\"p\"\u003e.\u003c\/span\u003e\u003cspan class=\"nx\"\u003ecreateElement\u003c\/span\u003e\u003cspan class=\"p\"\u003e(\u003c\/span\u003e\n \u003cspan class=\"s2\"\u003e"div"\u003c\/span\u003e\u003cspan class=\"p\"\u003e,\u003c\/span\u003e\n \u003cspan class=\"kc\"\u003enull\u003c\/span\u003e\u003cspan class=\"p\"\u003e,\u003c\/span\u003e\n \u003cspan class=\"s2\"\u003e"Hello "\u003c\/span\u003e\u003cspan class=\"p\"\u003e,\u003c\/span\u003e\n \u003cspan class=\"nx\"\u003eprops\u003c\/span\u003e\u003cspan class=\"p\"\u003e.\u003c\/span\u003e\u003cspan class=\"nx\"\u003ename\u003c\/span\u003e\n \u003cspan class=\"p\"\u003e);\u003c\/span\u003e\n\u003cspan class=\"p\"\u003e}\u003c\/span\u003e\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cp\u003ewhich again, is what the JSX compiles to anyways... I'm not sure I understand how the former is declarative but the latter is imperative? Is \u003ca href=\"https:\/\/reactjs.org\/docs\/react-api.html#createelement\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact.createElement()\u003c\/a\u003e being confused with \u003ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Document\/createElement\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eDocument.createElement()\u003c\/a\u003e? Would you mind explaining that a bit more? Of course the syntax of \u003ca href=\"https:\/\/reactjs.org\/docs\/react-api.html#createelement\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact.createElement()\u003c\/a\u003e is a bit verbose, but we could wrap it in a simpler function for most use cases.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eFinally, key add-ons in the Vue.js ecosystem (router, state management, testing tools, etc.) tend to be maintained as officially-supported products by the core development team, while the equivalent tools in the React ecosystem tend to be community-driven, and support levels will vary.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI think it's important to note that as of \u003ca href=\"https:\/\/reactjs.org\/blog\/2019\/02\/06\/react-v16.8.0.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact 16.8\u003c\/a\u003e, state management has become a \u003ca href=\"https:\/\/reactjs.org\/docs\/hooks-reference.html#usereducer\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003efirst-class citizen\u003c\/a\u003e for React. It made sense for them to add this because so many people were using external state management tools. I appreciate the thoughtfulness by only adding what most people actually need, rather than what they \u003cem\u003ethink\u003c\/em\u003e most people will need.\u003c\/p\u003e\n\n\u003cp\u003eTesting is kind of a separate conversation anyways. React \u003ca href=\"https:\/\/reactjs.org\/docs\/testing.html#tools\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003erecommends\u003c\/a\u003e \u003ca href=\"https:\/\/jestjs.io\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eJest\u003c\/a\u003e which works well with React, Vue, and \u003ca href=\"https:\/\/jestjs.io\/docs\/en\/tutorial-jquery\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eeven jQuery\u003c\/a\u003e. It might be a good idea to use something like that regardless of the framework chosen. I think it might be best to evaluate the testing framework separately from the UI framework.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eIn contrast, React and its related tools have gone through a large amount of change over the same period of time. The recommended best-practices have changed considerably over the years. Keeping up with these changes would be quite difficult given the pace that WMF projects move at.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eAccording to the \u003ca href=\"https:\/\/github.com\/facebook\/react\/blob\/master\/CHANGELOG.md\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eCHANGELOG\u003c\/a\u003e, the last breaking change was when \u003ca href=\"https:\/\/github.com\/facebook\/react\/blob\/master\/CHANGELOG.md#1600-september-26-2017\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e16.0.0\u003c\/a\u003e was released on \u003ctt class=\"remarkup-monospaced\"\u003eSeptember 26, 2017\u003c\/tt\u003e and none of those changes required a major rewrite. Before that it was when \u003ca href=\"https:\/\/github.com\/facebook\/react\/blob\/master\/CHANGELOG.md#1500-april-7-2016\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e15.0.0\u003c\/a\u003e was released on \u003ctt class=\"remarkup-monospaced\"\u003eApril 7, 2016\u003c\/tt\u003e (which was the first major version) and none of those require major changes to our code base. I'm not sure I really get this argument. While React has continued to evolve and provide new and better ways to do things, they haven't gotten rid of the 4+ years old ways of doing things).\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eHowever, React is still developed primarily by Facebook and will likely continue to change in ways that serve Facebook's needs first and foremost. The WMF had to spend time and energy migrating away from another open-source FB project (HHVM) when Facebook decided that new versions would no longer remain fully compatible with PHP. Sudden changes in direction may be less likely in a project like Vue.js which does not rely on a single dominant corporate backer.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI think someone could use the exact same argument to reject using MediaWiki or WordPress. I realize there is some hurt from HHVM, but I don't think that should be used to stigmatize React. I believe the case of HHVM is a better reason to not use \u003cem\u003ePreact\u003c\/em\u003e than React proper. It's clear now, that the gains made in performance forks are (at some point in the future) folded back into the mainline project. You can see this with the performance gains gained in React which has closed the performance gap with Preact (just like PHP has closed the gap with HHVM).\u003c\/p\u003e\n\n\u003cp\u003eRegardless, the premise isn't even accurate in the first place. The \u003ca href=\"https:\/\/www.linkedin.com\/in\/evanyou\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ecreator of Vue\u003c\/a\u003e works for a company called "Vue Technology LLC" which is a registered for-profit company in New Jersey, United States (Entity ID: \u003ctt class=\"remarkup-monospaced\"\u003e0450081005\u003c\/tt\u003e). To be clear, Vue, like a lot of open source projects, absolutely relies on a "a single dominant corporate backer." Now how that corporate backer plans to make a profit, is beyond my scope of understanding as they are privately held and sharing their financial status is not compulsory in the United States. I hope, for our sake, that it is doing really well. It's entirely possible that it isn't doing well at all and could collapse tomorrow, we really have no way of knowing (nor are company executives obligated to be truthful to non-investors).\u003c\/p\u003e\n\n\u003cp\u003eTo be fair, I have no problem with a for-profit company. I think a positive, sustainable cash flow is way more important than your tax status and whether you have shareholders or not. As an example, I would much rather use an open-source product from a \u003ca href=\"https:\/\/bcorporation.net\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eCertified B Corporation\u003c\/a\u003e than a non-profit that does not have a sustainable business model (though, sadly, we do not have the luxury of either in this situation). My point is that the argument is a fallacy.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_373\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5800460\" id=\"5800460\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_372\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_121\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5800460\" data-sigil=\"has-tooltip\" data-meta=\"0_371\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 2:54 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 02:54:47 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_369\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_370\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_122\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eI forgot to mention that both WordPress (as of \u003ca href=\"https:\/\/wordpress.org\/support\/wordpress-version\/version-5-0\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eversion 5.0\u003c\/a\u003e) and Drupal (\u003ca href=\"https:\/\/dri.es\/drupal-looking-to-adopt-react\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003efuture\u003c\/a\u003e) use React. I think it might be wise to consult with these two projects and see why they chose React over Vue.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_384\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3q7hvhyjfxqxvbtfnsai\/PHID-FILE-utm6nlssecqr4tn4exv4\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jdrewniak\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/18\/\" data-sigil=\"has-tooltip\" data-meta=\"0_382\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-star\" data-meta=\"0_383\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5801407\" id=\"5801407\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_381\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jdrewniak\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_124\"\u003eJdrewniak\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5801407\" data-sigil=\"has-tooltip\" data-meta=\"0_380\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 11:51 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 11:51:34 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_378\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_379\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_123\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eI'm very excited about this proposal and eager to adopt a modern framework like Vue!\u003cbr \/\u003e\nI think there's still a lot of infrastructure that needs to be put in place to take advantage of single-file components, and I'm wondering what the developer experience is like without them.\u003c\/p\u003e\n\n\u003cp\u003eAs \u003ca href=\"https:\/\/vuejsdevelopers.com\/2017\/03\/24\/vue-js-component-templates\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethis article\u003c\/a\u003e in the description points out, there are many ways to define components in Vue. However, any method that requires setting the \u003ctt class=\"remarkup-monospaced\"\u003etemplate\u003c\/tt\u003e option requires shipping the Vue compiler to the client, as described in the docs (\u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/installation.html#Runtime-Compiler-vs-Runtime-only\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eRuntime + Compiler vs. Runtime-only\u003c\/a\u003e), which seems like a large payload cost. from a performance perspective, is that something we're willing to ship?\u003c\/p\u003e\n\n\u003cp\u003eWithout the compiler, we're really only left with \u003ctt class=\"remarkup-monospaced\"\u003edocument.createElement\u003c\/tt\u003e or the shorter \u003ctt class=\"remarkup-monospaced\"\u003eh()\u003c\/tt\u003e alias inside of a render function.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_393\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/qg6iwggo535pagkoqbkr\/PHID-FILE-pj4bbpforckskr5bm42m\/alphanumeric_aleo-white_W.png-_ce9793-255%2C255%2C255%2C0.4.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/WMDE-leszek\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5801495\" id=\"5801495\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_392\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/WMDE-leszek\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_125\"\u003eWMDE-leszek\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5801495\" data-sigil=\"has-tooltip\" data-meta=\"0_391\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 12:28 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 12:28:31 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_389\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_390\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_126\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5798663\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_5\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5798663\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Anomie\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_6\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Anomie\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eOne of the strengths of Wikipedia and MediaWiki is that they largely function when in-browser JavaScript is unavailable. This makes it seem like continuing that is not a priority, and will require complex setup for any wiki that wants to try to do so.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI didn't read this RFC like this. The server-side rendering ability has even been listed as a requirement for choosing the framework.\u003c\/p\u003e\n\n\u003cp\u003eHow I interpret the intention, the experience in non-JS-enabled browsers is not intended to change (degrade) significantly. It seems likely (thinking about WMDE experiences too) that the server-side rendering of UI might not be happening in PHP, but rather in node, but that shouldn't be making a difference for Wikipedia readers and editors.\u003cbr \/\u003e\nFor non-Wikimedia installations it might be that folks hosting those mediawiki installation would need to provide a node server, or require their users would need to have JS enabled in their browsers. I cannot say how much of a change that would be for non-Wikimedia MediaWiki installations.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_396\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/yhqlu46f2mwg3a36ko6l\/PHID-FILE-bt6k3djtpehl3zkk7zzg\/profile-merge.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Ricordisamoa\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5801917\" id=\"5801917\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_395\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Ricordisamoa\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_127\"\u003eRicordisamoa\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5801917\" data-sigil=\"has-tooltip\" data-meta=\"0_394\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 2:11 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 14:11:40 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_405\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/24kjulskdfpovj576ie3\/PHID-FILE-2oozvnh6ixmaiqbes6qz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5802492\" id=\"5802492\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_404\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_128\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Tonina_Zhelyazkova_WMDE\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5802492\" data-sigil=\"has-tooltip\" data-meta=\"0_403\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 5:06 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 17:06:57 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_401\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_402\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_129\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5800440\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_7\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5800440\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_9\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eRegardless, the premise isn't even accurate in the first place. The \u003ca href=\"https:\/\/www.linkedin.com\/in\/evanyou\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ecreator of Vue\u003c\/a\u003e works for a company called "Vue Technology LLC" which is a registered for-profit company in New Jersey, United States (Entity ID: \u003ctt class=\"remarkup-monospaced\"\u003e0450081005\u003c\/tt\u003e).\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThe VueJS project has a core team of around 10 people and none of them are employed at this "Vue Technology LLC". All of them work for different tech companies amongst which are GitLab and Netlify. Would you say VueJS is led by GitLab and Netlify?\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eTo be clear, Vue, like a lot of open source projects, absolutely relies on a "a single dominant corporate backer." Now how that corporate backer plans to make a profit, is beyond my scope of understanding as they are privately held and sharing their financial status is not compulsory in the United States. I hope, for our sake, that it is doing really well. It's entirely possible that it isn't doing well at all and could collapse tomorrow, we really have no way of knowing (nor are company executives obligated to be truthful to non-investors).\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eThere is no "single dominant corporate backer". Evan You is on \u003ca href=\"https:\/\/www.patreon.com\/evanyou\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ePatreon\u003c\/a\u003e and Vue is on \u003ca href=\"https:\/\/opencollective.com\/vuejs\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eOpen Collective\u003c\/a\u003e and all the corporate backers are listed on the \u003ca href=\"https:\/\/github.com\/vuejs\/vue\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eGitHub repo\u003c\/a\u003e.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eTo be fair, I have no problem with a for-profit company. I think a positive, sustainable cash flow is way more important than your tax status and whether you have shareholders or not. As an example, I would much rather use an open-source product from a \u003ca href=\"https:\/\/bcorporation.net\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eCertified B Corporation\u003c\/a\u003e than a non-profit that does not have a sustainable business model (though, sadly, we do not have the luxury of either in this situation). My point is that the argument is a fallacy.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eSpeaking of an open source project being backed by a large corporation, most people probably know the story of Angular 1 and how it was completely rewritten, so all projects using Angular 1 had to be rewritten as well. Therefor having a big corp (in Angular's case Google) behind the framework does not guarantee a sustainable model.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5800460\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_8\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5800460\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_10\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI forgot to mention that both WordPress (as of \u003ca href=\"https:\/\/wordpress.org\/support\/wordpress-version\/version-5-0\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eversion 5.0\u003c\/a\u003e) and Drupal (\u003ca href=\"https:\/\/dri.es\/drupal-looking-to-adopt-react\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003efuture\u003c\/a\u003e) use React. I think it might be wise to consult with these two projects and see why they chose React over Vue.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eOne can have the opposite argument: Wouldn't it be wise to consult with big projects, which use Vue, as to \u003ca href=\"https:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewhy they chose it?\u003c\/a\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_415\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5802585\" id=\"5802585\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_414\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_130\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5802585\" data-sigil=\"has-tooltip\" data-meta=\"0_413\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 5:20 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 17:20:37 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_411\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_412\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_131\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_11\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Tonina_Zhelyazkova_WMDE\u003c\/span\u003e\u003c\/a\u003e my point is that it doesn't mitigate uncertainty, the \u003ca href=\"https:\/\/en.wikipedia.org\/wiki\/Benevolent_dictator_for_life\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eBDFL\u003c\/a\u003e could change the direction of Vue just as easily as a public corporation could (I would argue even \u003cem\u003eeasier\u003c\/em\u003e because he has little risk involved in changing, where Facebook has a lot of risk). The reality is, is that the point being made (about mitigating uncertainty) is a business decision, not a technical one, and I don't think it takes all of the factors into account.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eOne can have the opposite argument: Wouldn't it be wise to consult with big projects, which use Vue, as to \u003ca href=\"https:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewhy they chose it?\u003c\/a\u003e\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eWe could go back and forth on this all day. I chose the two projects that (I think?) are closer to us in relation and have bigger user bases with more contributors than we do. In other words, they had more to risk. More importantly perhaps, is why would Facebook's biggest competitor, Twitter, choose to use React?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_418\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7in5i7j22jezecbaetth\/PHID-FILE-n36covhe4ti6wyqvrnsg\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Michael\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5802623\" id=\"5802623\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_417\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Michael\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_132\"\u003eMichael\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5802623\" data-sigil=\"has-tooltip\" data-meta=\"0_416\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 5:33 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 17:33:02 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_429\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ms665yc73j6nadjitytk\/PHID-FILE-mocohumlrcbe2lcuplml\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Anomie\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/5\/\" data-sigil=\"has-tooltip\" data-meta=\"0_427\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_428\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5802985\" id=\"5802985\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_426\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Anomie\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_133\"\u003eAnomie\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5802985\" data-sigil=\"has-tooltip\" data-meta=\"0_425\"\u003e\u003cspan class=\"screen-only\"\u003eJan 14 2020, 7:06 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-14 19:06:20 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_423\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_424\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_134\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5801495\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_13\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5801495\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/WMDE-leszek\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_15\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@WMDE-leszek\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5798663\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_12\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5798663\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Anomie\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_14\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Anomie\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eOne of the strengths of Wikipedia and MediaWiki is that they largely function when in-browser JavaScript is unavailable. This makes it seem like continuing that is not a priority, and will require complex setup for any wiki that wants to try to do so.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI didn't read this RFC like this. The server-side rendering ability has even been listed as a requirement for choosing the framework.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eYou're right, I think I read it a bit too quickly. In particular I missed in the introductory section where it says it currently "would be limited to cases where server-rendered elements can be progressively enhanced within the user\u2019s browser".\u003c\/p\u003e\n\n\u003cp\u003eBut, the general tone still makes me not very hopeful...\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eFor non-Wikimedia installations it might be that folks hosting those mediawiki installation would need to provide a node server, or require their users would need to have JS enabled in their browsers. I cannot say how much of a change that would be for non-Wikimedia MediaWiki installations.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI was very happy when the Parsoid\/PHP project was begun to remove one of the major requirements for a bespoke nodejs service in the MediaWiki ecosystem, I'd really hate to have a new one added.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_438\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/24kjulskdfpovj576ie3\/PHID-FILE-2oozvnh6ixmaiqbes6qz\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5805149\" id=\"5805149\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_437\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_135\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Tonina_Zhelyazkova_WMDE\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5805149\" data-sigil=\"has-tooltip\" data-meta=\"0_436\"\u003e\u003cspan class=\"screen-only\"\u003eJan 15 2020, 1:48 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-15 13:48:04 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_434\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_435\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_136\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5802585\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_16\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5802585\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_17\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eWe could go back and forth on this all day. I chose the two projects that (I think?) are closer to us in relation and have bigger user bases with more contributors than we do. In other words, they had more to risk. More importantly perhaps, is why would Facebook's biggest competitor, Twitter, choose to use React?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eIndeed, we can cite companies using either framework all day. I assume the underlying point of these examples is that React is more popular than Vue. And yes \u003ca href=\"https:\/\/vue-view.com\/resources\/top-javascript-frameworks-in-2019\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethis is a fact\u003c\/a\u003e. But is being most popular an argument in favor of choosing React for MW? If yes, why? What does the most popular framework has that Vue doesn't provide? Usually the benefit of the "most popular" is that you can find the most information and get the most help. But docs, guides and help is available for Vue too. And, in fact, Vue has a reputation of having the best docs and guides compared to other FE frameworks. \u003cbr \/\u003e\n\u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/comparison.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eHere's the Vue guide comparing Vue to other frameworks and underling key differences and benefits.\u003c\/a\u003e I couldn't find anything similar from the React team.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_441\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/biyialftej5zydh2v4t7\/PHID-FILE-hadstttxv543p5lf44xo\/profile-me.jpeg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Milimetric\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5805693\" id=\"5805693\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_440\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Milimetric\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_137\"\u003eMilimetric\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5805693\" data-sigil=\"has-tooltip\" data-meta=\"0_439\"\u003e\u003cspan class=\"screen-only\"\u003eJan 15 2020, 3:46 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-15 15:46:22 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_450\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3226j44b4ygmmdwjc64b\/PHID-FILE-h2ttujkqt45ga5n6dnoh\/profile-IMG_2065_edit.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jhernandez\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5807233\" id=\"5807233\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_449\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jhernandez\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_139\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Jhernandez\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5807233\" data-sigil=\"has-tooltip\" data-meta=\"0_448\"\u003e\u003cspan class=\"screen-only\"\u003eJan 15 2020, 8:31 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-15 20:31:14 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_446\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_447\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_138\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eI'm glad a recommendation has been made, and that we can move things forward in other very important topics that maybe are more foundational than the framework, like build tools and processes, and developer workflows. Those decisions will directly affect how any library is used.\u003c\/p\u003e\n\n\u003cp\u003eThat said, respecting the frontend working group's recommendation, I'll join in the conversation.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cp\u003eA couple of data points regarding the bus factor mentioned, looking at the data:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/github.com\/facebook\/react\/graphs\/contributors\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/facebook\/react\/graphs\/contributors\u003c\/a\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHas +10 contributors with more than 100 commits, you can see people coming in and out, with others taking their place\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/github.com\/vuejs\/vue\/graphs\/contributors\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/vue\/graphs\/contributors\u003c\/a\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHas 1 person with +100 commits\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eI'm certain Evan is extremely smart and capable, but he is just one person. And that fact, is dangerous for the long term viability of the decision. I do hope the Vue core team actually step up in terms of the coding responsibilities, because the bus factor is huge.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5805149\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_18\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5805149\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_20\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Tonina_Zhelyazkova_WMDE\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e[...] But docs, guides and help is available for Vue too. And, in fact, Vue has a reputation of having the best docs and guides compared to other FE frameworks.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eJust for the sake of completeness, I'll add that the React docs are great, like the Vue ones are too. The React team \u003ca href=\"http:\/\/rachelnabors.com\/2019\/04\/01\/facebook\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehired last year a full time Documentation engineer\u003c\/a\u003e and has done a lot of great work, specifically with the getting started and beginner friendliness of the docs.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5801407\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_19\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5801407\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Jdrewniak\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_21\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Jdrewniak\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI think there's still a lot of infrastructure that needs to be put in place to take advantage of single-file components, and I'm wondering what the developer experience is like without them.\u003c\/p\u003e\n\n\u003cp\u003eAs \u003ca href=\"https:\/\/vuejsdevelopers.com\/2017\/03\/24\/vue-js-component-templates\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethis article\u003c\/a\u003e in the description points out, there are many ways to define components in Vue. However, any method that requires setting the \u003ctt class=\"remarkup-monospaced\"\u003etemplate\u003c\/tt\u003e option requires shipping the Vue compiler to the client, as described in the docs (\u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/installation.html#Runtime-Compiler-vs-Runtime-only\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eRuntime + Compiler vs. Runtime-only\u003c\/a\u003e), which seems like a large payload cost. from a performance perspective, is that something we're willing to ship?\u003c\/p\u003e\n\n\u003cp\u003eWithout the compiler, we're really only left with \u003ctt class=\"remarkup-monospaced\"\u003edocument.createElement\u003c\/tt\u003e or the shorter \u003ctt class=\"remarkup-monospaced\"\u003eh()\u003c\/tt\u003e alias inside of a render function.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003e+1. Any choice of framework is the tip of the iceberg in terms of improvements to the frontend development toolchain.\u003c\/p\u003e\n\n\u003cp\u003eWhatever happens, I hope for Wikimedia projects we don't end up sending compilers to all clients, given the amount of traffic we have it would be extremely inefficient and wasteful to do so.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cp\u003eFrom the RFC description:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eReact can also be used without a build tool, but it falls back on its imperative CreateElement API which is not ideal for general use.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIt falls back to its \u003cstrong\u003eJS\u003c\/strong\u003e API, but it is not imperative. It is function calls like the ones you use in Vue with \u003ctt class=\"remarkup-monospaced\"\u003eh\u003c\/tt\u003e, like Jan mentioned above. It is the only option if you don't want to send compilers to the client's browsers, which is basically mandatory in any non-toy production website.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eIn contrast, React and its related tools have gone through a large amount of change over the same period of time. \u003cstrong\u003eThe recommended best-practices have changed considerably over the years. Keeping up with these changes would be quite difficult given the pace that WMF projects move at\u003c\/strong\u003e.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eEmphasis mine. This rationale is very much broken, as well as a very poor reason.\u003c\/p\u003e\n\n\u003cp\u003eFirst, if we move at glacial pace, we need to figure out how to be more agile and do better, not be complacent with it.\u003c\/p\u003e\n\n\u003cp\u003eSecond, React since release has been very stable, and when they have broken the public API, they have always provided tools in the form of libraries and codemods to migrate code automatically. The reason is that Facebook has ~60.000 components the last time they talked about it, and the people responsible for updating the frontend code of the whole thing is the React team. Yes, those 6 people. They are very careful to be backwards compatible, and when unavoidable, to provide easy and automated migration paths.\u003c\/p\u003e\n\n\u003cp\u003eThird, yes, the libraries evolve, and provide better practices, and both libraries are the same. React doesn't force you to rewrite your existing components, but it encourages you to build the new ones in some patterns they have found best. Vue is the same, and it is going to happen the same with v3, when they release the composition API. They are not deprecating the existing patterns for developing components, but they will provide a better one for you to adopt on new code or when revisiting old code.\u003c\/p\u003e\n\n\u003cp\u003eTheir current strategy and consequences are \u003cstrong\u003ethe same\u003c\/strong\u003e. Actually, it was not long ago when there was a lot of \u003ca href=\"https:\/\/news.ycombinator.com\/item?id=20237568\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue drama\u003c\/a\u003e because the community thought v3 would deprecate the v2 APIs. With the release of suspense and hooks the react community didn't freak out, because all changes to versions have been very much backwards compatible and with easy migration paths, so no-one expected differently.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue.js development is not led by a single corporation whose goals may diverge from those of the WMF\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eFinally, this has already been pointed out by David, which is not very true in reality, and seeing the links to the contribution graphs I posted above. Vue is led by one committer who worked for Google. I don't think this reasoning is very sound in comparison.\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cp\u003eLike I said at the beginning, I'm happy there is a decision made, and we can move onto other important topics.\u003c\/p\u003e\n\n\u003cp\u003eI hope next decisions are better justified. Some times, the reason is not as rational or factual and trying to make it look like it is can be a mistake when others look at the justification. Maybe it would've been better to just state that it is personal preference and knowledge of the committee when comparing two good options, rather than digging for logic reasons where there may not have been that many.\u003c\/p\u003e\n\n\u003cp\u003eOnwards to LESS\/CSS\/SASS, Javascript\/Typescript\/Babel, Webpack\/Parcel\/ESM\/RL, the road is long and there is much to cover.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_453\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/v5wmnfiaelrd6nztxd3a\/PHID-FILE-s57znldbv3qchtewuryd\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/daniel\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5807481\" id=\"5807481\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_452\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/daniel\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_140\"\u003edaniel\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/52\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_141\"\u003eP1: Define\u003c\/a\u003e to \u003ca href=\"\/project\/board\/52\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_142\"\u003eUnder discussion\u003c\/a\u003e on the \u003ca href=\"\/tag\/techcom-rfc\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_143\"\u003eTechCom-RFC\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5807481\" data-sigil=\"has-tooltip\" data-meta=\"0_451\"\u003e\u003cspan class=\"screen-only\"\u003eJan 15 2020, 9:38 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-15 21:38:39 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_466\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/de7rnuucgwsa2u5ow7bn\/PHID-FILE-towcvgcmdefffz27aphc\/profile-gravatar.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Catrope\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/18\/\" data-sigil=\"has-tooltip\" data-meta=\"0_462\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-star\" data-meta=\"0_463\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/5\/\" data-sigil=\"has-tooltip\" data-meta=\"0_464\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_465\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5807754\" id=\"5807754\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_461\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Catrope\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_144\"\u003eCatrope\u003c\/a\u003e added subscribers: \u003ca href=\"\/p\/Krinkle\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_145\"\u003eKrinkle\u003c\/a\u003e, \u003ca href=\"\/p\/Catrope\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_146\"\u003eCatrope\u003c\/a\u003e.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5807754\" data-sigil=\"has-tooltip\" data-meta=\"0_460\"\u003e\u003cspan class=\"screen-only\"\u003eJan 15 2020, 11:17 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-15 23:17:55 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_458\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_459\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_147\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5801407\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_22\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5801407\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Jdrewniak\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_24\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Jdrewniak\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI'm very excited about this proposal and eager to adopt a modern framework like Vue!\u003cbr \/\u003e\nI think there's still a lot of infrastructure that needs to be put in place to take advantage of single-file components, and I'm wondering what the developer experience is like without them.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eSupporting single-file components wouldn't actually be that hard at all. With small modifications to our existing infrastructure, we could have ResourceLoader automatically remap SFCs to JS component definitions (with the template as a string), because this transformation is very simple. We wouldn't be able to support ES6 or scoped styles though (because those depend on preprocessing steps that use nodejs libraries).\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eAs \u003ca href=\"https:\/\/vuejsdevelopers.com\/2017\/03\/24\/vue-js-component-templates\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethis article\u003c\/a\u003e in the description points out, there are many ways to define components in Vue. However, any method that requires setting the \u003ctt class=\"remarkup-monospaced\"\u003etemplate\u003c\/tt\u003e option requires shipping the Vue compiler to the client, as described in the docs (\u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/installation.html#Runtime-Compiler-vs-Runtime-only\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eRuntime + Compiler vs. Runtime-only\u003c\/a\u003e), which seems like a large payload cost. from a performance perspective, is that something we're willing to ship?\u003c\/p\u003e\n\n\u003cp\u003eWithout the compiler, we're really only left with \u003ctt class=\"remarkup-monospaced\"\u003edocument.createElement\u003c\/tt\u003e or the shorter \u003ctt class=\"remarkup-monospaced\"\u003eh()\u003c\/tt\u003e alias inside of a render function.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eMy proposal above is basically to let developers write #7 (single file components) and transform them to #1 (template passed as a string to the \u003ctt class=\"remarkup-monospaced\"\u003etemplate\u003c\/tt\u003e option). This would keep things simple, but would also require shipping the compiler to the client, which as you point out is inefficient.\u003c\/p\u003e\n\n\u003cp\u003eThe only way to avoid shipping the compiler to the client is to compile templates on the server side. One way we could do this is have a build step and commit the compiled template files to the repository. This is what we already do for server-side Handlebars templates in Flow, and what MobileFrontend does for its Webpack bundles. Committing built files to the repo isn't great, but we haven't agreed on a better way to manage build steps yet (see \u003ca href=\"\/T199004\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_23\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT199004\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e). Another way would be to have ResourceLoader's SFC transformation step shell out to \u003ctt class=\"remarkup-monospaced\"\u003evue-cli\u003c\/tt\u003e and compile the template on the fly. This would be just like how we handle JS\/CSS minification, URL remapping\/embedding in CSS, CSSJanus and LESS compilation, except that those things are all implemented in PHP while this would require shelling out to a nodejs tool, which may be slow. (But would it be slower than LESS compilation?)\u003c\/p\u003e\n\n\u003cp\u003eIn summary, I think our options are:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eTransform SFCs on the fly using simple PHP code; compile templates client-side\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eRun build step that transforms SFCs and compiles templates; commit built files to repo\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eTransform SFCs and compile templates on the fly by shelling out to \u003ctt class=\"remarkup-monospaced\"\u003evue-cli\u003c\/tt\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eI'd also be very interested to hear thoughts on the above from \u003ca href=\"\/p\/Krinkle\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_25\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Krinkle\u003c\/span\u003e\u003c\/a\u003e and \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_26\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e especially.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_470\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/6n6ztqf7kwlq2m3tns3r\/PHID-FILE-sjs4kdocejuiiypnxqow\/profile-lake.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/chasemp\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5811122\" id=\"5811122\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-link phui-timeline-icon\" data-meta=\"0_468\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/chasemp\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_148\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e chasemp\u003c\/a\u003e added a project: \u003ca href=\"\/tag\/security-team\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_149\"\u003eSecurity-Team\u003c\/a\u003e.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5811122\" data-sigil=\"has-tooltip\" data-meta=\"0_467\"\u003e\u003cspan class=\"screen-only\"\u003eJan 16 2020, 9:44 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-16 21:44:48 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_469\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/chasemp\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_150\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e chasemp\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/1179\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_151\"\u003eIncoming\u003c\/a\u003e to \u003ca href=\"\/project\/board\/1179\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_152\"\u003eWatching\u003c\/a\u003e on the \u003ca href=\"\/tag\/security-team\/\" class=\"phui-handle\" data-sigil=\"hovercard\" data-meta=\"0_153\"\u003eSecurity-Team\u003c\/a\u003e board.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_480\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5811930\" id=\"5811930\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_479\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_154\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5811930\" data-sigil=\"has-tooltip\" data-meta=\"0_478\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 4:37 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 04:37:52 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_476\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_477\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_155\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5805149\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_27\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5805149\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_29\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Tonina_Zhelyazkova_WMDE\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eIndeed, we can cite companies using either framework all day. I assume the underlying point of these examples is that React is more popular than Vue. And yes \u003ca href=\"https:\/\/vue-view.com\/resources\/top-javascript-frameworks-in-2019\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethis is a fact\u003c\/a\u003e. But is being most popular an argument in favor of choosing React for MW? If yes, why? What does the most popular framework has that Vue doesn't provide?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI think this might be conflating the \u003cem\u003etechnical\u003c\/em\u003e and the \u003cem\u003ebusiness\u003c\/em\u003e arguments.\u003c\/p\u003e\n\n\u003cp\u003eFrom a technical perspective, you're absolutely right, being the most popular, is absolutely \u003cstrong\u003enot\u003c\/strong\u003e a standard of excellence. From a business perspective, being popular can help mitigate uncertainty and risk.\u003c\/p\u003e\n\n\u003cp\u003eAs an analogy, an engineer might find a \u003ca href=\"https:\/\/www.koenigsegg.com\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eKoenigsegg\u003c\/a\u003e to be the best car in the world, but owning that car (even if we had the money) would carry an immense amount of risk (theft, repairs, insurance, company's solvency, etc.). On the other hand, buying a \u003ca href=\"https:\/\/www.toyota.com\/camry\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eToyota Camry\u003c\/a\u003e is clearly not technically superior, but carries very little risk in the way of ownership. Obviously this isn't a perfect analogy, but I hope it helps illustrate my point.\u003c\/p\u003e\n\n\u003cp\u003eIn 2019, there were \u003ctt class=\"remarkup-monospaced\"\u003e230\u003c\/tt\u003e (excluding \u003ca href=\"https:\/\/github.com\/vue-bot\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-bot\u003c\/a\u003e) commits to Vue, \u003ca href=\"https:\/\/github.com\/vuejs\/vue\/graphs\/contributors?from=2019-01-01&to=2019-12-30&type=c\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e153\u003c\/a\u003e (66.5%) were authored by a single individual. During the same time period, there were \u003ctt class=\"remarkup-monospaced\"\u003e2,135\u003c\/tt\u003e commits to React and \u003ca href=\"https:\/\/github.com\/facebook\/react\/graphs\/contributors?from=2019-01-01&to=2019-12-31&type=c\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e4 contributors\u003c\/a\u003e made more than 153 commits and the top individual could only account for 34.2% of commits. 2 contributors individually made more commits to React than the total number of commits to Vue.\u003c\/p\u003e\n\n\u003cp\u003eTo reiterate:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue.js development is not led by a single corporation whose goals may diverge from those of the WMF.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eis objectively false.\u003c\/p\u003e\n\n\u003cp\u003eFrom what I can tell, React mitigates this uncertainty much better than Vue does. It is hard for me to imagine a scenario in which Wikimedia chooses Vue, but does \u003cstrong\u003enot\u003c\/strong\u003e end up investing significantly in maintaining it.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5807754\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_28\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5807754\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Catrope\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_30\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Catrope\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eIn summary, I think our options are:\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eAnother option that I think should be considered is using React instead of Vue.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_493\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/m25d4sm73mzvfxk7efxx\/PHID-FILE-zigk2s47ziyr7hqvpw7v\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Ladsgroup\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/17\/\" data-sigil=\"has-tooltip\" data-meta=\"0_489\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_490\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-indigo \" href=\"\/badges\/view\/15\/\" data-sigil=\"has-tooltip\" data-meta=\"0_491\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-eye\" data-meta=\"0_492\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5812071\" id=\"5812071\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_488\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Ladsgroup\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_156\"\u003eLadsgroup\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812071\" data-sigil=\"has-tooltip\" data-meta=\"0_487\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 8:23 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 08:23:29 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_485\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_486\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_157\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5811930\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_31\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5811930\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_32\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eFrom a business perspective, being popular can help mitigate uncertainty and risk.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003e[citation needed]\u003c\/p\u003e\n\n\u003cp\u003e(An example, yahoo being the most popular search engine back in early days)\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_504\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/lmqso2pdiuhzvrx7fltm\/PHID-FILE-g4ayg62xazjsnsxkgiqt\/alphanumeric_lato-dark_L.png-_48a3ba-0%2C0%2C0%2C0.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Legoktm\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/17\/\" data-sigil=\"has-tooltip\" data-meta=\"0_502\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_503\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5812101\" id=\"5812101\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_501\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Legoktm\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_159\"\u003eLegoktm\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812101\" data-sigil=\"has-tooltip\" data-meta=\"0_500\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 8:39 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 08:39:49 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_498\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_499\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_158\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eHere are a few more requirements that I think need to be considered with this proposal (being not familiar with React nor vue):\u003c\/p\u003e\n\n\u003cp\u003esecurity side:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHas a good track record of responding to security issues in a timely manner\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHas good defaults\/APIs that makes it hard to introduce XSS issues and makes it obvious in code review if someone is doing something potentially unsafe (see some examples Chris provided at \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Requests_for_comment\/Template_engine\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mediawiki.org\/wiki\/Requests_for_comment\/Template_engine\u003c\/a\u003e)\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDoes not require me to \u003ctt class=\"remarkup-monospaced\"\u003enpm install\u003c\/tt\u003e stuff off the internet just to run client-side MW JavaScript (e.g. all PHP dependencies are audited\/manually reviewed and then checked into git in mediawiki\/vendor).\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003esoftware freedom\/redistributor side (with my Debian partially hat on):\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eMediaWiki tarballs must ship the preferred form of modifying the JavaScript code, not a bunch of minified files ("Corresponding Source" in GPL lingo)\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eThis should not introduce dependencies upon things that aren't already included in most Linux distributions\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eAlso, what exactly is this going to replace\/obsolete if successfully adopted? Are we going to drop all of jQuery\/OOUI\/mustache\/etc. in favor of vue.js?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_507\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/pftw7tn2jgpwaqdmxbtd\/PHID-FILE-4peudqvgp45hlsggbblo\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/TK-999\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5812165\" id=\"5812165\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_506\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/TK-999\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_160\"\u003eTK-999\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812165\" data-sigil=\"has-tooltip\" data-meta=\"0_505\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 9:22 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 09:22:42 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_511\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/d2jbgpbfrur5bcozllul\/PHID-FILE-qajhkccumyez26hhhmkl\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jakob_WMDE\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5812200\" id=\"5812200\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_509\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-heart-1 phui-timeline-token\" data-meta=\"0_510\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jakob_WMDE\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_161\"\u003eJakob_WMDE\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812200\" data-sigil=\"has-tooltip\" data-meta=\"0_508\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 9:42 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 09:42:31 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_516\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/mcdy6bokf2bfd6lhrj5x\/PHID-FILE-hvay22mxxy4ab7u76frl\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Addshore\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5812210\" id=\"5812210\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_513\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-emoji-2 phui-timeline-token\" data-meta=\"0_514\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Addshore\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_162\"\u003eAddshore\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812210\" data-sigil=\"has-tooltip\" data-meta=\"0_512\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 9:43 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 09:43:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_515\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Addshore\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_163\"\u003eAddshore\u003c\/a\u003e subscribed.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_530\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/mcdy6bokf2bfd6lhrj5x\/PHID-FILE-hvay22mxxy4ab7u76frl\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Addshore\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-indigo \" href=\"\/badges\/view\/14\/\" data-sigil=\"has-tooltip\" data-meta=\"0_526\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-empire\" data-meta=\"0_527\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" data-sigil=\"has-tooltip\" data-meta=\"0_528\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_529\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5812363\" id=\"5812363\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_525\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Addshore\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_164\"\u003eAddshore\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5812363\" data-sigil=\"has-tooltip\" data-meta=\"0_524\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 10:39 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 10:39:23 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_522\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_523\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_165\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5811930\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_33\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5811930\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_35\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eAs an analogy, an engineer might find a \u003ca href=\"https:\/\/www.koenigsegg.com\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eKoenigsegg\u003c\/a\u003e to be the best car in the world\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI don't believe anyone has said any of these frameworks are the "best in the world", so this analogy probably doesn't make sense.\u003c\/p\u003e\n\n\u003cp\u003eI distinctly remember seeing:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eAfter much research and discussion, the working group believes that the open-source Vue.js framework is the \u003cstrong\u003ebest match for the Foundation\u2019s requirements\u003c\/strong\u003e right now as well as for the foreseeable future.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\n\n\u003cblockquote\u003e\u003cp\u003eIn 2019, there were \u003ctt class=\"remarkup-monospaced\"\u003e230\u003c\/tt\u003e (excluding \u003ca href=\"https:\/\/github.com\/vue-bot\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-bot\u003c\/a\u003e) commits to Vue, \u003ca href=\"https:\/\/github.com\/vuejs\/vue\/graphs\/contributors?from=2019-01-01&to=2019-12-30&type=c\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e153\u003c\/a\u003e (66.5%) were authored by a single individual. During the same time period, there were \u003ctt class=\"remarkup-monospaced\"\u003e2,135\u003c\/tt\u003e commits to React and \u003ca href=\"https:\/\/github.com\/facebook\/react\/graphs\/contributors?from=2019-01-01&to=2019-12-31&type=c\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e4 contributors\u003c\/a\u003e made more than 153 commits and the top individual could only account for 34.2% of commits. 2 contributors individually made more commits to React than the total number of commits to Vue.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eReact appears to be made up of one git repo and vue multiple.\u003cbr \/\u003e\nIf you count the vue repos that are linked in the readme you end up with 1105 commits (vue) vs 1830 (react) based on some bad maths by me....\u003cbr \/\u003e\nThis means vue probably has around 60% of the commits of react, which isnt as dramatic as the\u003c\/p\u003e\n\n\u003cp\u003e\u003cdiv class=\"phabricator-remarkup-embed-layout-left\"\u003e\u003ca href=\"https:\/\/phab.wmfusercontent.org\/file\/data\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png\" class=\"phabricator-remarkup-embed-image\" data-sigil=\"lightboxable\" data-meta=\"0_34\"\u003e\u003cimg src=\"https:\/\/phab.wmfusercontent.org\/file\/data\/nvwoyor2vkt5ksidq3gy\/PHID-FILE-ius5rcpagrnu5wsvjdbb\/preview-image.png\" width=\"220\" height=\"55\" alt=\"image.png (75\u00d7716 px, 7 KB)\" \/\u003e\u003c\/a\u003e\u003c\/div\u003e\u003c\/p\u003e\n\n\u003cp\u003eBroken down more to comment on it ...\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003ethere were \u003ctt class=\"remarkup-monospaced\"\u003e2,135\u003c\/tt\u003e commits to React\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI didn't get this number, but 1830 instead for react\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eIn 2019, there were \u003ctt class=\"remarkup-monospaced\"\u003e230\u003c\/tt\u003e (excluding \u003ca href=\"https:\/\/github.com\/vue-bot\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-bot\u003c\/a\u003e) commits to Vue\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI would include the bot..\u003cbr \/\u003e\nThe same changes probably happen in the react repo, just they are not automated.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003e2 contributors individually made more commits to React than the total number of commits to Vue.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eNot sure that is a good measure of much either\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eAnother option that I think should be considered is using React instead of Vue.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIt was considered (see task description)\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eWe believe that the only libraries which currently satisfy all of the requirements above are React and Vue.js.\u003c\/p\u003e\u003c\/blockquote\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_540\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5812722\" id=\"5812722\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_539\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_166\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5812722\" data-sigil=\"has-tooltip\" data-meta=\"0_538\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 12:55 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 12:55:23 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_536\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_537\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_167\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eWhen choosing a framework, the most important in my view is that the chosen framework be tailored to the specific needs of the project and the community's experience. I think this aspect should be explored in detail as well, so in the next 1 or 2 decades (until these frameworks are superseded and we have this discussion again), we get the best out of the chosen framework.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eCompared to React, Vue puts a bit more focus on approachability. Making sure people who know basics such as: HTML, JavaScript, and CSS can pick it up as fast as possible. \u003ca href=\"https:\/\/web.archive.org\/web\/20170603052649\/https:\/\/betweenthewires.org\/2016\/11\/03\/evan-you\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e(1)\u003c\/a\u003e\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eWikimedians are primarily not developers, we are familiar with document processing and templates. \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/syntax.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eVue templates\u003c\/a\u003e are similar to wikitext templates, however much simpler and friendly.\u003cbr \/\u003e\nReact JSX however, is wrapped into javascript. This difference might be insignificant for an experienced developer, but it is added complexity for a non-developer who wants to get involved in design work.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue is excellent for creating interactive multi-page apps. It allows you to quickly import the core library and inject Vue into the existing pages. You don\u2019t even need to use components for simpler features.\u003cbr \/\u003e\n\u003cstrong\u003eAlthough Vue is well-suited for developing large SPAs, it wasn\u2019t created for this purpose. As your project grows, reusing HTML templates becomes a pain compared to JSX syntax.\u003c\/strong\u003e \u003ca href=\"https:\/\/www.mindk.com\/blog\/react-vs-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e(2)\u003c\/a\u003e\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eGenerally React is designed with webapps in mind, whereas Vue also favors simple use-cases. The differences are small but reflect a different focus. \u003cstrong\u003eIn my view, our purposes are better aligned with Vue's: MediaWiki is not an app and familiarity of the syntax means less barriers to entry.\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003cp\u003eThis choice is for our primary web presence where we work with articles. It affects the skins, navbar, notifications (Echo), search tool, history, logs, watchlist, editor: the tools that are part of a common frame (layout). These tools are focused on document-processing.\u003c\/p\u003e\n\n\u003cp\u003eMore technical and complicated tools - for ex. statistics - need not be constrained by this choice. If another framework is better equipped for those purposes, that should be used, independent of the framework used for presenting articles. For ex. I can imagine that the developer of a specific statistical tool would want or need to use a specific component only available in one framework. These tools don't need to be integrated with the primary interface, therefore the choice is up to the developer. Even if it would be integrated, using both frameworks is somewhat wasteful, but possible.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003eWhatever the choice will be, the primary purpose of this RfC is the introduction of a modern, reactive framework and the actual choice is of secondary importance.\u003c\/strong\u003e\u003cbr \/\u003e\nThe choice is not as fundamental and binding as the choice of php7 vs. hhmv: that was a low-level change that influenced all projects. The choice of a UI framework has less impact.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eRegarding the future of these frameworks:\u003c\/h6\u003e\n\n\u003cp\u003eThe speed at which web frameworks and paradigms come and go, I expect both Vue and React to be superseded within 5 years (numbers are arbitrary) by a new, yet not as popular approach and deprecated within 10 years in favor of the new technology. In a decade I expect this discussion to happen again to choose the new technology of that time. When choosing a framework, we are choosing it for this timespan only.\u003c\/p\u003e\n\n\u003cp\u003eBoth frameworks have been around for 5+ years and have a notable community. If the creators of these frameworks would change their path in a problematic way, the communities would be able to keep alive and up-to-date these frameworks with current browsers, only the technology itself would stop advancing. That's all that Wikimedia needs: most of our web presence currently uses old technologies, that still works. 10 years from now that wouldn't be more an issue, than now.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_549\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3o3vze4ef5t3jqvz6jgg\/PHID-FILE-3ctxfqflh2mwdle6gexw\/alphanumeric_aleo-white_T.png-_146268-255%2C255%2C255%2C0.7.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Tarrow\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5812745\" id=\"5812745\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_548\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Tarrow\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_169\"\u003eTarrow\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5812745\" data-sigil=\"has-tooltip\" data-meta=\"0_547\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 12:57 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 12:57:29 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_545\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_546\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_168\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5812101\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_36\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5812101\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Legoktm\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_39\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Legoktm\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\n\n\u003cblockquote\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDoes not require me to \u003ctt class=\"remarkup-monospaced\"\u003enpm install\u003c\/tt\u003e stuff off the internet just to run client-side MW JavaScript (e.g. all PHP dependencies are audited\/manually reviewed and then checked into git in mediawiki\/vendor).\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI believe that either react or vue could be included in a php-vendor-like git repo we control. It could even be just checked in as a library to resources\/src\/. Similar to the way we currently ship jQuery.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003esoftware freedom\/redistributor side (with my Debian partially hat on):\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eMediaWiki tarballs must ship the preferred form of modifying the JavaScript code, not a bunch of minified files ("Corresponding Source" in GPL lingo)\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eCould we ship either react or vue in the same way we do jQuery in the tarballs? I don't think this RFC is about running some build step so as far as I can tell no code would be transformed or minified before run time. There is (\u003ca href=\"\/T199004\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_37\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT199004\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e) where maybe this point would be important though?\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eThis should not introduce dependencies upon things that aren't already included in most Linux distributions\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI don't think this specifically introduces any extra dependencies. Perhaps this is also important in the (vaguely?) related build step ticket (\u003ca href=\"\/T199004\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_38\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT199004\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e).\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eAlso, what exactly is this going to replace\/obsolete if successfully adopted? Are we going to drop all of jQuery\/OOUI\/mustache\/etc. in favor of vue.js?\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eAs I read it I think the RFC isn't proposing that. In the description it mentions an initially limited scope.\u003c\/p\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eTask Description says:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e[Adoption should] be limited to one or two case-study projects that fall within the upcoming Desktop Refresh project. These should be small-scale, discrete features which would rely on client-side interactivity regardless of how they were implemented.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI'm not sure I feel like I'm competent to discuss how effective the modern frameworks this RFC discusses are on the track record of security issues. Maybe someone from FAWG can comment?\u003c\/p\u003e\n\n\u003cp\u003eI'm also not really that confident about discussing how they encourage best practices re XSS etc. I found the vue docs to be fairly readable: \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/security.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/vuejs.org\/v2\/guide\/security.html\u003c\/a\u003e which suggests to me that in most cases things are sanitised and the smell to look for is \u003ctt class=\"remarkup-monospaced\"\u003ev-html\u003c\/tt\u003e which is the way to shove un-escaped stuff in. Again maybe a FAWG person could add anything more they talked about on this.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_559\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5813806\" id=\"5813806\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_558\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_170\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5813806\" data-sigil=\"has-tooltip\" data-meta=\"0_557\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 9:25 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 21:25:23 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_555\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_556\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_171\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5802492\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_41\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5802492\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Tonina_Zhelyazkova_WMDE\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_43\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Tonina_Zhelyazkova_WMDE\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5800460\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_40\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5800460\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_42\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI forgot to mention that both WordPress (as of \u003ca href=\"https:\/\/wordpress.org\/support\/wordpress-version\/version-5-0\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eversion 5.0\u003c\/a\u003e) and Drupal (\u003ca href=\"https:\/\/dri.es\/drupal-looking-to-adopt-react\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003efuture\u003c\/a\u003e) use React. I think it might be wise to consult with these two projects and see why they chose React over Vue.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eOne can have the opposite argument: Wouldn't it be wise to consult with big projects, which use Vue, as to \u003ca href=\"https:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewhy they chose it?\u003c\/a\u003e\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eIt would be wise to explore a few projects why they chose either framework, but so far I've only found Gitlab's reasoning linked by Tonina.\u003cbr \/\u003e\nInstead, I'll pick some reasons from neutral comparisons, starting with the more concise, aiming to be neutral myself. Long post, summary at the end.\u003c\/p\u003e\n\n\u003ch5 class=\"remarkup-header\"\u003eComparison A: \u003ca href=\"https:\/\/www.mobileappdaily.com\/2018\/08\/20\/reactjs-vs-vuejs\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mobileappdaily.com\/2018\/08\/20\/reactjs-vs-vuejs\u003c\/a\u003e\u003c\/h5\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eWhen To Deploy React.js\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWhile developing a complex app\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWhen developing both Mobile and Web App\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eFor community support\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eWhy Use React.JS?\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eNo need to rewrite the code: When using React Native for building an interactive user interface, there is no need for the developer to write the code from the scratch and it saves all the extra effort while increasing the efficiency at the same time.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eComponents can be reused: The component-specific structure of React gives offers the facility to develop applications using an agile approach, which is simplified for the developer with the help of the reusable components.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eReactJS is a single codebase: Developers often have to write app's code separately for different platforms like iOS and Android but with the React JavaScript framework this issue is resolved as it is a single codebase.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eCompatibility with third-party plugins: Another huge reason to use this JavaScript framework is that react.js provides great compatibility with third-party plugins without facing any speed or memory space issue.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eWhen To Deploy Vue.js\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWhile developing a web app having templates\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWhen developing a simple category app\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWhen racing against time\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eWhy Use Vue.JS?\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eReduced optimization efforts: The component's dependencies are automatically tracked in Vue.JS and during its render that's why the system is aware of when to re-render thus, reducing the optimization efforts.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eOfficial support: Although both React and Vue provide robust Routing Solutions, but when it comes to official support corners Vue.js leads react. In Vue native, the state management and routing libraries are officially backed up, unlike react.js updates.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eEase-of-use: As this uses the standard HTML-based templates, the revamping process of an already existing app becomes much easier. This ease-of-use has made Vue a popular framework with the reusable templates and effective structure.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eComparison B: \u003ca href=\"https:\/\/www.codeinwp.com\/blog\/angular-vs-vue-vs-react\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.codeinwp.com\/blog\/angular-vs-vue-vs-react\/\u003c\/a\u003e (December 11, 2019)\u003c\/h5\u003e\n\n\u003cblockquote\u003e\u003cp\u003eReact, interestingly, combines the UI and behavior of components. For instance, here is the code to create a hello world component in React. In React, the same part of the code is responsible for creating a UI element and dictating its behavior.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003cem\u003e My note: \u003c\/em\u003e This is a benefit in highly interactive, complex UIs, where the DOM is strongly coupled with the functionality and often change together. The change can be made in one place.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue: Further, you can also use pre-processors in Vue rather than CSS, which is a great functionality. Vue is great when it comes to integration with other libraries, like Bootstrap.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003cem\u003e My note: \u003c\/em\u003e MediaWiki style sheets are coded in LESS and pre-processed to generate CSS.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eComparison C: \u003ca href=\"https:\/\/www.mindk.com\/blog\/react-vs-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mindk.com\/blog\/react-vs-vue\/\u003c\/a\u003e (December, 2018)\u003c\/h5\u003e\n\n\u003cblockquote\u003e\u003ch6 class=\"remarkup-header\"\u003etemplating vs JSX\u003c\/h6\u003e\n\n\u003cp\u003eAny valid HTML can be a Vue template. You can add JS functionality with bindings and custom directives (attributes). \u003cstrong\u003eTemplates allow you to gradually migrate your project to Vue.\u003c\/strong\u003e The framework has a great degree of customization allowing you to:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eUse SCSS or CSS scoping instead of CSS;\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eWrite your code in preprocessors like Pug;\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eJSX gives you the versatility of a full programming language with temporary variables, flow controls, and referencing JS values directly in scope. JSX also supports sophisticated IDE features like autocomplete, type checking, or linting.\u003c\/p\u003e\n\n\u003cp\u003eIn the end, the choice between JSX and templates comes down to personal preference. \u003cstrong\u003eJSX can feel more powerful and flexible\u003c\/strong\u003e while templates offer a clear separation of concerns preventing you from injecting too much logic into views. \u003cstrong\u003eFinally, designers and HTML developers are seldom used to JSX which makes collaboration a bit of a problem for UI\/UX-heavy teams.\u003c\/strong\u003e\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eDocumentation\u003c\/h6\u003e\n\n\u003cp\u003eVue has wonderful docs and its API references are one of the best in the industry. They\u2019re well-written, clear and accessible dealing with pretty much everything you need to know to create Vue applications.\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eUnlike React, \u003cstrong\u003e the docs are translated in several languages in addition to English. \u003c\/strong\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eFor better or worse, Vue is more opinionated than React with many issues having a clear answer in the docs.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eReact\u2019s documentation pales in comparison with Vue\u2019s. It goes through the basics of React development and includes some advanced concepts but the presentation isn\u2019t as accessible or well-structured. What\u2019s more, it doesn\u2019t include the detailed overview of React ecosystem like in Vue\u2019s docs.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eScalability\u003c\/h6\u003e\n\n\u003cp\u003eWith front-end frameworks, scalability comes in two flavors: expanding a single-page application (SPA) and adding more pages to a traditional MPA.\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eVue is excellent for creating interactive multi-page apps. It allows you to quickly import the core library and inject Vue into the existing pages. You don\u2019t even need to use components for simpler features.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eAlthough Vue is well-suited for developing large SPAs, it wasn\u2019t created for this purpose. As your project grows, reusing HTML templates becomes a pain compared to JSX syntax.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/blockquote\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eComparison D: \u003ca href=\"https:\/\/www.dunebook.com\/react-vs-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.dunebook.com\/react-vs-vue\/\u003c\/a\u003e (December 5, 2019)\u003c\/h5\u003e\n\n\u003cblockquote\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eVue is simpler in terms of syntax. In React, all components express their UI within render functions using JSX, a declarative XML-like syntax that works within JavaScript.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eReact has a CBA with pure JavaScript; a declarative style; and powerful, developer-friendly DOM abstractions.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eReact provides outstanding performance thanks to its virtual DOM and smart-reconciliation algorithm, which, as a side benefit, lets you perform testing without spinning up (starting) a headless browser.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eVue is incrementally adaptable, with a core library focused on user interfaces that you can use in existing projects\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eVue is approachable\u2013the beginners can pick up the library easily, and the confirmed developers can be productive very quickly\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eVue is a little smaller & faster than react. It doesn\u2019t mean Vue is better than react.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eIn a nutshell, if you need to build a lightweight or medium-sized application, or maybe even prototype an idea? Use Vue. Building a larger application? Use React\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/blockquote\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eGitLab - Vue: \u003ca href=\"https:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\u003c\/a\u003e\u003c\/h5\u003e\n\n\u003cblockquote\u003e\u003cp\u003eSimplicity and ease of use. Primarily what drew us to Vue.js is that it allows our team to easily write simple JavaScript. Getting started with Vue.js is extremely easy. Its source code is very readable, and the documentation is the only tutorial you'll ever need. You don't need external libraries.\u003cbr \/\u003e\n[...] what we love about Vue.js: it's an elegant combination of structure and simplicity.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eVue - official comparison: \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/comparison.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/vuejs.org\/v2\/guide\/comparison.html\u003c\/a\u003e\u003c\/h5\u003e\n\n\u003cblockquote\u003e\u003cp\u003eIn React, everything is just JavaScript. Not only are HTML structures expressed via JSX, the recent trends also tend to put CSS management inside JavaScript as well. This approach has its own benefits, but also comes with various trade-offs that may not seem worthwhile for every developer. Vue embraces classic web technologies and builds on top of them. \u003cbr \/\u003e\n[...] as the default experience we offer templates as a simpler alternative [to JSX]. Any valid HTML is also a valid Vue template, and this leads to a few advantages of its own:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eFor many developers who have been working with HTML, templates feel more natural to read and write. The preference itself can be somewhat subjective, but if it makes the developer more productive then the benefit is objective.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHTML-based templates make it much easier to progressively migrate existing applications to take advantage of Vue\u2019s reactivity features.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eIt also makes it much easier for designers and less experienced developers to parse and contribute to the codebase.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eYou can even use pre-processors such as Pug (formerly known as Jade) to author your Vue templates.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eVue has even taken [the state management] model a step further with Vuex, an Elm-inspired state management solution that integrates deeply into Vue that we think offers a superior development experience.\u003cbr \/\u003e\nAnother important difference between these offerings is that Vue\u2019s companion libraries for state management and routing (among other concerns) are all officially supported and kept up-to-date with the core library. React instead chooses to leave these concerns to the community, creating a more fragmented ecosystem. Being more popular though, React\u2019s ecosystem is considerably richer than Vue\u2019s.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eWordPress and Drupal\u003c\/h5\u003e\n\n\u003cp\u003eI haven't found the answer why WordPress uses React. Here are a few references that popped up while searching:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/ma.tt\/2017\/09\/on-react-and-wordpress\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/ma.tt\/2017\/09\/on-react-and-wordpress\/\u003c\/a\u003e On the 2017 patent clause debacle\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/techcrunch.com\/2017\/09\/15\/wordpress-to-ditch-react-library-over-facebook-patent-clause-risk\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/techcrunch.com\/2017\/09\/15\/wordpress-to-ditch-react-library-over-facebook-patent-clause-risk\/\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/www.drupal.org\/blog\/drupal-looking-to-adopt-react\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.drupal.org\/blog\/drupal-looking-to-adopt-react\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cblockquote\u003e\u003cp\u003eWhile a few people named alternative options, React was our preferred option, by far, \u003cstrong\u003edue to its high degree of adoption\u003c\/strong\u003e, component-based and \u003cstrong\u003eunopinionated nature\u003c\/strong\u003e, and its \u003cstrong\u003epotential to make Drupal developers' skills more future-proof\u003c\/strong\u003e.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003e\u003cem\u003e My note: \u003c\/em\u003e WordPress being the most popular CMS, the most likely reason for their choice - similar to Drupal's - is the adoption (popularity) of React.\u003c\/p\u003e\n\n\u003cp\u003eIt is worth to note that - if not for WordPress -, today we might not be considering React because of that license clause they tried to implement.\u003cbr \/\u003e\nRegardless of who's the backer of a project, unwanted turns can happen. It's only the balance between the community's and the backer's power that can prevent that from happening. In this sense the creators of Vue have less power to make a change to their project that would make Vue unsuitable for MediaWiki.\u003cbr \/\u003e\nAll in all I find it very unlikely that any of these projects would take a severe turn, that necessitates abandoning that project. If it might happen, it could happen to any of them (it almost happened to React).\u003c\/p\u003e\n\n\u003ch5 class=\"remarkup-header\"\u003eSources\u003c\/h5\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/www.mobileappdaily.com\/2018\/08\/20\/reactjs-vs-vuejs\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mobileappdaily.com\/2018\/08\/20\/reactjs-vs-vuejs\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/www.codeinwp.com\/blog\/angular-vs-vue-vs-react\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.codeinwp.com\/blog\/angular-vs-vue-vs-react\/\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/www.mindk.com\/blog\/react-vs-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mindk.com\/blog\/react-vs-vue\/\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/www.dunebook.com\/react-vs-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.dunebook.com\/react-vs-vue\/\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/about.gitlab.com\/blog\/2016\/10\/20\/why-we-chose-vue\/\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/comparison.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/vuejs.org\/v2\/guide\/comparison.html\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eNot cited:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"http:\/\/artjoker.net\/tpost\/t01e93ecgl-react-vs-vuejs-which-to-choose\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttp:\/\/artjoker.net\/tpost\/t01e93ecgl-react-vs-vuejs-which-to-choose\u003c\/a\u003e\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/medium.com\/javascript-in-plain-english\/i-created-the-exact-same-app-in-react-and-vue-here-are-the-differences-e9a1ae8077fd\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/medium.com\/javascript-in-plain-english\/i-created-the-exact-same-app-in-react-and-vue-here-are-the-differences-e9a1ae8077fd\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\n\u003ch5 class=\"remarkup-header\"\u003eSummary\u003c\/h5\u003e\n\n\u003cp\u003eVue and React has the same purpose, the same or very similar features (in the core or in popular plugins). These differ mostly in the details and implementation approach. I'm listing only those features that distingush these frameworks for MediaWiki's purpose.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eReact:\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eJSX (React's template functionality) has a more streamlined developer experience in highly complex applications with a lot of business logic written in javascript.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eCSS is part of the JSX code, closely coupled with the javascript and the html.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eThe developer has to think about performance optimization (\u003ctt class=\"remarkup-monospaced\"\u003eshouldComponentUpdate\u003c\/tt\u003e property) \u2014 a common source of hard-to-debug, circumstantial bugs.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eReact Native for mobile platforms is a mature product. Components can be shared between the webapp and the mobile app.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eVue:\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHTML templates have a more designer-friendly syntax\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eSupport for LESS, SCSS, Pug (compact html syntax) pre-processors.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eThe developer does not have to think about when a component should be updated. There's built-in dependency tracking, which has a computational price that, but that cannot be observed in tests. Vue actually has a small performance advatage in many tests.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eEase-of-use, well organized documentation (some translated to multiple languages).\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003e\u003ca href=\"https:\/\/vue-native.io\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eVue Native\u003c\/a\u003e exists. It has a small market share.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eBoth frameworks have:\u003c\/h6\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ereactive DOM updates (data binding) -- core feature\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDOM generation from components (templates) -- core feature\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003erouter (URL parsing, browser history navigation) -- plugin for React, in core for Vue\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eserver-side rendering (for search engines and fast first-page loading time, old browsers and low-bandwidth connections) -- plugin for both\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\n\n\u003ch6 class=\"remarkup-header\"\u003eSummary summary\u003c\/h6\u003e\n\n\u003cp\u003eThe above cited comparisons seem to agree that React is better suited for complex, business-logic-heavy single-page applications. MediaWiki is neither of these. \u003cbr \/\u003e\nProjects that could benefit from React's focus on javascript-first design - like statistics and specialized batch management interfaces - are free to choose their own framework, or even combine the two, independently of the framework used for the primary document-viewer and editor interface.\u003c\/p\u003e\n\n\u003cp\u003eThe articles also seem to agree on that Vue - in comparison to React - is better equipped for the document-focused multi-page environment of MediaWiki,\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003efor designers and casual developers - who are of a much greater number in the Wikimedia Movement, than highly experienced developers,\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003efor progressively (incrementally) transitioning the existing MediaWiki code-base.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eI've only explored the developer experience with the citations above: in my view that's what predetermines how easily developers and volunteers can adapt to the new framework, which in turn determines how many contributors will get involved with the development.\u003cbr \/\u003e\nThe community and stability of these frameworks has been investigated above and I have no concerns about the availability of either framework in the next decade, after which presumably there will be another framework to adopt.\u003c\/p\u003e\n\n\u003ch6 class=\"remarkup-header\"\u003eConclusion\u003c\/h6\u003e\n\n\u003cp\u003eBased on this research I have the strong opinion that Vue offers an easier transition and easier adaptation for designers and volunteers. These benefits could result in more involvement from the community in development, resulting in more UI improvements and hopefully bridging the gap between developers and community members to some extent.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_568\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5813866\" id=\"5813866\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_567\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_172\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5813866\" data-sigil=\"has-tooltip\" data-meta=\"0_566\"\u003e\u003cspan class=\"screen-only\"\u003eJan 17 2020, 9:53 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-17 21:53:33 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_564\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_565\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_173\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eThe Great Wall of Text above might be easier to read on-wiki: \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/User:Aron_Manning\/Which_web_framework_to_choose\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/www.mediawiki.org\/wiki\/User:Aron_Manning\/Which_web_framework_to_choose\u003c\/a\u003e\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_571\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/2gffy5bww6ck2ynuxnpz\/PHID-FILE-jyvkjrrdy7c4mbtu7gb3\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/RhinosF1\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5815182\" id=\"5815182\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_570\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/RhinosF1\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_174\"\u003eRhinosF1\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5815182\" data-sigil=\"has-tooltip\" data-meta=\"0_569\"\u003e\u003cspan class=\"screen-only\"\u003eJan 19 2020, 11:36 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-19 11:36:24 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_576\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3iigldu33itwnv6qred6\/PHID-FILE-crux7ijupvjze2tyjdst\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Osnard\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5815791\" id=\"5815791\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_573\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-emoji-2 phui-timeline-token\" data-meta=\"0_574\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Osnard\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_175\"\u003eOsnard\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5815791\" data-sigil=\"has-tooltip\" data-meta=\"0_572\"\u003e\u003cspan class=\"screen-only\"\u003eJan 20 2020, 7:37 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-20 07:37:27 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_575\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Osnard\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_176\"\u003eOsnard\u003c\/a\u003e subscribed.\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_585\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5821419\" id=\"5821419\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_584\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_177\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5821419\" data-sigil=\"has-tooltip\" data-meta=\"0_583\"\u003e\u003cspan class=\"screen-only\"\u003eJan 21 2020, 10:29 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-21 22:29:07 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_581\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_582\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_178\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5812071\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_44\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5812071\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Ladsgroup\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_45\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Ladsgroup\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e[citation needed]\u003c\/p\u003e\n\n\u003cp\u003e(An example, yahoo being the most popular search engine back in early days)\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI wasn't able to locate any research papers on the subject, perhaps because of my lack of proper search terms, or (more likely?) they are behind a paywall (or maybe the research hasn't been done).\u003c\/p\u003e\n\n\u003cp\u003eI was able to find an \u003ca href=\"https:\/\/www.cio.com\/article\/2925639\/18-enterprise-software-selection-risks.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003earticle\u003c\/a\u003e by \u003ca href=\"https:\/\/www.cio.com\/author\/Chris-Doig\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eChris Doig\u003c\/a\u003e where they list a lot of risks associated with choosing a software vendor (in our case, either \u003cem\u003eFacebook\u003c\/em\u003e or \u003cem\u003eVue Technology, LLC\u003c\/em\u003e) one of them being:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eWhen you buy from companies like Microsoft, IBM, Oracle there is little risk of them going out of business. Unfortunately, larger vendors are seldom hotbeds of innovation. If you want more innovative software, you may need to consider smaller vendors or startups. Then there is the risk that these companies are not what they appear to be.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eNot only are newer business \u003ca href=\"https:\/\/www.bls.gov\/opub\/mlr\/2007\/09\/art1full.pdf\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eless likely to survive\u003c\/a\u003e (only 28% survive to their 6th year), but companies who fail to reach a positive balance sheet (whether for-profit or non-profit), cannot continue to operate.\u003c\/p\u003e\n\n\u003cp\u003eContinuing your example, if we were living in 1997, choosing Yahoo! as the search engine would be a wise choice. Between a publicly-traded company and a company that doesn't even exist yet (Google), of course Yahoo! is the better choice. Only by using \u003ca href=\"https:\/\/en.wikipedia.org\/wiki\/Hindsight_bias\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehindsight bias\u003c\/a\u003e can we realize that we should have waited a year and chosen a startup company that nobody had ever heard of. Without knowing the future, it's impossible to know what new technology is going to replace both Vue & React. However, choosing the less risky of the two is a way to mitigate business risk.\u003c\/p\u003e\n\n\u003cp\u003eTo be clear, it is perfectly fine to take on the increased risk of choosing Vue over React. Like the article mentions, there are other factors you would want to take into consideration (like how some in this thread have mentioned how quickly the projects respond to security concerns, etc.). However, it is important to acknowledge the risk we are taking on, and I think it's important to talk about how we plan to mitigate that risk.\u003c\/p\u003e\n\n\u003cp\u003eI think the greatest risk to Vue, is that \u003cem\u003eVue Technology, LLC\u003c\/em\u003e goes out of business and the foundation is forced to either start investing heavily in its maintenance or migrating to a different framework. If we want to take on that risk, that is \u003cem\u003etotally fine\u003c\/em\u003e, but can we call \u003ca href=\"https:\/\/en.wikipedia.org\/wiki\/Call_a_spade_a_spade\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ea spade a spade\u003c\/a\u003e and acknowledge the business risk associated with choosing Vue?\u003c\/p\u003e\n\n\u003cp\u003eIn a lot of ways, this reminds me of how WordPress and Drupal chose jQuery, and Joomla! chose \u003ca href=\"https:\/\/mootools.net\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eMooTools\u003c\/a\u003e. I have no idea which one is technically superior, but I don't want to be the Joomla of this story. Of course, none of us know the future, but if we're going to walk into this, I hope we can with our eyes wide open.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_596\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bcjpua4r57wx43zxfghi\/PHID-FILE-he7vv2keyzoo67ipt2um\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/egardner\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/22\/\" data-sigil=\"has-tooltip\" data-meta=\"0_594\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-graduation-cap\" data-meta=\"0_595\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5821811\" id=\"5821811\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_593\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_179\"\u003eegardner\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5821811\" data-sigil=\"has-tooltip\" data-meta=\"0_592\"\u003e\u003cspan class=\"screen-only\"\u003eJan 22 2020, 1:57 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-22 01:57:28 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_590\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_591\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_180\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eI wanted to join in this discussion earlier, but I spent the last two weeks fighting off the flu. Thanks to everyone who has participated so far, it's great to see interest in this topic. I'd like to try and speak to a few points that have been raised so far. I'll paraphrase some of the questions I've seen upthread:\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003e1. Does this proposal change the way Mediawiki uses Javascript generally (i.e. by introducing new requirements in browser or on server)?\u003c\/strong\u003e\u003cbr \/\u003e\nI think the answer to this question is no\u00a0\u2013\u00a0at least not immediately. The focus of this RFC is to change the way we build the interactive, JS-heavy elements we are already shipping to users. For now, that means using a strategy of progressive enhancement, where server-rendered content would be replaced by more interactive, UI elements written in Vue.\u003c\/p\u003e\n\n\u003cp\u003eThere was a lot of interest within the FAWG in server-side rendering (SSR), so I think that's something that we will continue to explore. It may even be possible to get server-rendered Vue components \u003ca href=\"https:\/\/ssr.vuejs.org\/guide\/non-node.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewithout needing an external Node.js service\u003c\/a\u003e, by relying on something like PHP v8JS. Being able to define a single set of server-rendered UI components that would work for users with and without JS (as opposed to having to duplicate our UI in JS and PHP) would be a big step forward in terms of productivity.\u003c\/p\u003e\n\n\u003cp\u003eBut any change of this nature would be the subject of a new RFC; using a tool like Vue keeps these possibilities open in the future but doesn't force us into working this way until we decide that we want to.\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003e2. Would Vue replace OOJS\/OOUI\/jQuery UI\/etc?\u003c\/strong\u003e\u003cbr \/\u003e\nIn the short term, no \u2013\u00a0we want to develop on or two test features to ensure that this is a good addition to our technology stack. See the discussion of pilot projects, etc. in the RFC.\u003c\/p\u003e\n\n\u003cp\u003eBut ultimately (assuming the initial projects are successful), probably so. A lot of work went in to OOJS and OOUI, but the unfortunate reality is that basically no one outside the Wiki-universe uses these tools or pays attention to them. The entire paradigm of how these tools work is increasingly out of sync with contemporary standards in web development (non-reactive, everything is mutable, heavy reliance on jQuery not just for DOM manipulation but for promises & object utilities, Java-style inheritance, etc). I think we would be better of if we were able to adopt some more commonly-used solutions instead of having to maintain our own separate ecosystem for everything.\u003c\/p\u003e\n\n\u003cp\u003eOf course this is easier said than done, so any migration away from something like OOUI would be a big process that would take some time. Porting over the tools that have been developed internally for accessibility and internationalization would be a top priority. But if we could pull this off, the rest of the web could benefit from the Foundation's work in these areas (OOUI has great accessibility but no one else is using it unfortunately).\u003c\/p\u003e\n\n\u003cp\u003e\u003cstrong\u003e3. Vue vs React\u003c\/strong\u003e\u003cbr \/\u003e\nBoth Vue and React are great, and to some extent the choice between these two frameworks is always going to be a bit subjective. However, I think that there are some areas where Vue has advantages when it comes to our specific use-case.\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eIt will be much easier to integrate Vue into the Mediawiki tech stack as it presently exists because it doesn't require a build step. Ultimately we \u003cem\u003eshould\u003c\/em\u003e adopt some kind of front-end build step, but I have no idea when that will happen. As \u003ca href=\"\/p\/Catrope\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_46\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Catrope\u003c\/span\u003e\u003c\/a\u003e mentioned upthread, we think support for single-file Vue components in ResourceLoader is doable in the near future\u00a0\u2013\u00a0provided the JS in those components is written in ES5 (Vue supports this just fine; components are not written using \u003ctt class=\"remarkup-monospaced\"\u003eClass\u003c\/tt\u003e declaractions, etc. as is common in React). It's a lot harder to experiment with a new framework if you're forced to choose between 1) re-wiring a lot of your infrastructure, even before your experiment is finished, or 2) using the tool in a very non-standard way (harder to evaluate). The downside is that we have to ship the Vue template compiler in production, but we can stop doing this once we have a better build system in place. Vue's full (runtime + compiler) build comes in to ~33KB gzipped, so I think this is a compromise we can live with for the time being.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eHTML templates: Vue components are defined in HTML and CSS, the classic languages of the web. I think this will make it much easier for designers, less-experienced developers, and interested people generally to understand what is going on (\u003cspan class=\"phabricator-remarkup-mention-unknown\"\u003e@AronManning\u003c\/span\u003e mentioned this above and I'm in agreement). As a large open-source project, I think anything we can do in the interest of transparency \/ lowering barriers to contribution is worth considering.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eDo more with fewer libraries: this was one of the points in the original RFC text above \u2013\u00a0if we need to explicitly whitelist, audit, and vendor a limited set of 3rd-party libraries (similar to how PHP dependencies are handled) then I think that using Vue means fewer things to keep track of.\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eStability: I know that not everyone is in agreement here, but I still think Vue has some advantages in terms of stability vs. React. The React team seems to be sending very strong signals to the community that the Hooks API is the future (they are recommending people write new code based on Hooks instead of classical components, for example). Not long ago there was a similar big push to write as much as possible using stateless functional components. Even if the core React library itself has handled breaking changes pretty gracefully, the idea of what constitutes "best practices" seems to have gone through a lot of changes. This is all magnified once you enter the world of 3rd-party libraries: what's the currently-accepted "best" way to handle CSS in React components, for example? See the re-write\/breaking changes in React-router for another example. In contrast, Vue has been good about offering alternative ways of doing things while preserving a stable set of practices for basic use. Vue v3 will add support for something very similar to React's Hooks API but the idea is that it's not something that everyone will need to reach for. Similarly, you can write stateless functional components (and even use JSX) in Vue but it's only going to be useful to do so in particular edge cases.\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eAgain, these are not reasons why "Vue is better than React" \u2013\u00a0but I do think that a case can be made that Vue is a better fit for the needs of the Foundation right now.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_606\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5822020\" id=\"5822020\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_605\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_181\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5822020\" data-sigil=\"has-tooltip\" data-meta=\"0_604\"\u003e\u003cspan class=\"screen-only\"\u003eJan 22 2020, 7:05 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-22 07:05:42 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_602\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_603\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_182\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5821419\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_47\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5821419\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_48\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI think the greatest risk to Vue, is that \u003cem\u003eVue Technology, LLC\u003c\/em\u003e goes out of business and the foundation is forced to either start investing heavily in its maintenance or migrating to a different framework. If we want to take on that risk, that is \u003cem\u003etotally fine\u003c\/em\u003e, but can we call \u003ca href=\"https:\/\/en.wikipedia.org\/wiki\/Call_a_spade_a_spade\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ea spade a spade\u003c\/a\u003e and acknowledge the business risk associated with choosing Vue?\u003c\/p\u003e\n\n\u003cp\u003eIn a lot of ways, this reminds me of how WordPress and Drupal chose jQuery, and Joomla! chose \u003ca href=\"https:\/\/mootools.net\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eMooTools\u003c\/a\u003e. I have no idea which one is technically superior, but I don't want to be the Joomla of this story. Of course, none of us know the future, but if we're going to walk into this, I hope we can with our eyes wide open.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eYes, we should understand the risks. I tried to measure the popularity with search trends:\u003cbr \/\u003e\nReact js as a search term is 1.5x times as popular as Vue js in the past year. (\u003ca href=\"https:\/\/trends.google.com\/trends\/explore?q=vue%20js,react%20js\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e1\u003c\/a\u003e).\u003cbr \/\u003e\nIn the last 5 years, it was 3x times as popular (\u003ca href=\"https:\/\/trends.google.com\/trends\/explore?date=2015-01-01%202020-01-22&q=vue%20js,react%20js\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e2015-2020\u003c\/a\u003e)\u003cbr \/\u003e\nJquery in its first 5 years was ca. 15x as popular as Mootools (\u003ca href=\"https:\/\/trends.google.com\/trends\/explore?date=2007-01-01%202012-01-01&q=jquery,mootools\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e2007-2012\u003c\/a\u003e)\u003cbr \/\u003e\njQuery vs MooTools can be hardly compared to React vs Vue, Mootools never really took off the ground (\u003ca href=\"https:\/\/trends.google.com\/trends\/explore?date=2006-01-01%202020-01-01&q=jquery,mootools\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003e2006-2020\u003c\/a\u003e).\u003c\/p\u003e\n\n\u003cp\u003eTo neutrally assess the risks, we have to consider Facebook's \u003ca href=\"https:\/\/techcrunch.com\/2017\/09\/15\/wordpress-to-ditch-react-library-over-facebook-patent-clause-risk\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eattempt to change the license of React\u003c\/a\u003e. Vue is not in a position where such an attempt could be made.\u003c\/p\u003e\n\n\u003cp\u003eVue now has a significant corporate user-base (\u003ca href=\"https:\/\/codersera.com\/blog\/vuejs-vs-reactjs-comparison\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003esource\u003c\/a\u003e), presumably thanks to the easy, progressive transitioning:\u003c\/p\u003e\n\n\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eFacebook, Netflix (also using React)\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003eAdobe, Grammarly, Behance, Xiaomi, Alibaba, Codeship, Gitlab, Laracasts, ...\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003cp\u003eIf the backing of Vue would collapse, GitLab alone could take on the development: that would be cheaper than migrating to React.\u003cbr \/\u003e\nIt is very unlikely, that all these users would abandon Vue if the unexpected happens. Even if they do, the WMF is already developing and maintaining a UI framework on its own. Keeping alive Vue would not be much harder.\u003c\/p\u003e\n\n\u003cp\u003eI have the impression that Vue and React entail similar risks, as far as that can be measured. What's bigger risk - Vue's smaller backing, or Facebook's greed - cannot be objectively evaluated.\u003cbr \/\u003e\nWith both frameworks, it is very unlikely that their community would let go of it, should anything happen.\u003c\/p\u003e\n\n\u003cp\u003eUnderstanding these risks, I'm sure the technical benefits, which are a reality today, far outweigh a possible, but unlikely worst-case scenario in a theoretical future.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_615\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7in5i7j22jezecbaetth\/PHID-FILE-n36covhe4ti6wyqvrnsg\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Michael\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5822411\" id=\"5822411\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_614\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Michael\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_183\"\u003eMichael\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5822411\" data-sigil=\"has-tooltip\" data-meta=\"0_613\"\u003e\u003cspan class=\"screen-only\"\u003eJan 22 2020, 10:54 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-22 10:54:40 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_611\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_612\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_184\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5822020\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_49\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5822020\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003cspan class=\"phabricator-remarkup-mention-unknown\"\u003e@AronManning\u003c\/span\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eTo neutrally asses the risks, we have to consider Facebook's \u003ca href=\"https:\/\/techcrunch.com\/2017\/09\/15\/wordpress-to-ditch-react-library-over-facebook-patent-clause-risk\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eattempt to change the license of React\u003c\/a\u003e. Vue is not in a position where such an attempt could be made.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eWhile I agree with the overall decision, we shouldn't misrepresent what happened. Facebook \u003cstrong\u003e\u003ca href=\"https:\/\/github.com\/facebook\/react\/commits\/master\/LICENSE\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003edid\u003c\/a\u003e\u003c\/strong\u003e change the license of react in 2014 and nobody cared for years until it blew up in 2017. Also, their defensive patent clause only concerned people\/companies that own\/create software patents. And since we are writing GPL software, that should never affect us, right?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_618\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/pdvgf6bwbegtkliymkn2\/PHID-FILE-xratrbg4u35mp2lcxckv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Masumrezarock100\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5822426\" id=\"5822426\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-times phui-timeline-icon\" data-meta=\"0_617\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Masumrezarock100\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_185\"\u003eMasumrezarock100\u003c\/a\u003e unsubscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5822426\" data-sigil=\"has-tooltip\" data-meta=\"0_616\"\u003e\u003cspan class=\"screen-only\"\u003eJan 22 2020, 10:58 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-22 10:58:30 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_628\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5823432\" id=\"5823432\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_627\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_186\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5823432\" data-sigil=\"has-tooltip\" data-meta=\"0_626\"\u003e\u003cspan class=\"screen-only\"\u003eJan 22 2020, 4:32 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-22 16:32:32 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_624\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_625\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_187\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5822411\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_51\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5822411\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Michael\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_52\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Michael\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5822020\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_50\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5822020\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003cspan class=\"phabricator-remarkup-mention-unknown\"\u003e@AronManning\u003c\/span\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eTo neutrally assess the risks, we have to consider Facebook's \u003ca href=\"https:\/\/techcrunch.com\/2017\/09\/15\/wordpress-to-ditch-react-library-over-facebook-patent-clause-risk\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eattempt to change the license of React\u003c\/a\u003e. Vue is not in a position where such an attempt could be made.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eWhile I agree with the overall decision, we shouldn't misrepresent what happened. Facebook \u003cstrong\u003e\u003ca href=\"https:\/\/github.com\/facebook\/react\/commits\/master\/LICENSE\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003edid\u003c\/a\u003e\u003c\/strong\u003e change the license of react in 2014 and nobody cared for years until it blew up in 2017. Also, their defensive patent clause only concerned people\/companies that own\/create software patents. And since we are writing GPL software, that should never affect us, right?\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThanks for clarifying. The licensing question is of no interest (or concern) to me, thus I mentioned it superficially, as a drawback that can happen if the backer is \u003cem\u003etoo big\u003c\/em\u003e.\u003cbr \/\u003e\nAlso to clarify: I do not make a decision for the WMF, only for myself. I wish to present the reasons, instead.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_637\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5826886\" id=\"5826886\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_636\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_188\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5826886\" data-sigil=\"has-tooltip\" data-meta=\"0_635\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 2:32 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 14:32:55 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_633\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_634\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_189\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5812363\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_53\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5812363\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Addshore\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_55\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@Addshore\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eI don't believe anyone has said any of these frameworks are the "best in the world", so this analogy probably doesn't make sense.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI did say:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eObviously this isn't a perfect analogy, but I hope it helps illustrate my point.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIf it doesn't help then please feel free to discard it.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eIf you count the vue repos that are linked in the readme you end up with 1105 commits (vue) vs 1830 (react) based on some bad maths by me....\u003cbr \/\u003e\nThis means vue probably has around 60% of the commits of react, which isnt as dramatic as the\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI may have not been clear. I'm not concerned with the \u003cem\u003enumber\u003c\/em\u003e of commits, as that would be difficult (if not impossible) to compare. I'm concerend with the \u003cem\u003edistribution\u003c\/em\u003e of those commits. If the claim is that:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue.js development is not led by a single corporation whose goals may diverge from those of the WMF.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003ethere doesn't seem to be any evidence to support that claim, and in fact, there appears to evidence to support the exact opposite. In fact, it is not only led by a single corporation (Vue Technology, LLC) it is led by a single individual whose goals may diverge from those of the WMF. (based on the distribution of commits, who owns the trademarks, domain names, etc.).\u003c\/p\u003e\n\n\u003cp\u003eI have been wondering over the past few days if it would be less risk for Wikimedia Foundation to simply purchase Vue Technology, LLC (and all of its assets). At least that would prevent the company from going out of business or being purchased by another company like Facebook.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003e\u003cdiv class=\"phabricator-remarkup-embed-layout-left\"\u003e\u003ca href=\"https:\/\/phab.wmfusercontent.org\/file\/data\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png\" class=\"phabricator-remarkup-embed-image\" data-sigil=\"lightboxable\" data-meta=\"0_54\"\u003e\u003cimg src=\"https:\/\/phab.wmfusercontent.org\/file\/data\/nvwoyor2vkt5ksidq3gy\/PHID-FILE-ius5rcpagrnu5wsvjdbb\/preview-image.png\" width=\"220\" height=\"55\" alt=\"image.png (75\u00d7716 px, 7 KB)\" \/\u003e\u003c\/a\u003e\u003c\/div\u003e\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI'm really confused by this. \u003ca href=\"https:\/\/github.com\/vuejs\/vue-router\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-router\u003c\/a\u003e, \u003ca href=\"https:\/\/github.com\/vuejs\/vue-cli\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-cli\u003c\/a\u003e, and \u003ca href=\"https:\/\/github.com\/vuejs\/vue-loader\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003evue-loader\u003c\/a\u003e are not libraries that React offers (though they are offered \u003ca href=\"https:\/\/github.com\/ReactTraining\/react-router\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eby\u003c\/a\u003e \u003ca href=\"https:\/\/github.com\/facebook\/create-react-app\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethe\u003c\/a\u003e \u003ca href=\"https:\/\/github.com\/babel\/babel\/tree\/master\/packages\/babel-preset-react\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ecommunity\u003c\/a\u003e). These aren't libraries that are part of the proposal. Are we considering adding these to MediaWiki as well? If so I can take a look at the comparable libraries from React. Again, I'm not concerned with the number of commits or even number of contributors, but if we're going to claim that Vue is a "better" choice because it isn't controlled by a single company (individual) then I think we should be able to backup that claim.\u003c\/p\u003e\n\n\u003cp\u003eI feel like the proposal bounces back and forth between something \u003cem\u003elightweight\u003c\/em\u003e and something that has "batteries included" as stated in:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eVue.js may enable us to rely on fewer libraries as dependencies\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIf that is a goal, it might be beneficial to consider other frameworks like \u003ca href=\"https:\/\/nextjs.org\/\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eNext.js\u003c\/a\u003e, though I imagine that is out of scope for this RFC.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eI didn't get this number, but 1830 instead for react\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI may have used the wrong \u003ctt class=\"remarkup-monospaced\"\u003egit\u003c\/tt\u003e command. I did something \u003ca href=\"https:\/\/stackoverflow.com\/a\/36080228\/864374\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003elike this\u003c\/a\u003e, but that might be wrong. :)\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eI would include the bot..\u003cbr \/\u003e\nThe same changes probably happen in the react repo, just they are not automated.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eEven if I include the bot, it doesn't change the \u003cem\u003edistribution\u003c\/em\u003e of commits, which I assume is part of the methodology used to make the claim \u003cem\u003eagainst\u003c\/em\u003e React in the first place.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cblockquote\u003e\u003cp\u003eAnother option that I think should be considered is using React instead of Vue.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIt was considered (see task description)\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eApologies, I meant "reconsider." Restated for clarity:\u003cbr \/\u003e\nAnother option might be to \u003cstrong\u003ereconsider\u003c\/strong\u003e using React instead of Vue.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_647\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827132\" id=\"5827132\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_646\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_190\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5827132\" data-sigil=\"has-tooltip\" data-meta=\"0_645\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 4:07 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 16:07:27 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_643\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_644\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_191\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5821811\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_56\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5821811\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_57\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cul class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003eIt will be much easier to integrate Vue into the Mediawiki tech stack as it presently exists because it doesn't require a build step.\u003c\/li\u003e\n\u003c\/ul\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI haven't dived into the rest of this, but this really stood out to me.\u003c\/p\u003e\n\n\u003cp\u003eThe \u003ca href=\"https:\/\/reactjs.org\/docs\/add-react-to-a-website.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eReact docs\u003c\/a\u003e are very explicit:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eWith a few lines of code and \u003cstrong\u003eno build tooling\u003c\/strong\u003e, try React in a small part of your website. You can then either gradually expand its presence, or keep it contained to a few dynamic widgets.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eThe rest of \u003ca href=\"https:\/\/reactjs.org\/docs\/add-react-to-a-website.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ethat page\u003c\/a\u003e explains how to do just that. I would recommend reading it and trying it out. :)\u003c\/p\u003e\n\n\u003cp\u003eAlso, React can be used \u003ca href=\"https:\/\/reactjs.org\/docs\/react-without-es6.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ewithout ES6\u003c\/a\u003e (though it might be better to use \u003ca href=\"https:\/\/reactjs.org\/docs\/components-and-props.html#function-and-class-components\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003efunctional components\u003c\/a\u003e instead of \u003ctt class=\"remarkup-monospaced\"\u003ecreateReactClass()\u003c\/tt\u003e)\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_658\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bcjpua4r57wx43zxfghi\/PHID-FILE-he7vv2keyzoo67ipt2um\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/egardner\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/22\/\" data-sigil=\"has-tooltip\" data-meta=\"0_656\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-graduation-cap\" data-meta=\"0_657\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827364\" id=\"5827364\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_655\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_192\"\u003eegardner\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827364\" data-sigil=\"has-tooltip\" data-meta=\"0_654\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 4:55 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 16:55:53 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_652\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_653\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_193\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_58\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e regarding need for a build step: there's some discussion of this in the original RFC; it's true that React can be used sans build-step with the CreateElement API.\u003c\/p\u003e\n\n\u003cp\u003eBut I think this is still a second-class experience of using the framework. Useful for edge cases but probably not the way we'd want to encourage for wide-scale adoption here. To get on the "happy path" with React you need JSX (and probably ES6) which means you need a transpiler like Babel. As I've mentioned upthread, I strongly believe that we should look into adopting a front-end build step that could include a tool like Babel, but this is a big change to our infrastructure and probably still at least 1 year away.\u003c\/p\u003e\n\n\u003cp\u003eVue has something very similar to React's CreateElement API (the \u003ctt class=\"remarkup-monospaced\"\u003eh()\u003c\/tt\u003e function, etc). But it's own happy path (single-file components, aka .vue files) is going to be easier for us to get to from where we are currently. This is because vue files are basically HTML files, so we can work with them using our existing infrastructure (ResourceLoader).\u003c\/p\u003e\n\n\u003cp\u003eThere will be some limitations to this approach:\u003c\/p\u003e\n\n\u003col class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ewe'll rely on Vue's built-in template compiler for the time being, which means shipping a little bit of additional code in production;\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003ethe JS part of the components will need to be in ES5 for now;\u003c\/li\u003e\n\u003cli class=\"remarkup-list-item\"\u003ewe won't have the ability to write scoped styles for components (but we can still write normal CSS and keep things all in one file for clarity).\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003ePersonally I think these are limitations we can live with (plus they will hopefully be temporary). This is what I meant when I said it would be easier to integrate Vue into our tech stack. With a small amount of work we can get most of the advantages of using the framework in the intended way.\u003c\/p\u003e\n\n\u003cp\u003eSince React and Vue are ultimately very similar, I think that considerations of what the migration path looks like for us to use one or the other can helpfully inform our decision of which one to use.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_667\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/mvnjsjyjh423h34xyed4\/PHID-FILE-3txutfsig4f57m4sphwq\/b888c9-alphanumeric_lato-white_A.png-255%2C255%2C255%2C0.4.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/AnneT\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827532\" id=\"5827532\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_666\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/AnneT\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_194\"\u003eAnneT\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827532\" data-sigil=\"has-tooltip\" data-meta=\"0_665\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 5:45 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 17:45:30 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_663\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_664\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_195\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eOn the notion of using React without a build step: in my opinion, it's not worth using React at all if you're not going to use JSX. Even this sample code from the React docs is pretty gross compared to HTML, JSX, or a templating language:\u003c\/p\u003e\n\n\u003cdiv class=\"remarkup-code-block\" data-code-lang=\"text\" data-sigil=\"remarkup-code-block\"\u003e\u003cpre class=\"remarkup-code\"\u003ereturn e(\n 'button',\n { onClick: () => this.setState({ liked: true }) },\n 'Like'\n);\u003c\/pre\u003e\u003c\/div\u003e\n\n\u003cp\u003eImagine something more complex than a single, simple HTML element. We'd have the same issue we have now in extensions in which markup is built with jQuery, which makes it difficult add\/change things quickly or to audit markup for accessibility.\u003c\/p\u003e\n\n\u003cp\u003eIn my ideal world, we'd implement a build step in tandem with introducing Vue or React, but I know that's not likely to be possible, so I see the merit of using Vue over React in this case.\u003c\/p\u003e\n\n\u003cp\u003eAlso, on a higher level, I'm so excited at the prospect of introducing a modern JS framework into our workflow Foundation-wide and believe this will be incredibly beneficial to us in the short and long terms. Thanks \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_59\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e and FAWG!\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_676\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827542\" id=\"5827542\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_675\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_196\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827542\" data-sigil=\"has-tooltip\" data-meta=\"0_674\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 5:57 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 17:57:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_672\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_673\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_197\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5827364\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_60\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5827364\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_64\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_63\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e regarding need for a build step: there's some discussion of this in the original RFC; it's true that React can be used sans build-step with the CreateElement API.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI explained in \u003ca href=\"\/T241180#5800440\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_61\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5800440\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e that some of the points in the original RFC seem to be incorrect, but please correct any misunderstanding I might have.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eBut I think this is still a second-class experience of using the framework. Useful for edge cases but probably not the way we'd want to encourage for wide-scale adoption here. To get on the "happy path" with React you need JSX (and probably ES6) which means you need a transpiler like Babel.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI'm not sure how you got this impression. Following the call to action on React's homepage leads me to the \u003ca href=\"https:\/\/reactjs.org\/docs\/getting-started.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eGetting Started\u003c\/a\u003e page which again, reiterates:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eReact has been designed from the start for gradual adoption, and you can use as little or as much React as you need. Whether you want to get a taste of React, add some interactivity to a simple HTML page, or start a complex React-powered app, the links in this section will help you get started.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eAnd on the same page explains how you can add it \u003ca href=\"https:\/\/reactjs.org\/docs\/getting-started.html#add-react-to-a-website\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eto any webpage\u003c\/a\u003e in just a few steps. That seems to be exactly what we want to do? It doesn't even require us to use ResourceLoader and as I explained in \u003ca href=\"\/T241180#5800440\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_62\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5800440\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, it is what React gets compiled into anyways.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eSince React and Vue are ultimately very similar, I think that considerations of what the migration path looks like for us to use one or the other can helpfully inform our decision of which one to use.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eAbsolutely, but this is somewhat putting the cart before the horse. We have no idea if MediaWiki will \u003cstrong\u003eever\u003c\/strong\u003e have a build step. At the same time, I don't think it's necessarily wise to effectively shift that build step to ResourceLoader (which kinda feels like the solution that is being proposed?) In other words, the \u003cem\u003eideal\u003c\/em\u003e migration may never happen, so are we content with not having a build step? (i.e. what happens when the temporary solution becomes permanent?)\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_685\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/iir5jbauup65hgghykcf\/PHID-FILE-65jkktwkqmfsnzefodpb\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/matthiasmullie\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827745\" id=\"5827745\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_684\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/matthiasmullie\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_198\"\u003ematthiasmullie\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827745\" data-sigil=\"has-tooltip\" data-meta=\"0_683\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 6:58 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 18:58:07 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_681\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_682\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_199\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5827542\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_65\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5827542\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/dbarratt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_66\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@dbarratt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eAbsolutely, but this is somewhat putting the cart before the horse. We have no idea if MediaWiki will \u003cstrong\u003eever\u003c\/strong\u003e have a build step. At the same time, I don't think it's necessarily wise to effectively shift that build step to ResourceLoader (which kinda feels like the solution that is being proposed?) In other words, the \u003cem\u003eideal\u003c\/em\u003e migration may never happen, so are we content with not having a build step? (i.e. what happens when the temporary solution becomes permanent?)\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eAIUI, this is exactly the reason (well, one of, but an important one) why they consider Vue over React: the ability to move forward with more modern solutions without additional requirements (that might never happen), and why it'd be limited to some experiments at first, so it'd be possible to back out if the additional requirements don't work out and it's found to be unpractical without them.\u003cbr \/\u003e\nIn other words: the \u003cem\u003eideal\u003c\/em\u003e migration may never happen - are we content with not (trying to) advancing our technology at all?\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_688\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ud6rnp3rmsr7saljq7p2\/PHID-FILE-vkf4uailm7tdvok63w6m\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/ovasileva\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5827829\" id=\"5827829\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_687\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/ovasileva\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_200\"\u003eovasileva\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827829\" data-sigil=\"has-tooltip\" data-meta=\"0_686\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 7:20 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 19:20:25 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_697\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7lqct4xp34rumpqkxymb\/PHID-FILE-7yq2n2z3fpbyyfcqlhwu\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/dbarratt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5827958\" id=\"5827958\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_696\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/dbarratt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_201\"\u003edbarratt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5827958\" data-sigil=\"has-tooltip\" data-meta=\"0_695\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 7:58 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 19:58:41 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_693\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_694\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_202\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eFrom the Vue \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/deployment.html#Pre-Compiling-Templates\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003edocs\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eWhen using in-DOM templates or in-JavaScript template strings, the template-to-render-function compilation is performed on the fly. This is usually fast enough in most cases, but is best avoided if your application is performance-sensitive.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eIt's hard to imagine that Wikipedia is not a "performance-sensitive" application.\u003c\/p\u003e\n\n\u003cp\u003eTo be fair, React also provides a mechanism to \u003ca href=\"https:\/\/reactjs.org\/docs\/add-react-to-a-website.html#quickly-try-jsx\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ecompile JSX at runtime\u003c\/a\u003e, but also warns against it:\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eThis approach is fine for learning and creating simple demos. However, it makes your website slow and isn\u2019t suitable for production.\u003c\/p\u003e\u003c\/blockquote\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_708\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bcjpua4r57wx43zxfghi\/PHID-FILE-he7vv2keyzoo67ipt2um\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/egardner\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/22\/\" data-sigil=\"has-tooltip\" data-meta=\"0_706\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-graduation-cap\" data-meta=\"0_707\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5828095\" id=\"5828095\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_705\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_203\"\u003eegardner\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5828095\" data-sigil=\"has-tooltip\" data-meta=\"0_704\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 8:51 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 20:51:19 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_702\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_703\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_204\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eWe will definitely need to study any possible performance impacts from using the template compiler at runtime. If it turns out that relying on the compiler at runtime causes significant perf regressions then we will need to come up with another solution (and re-open some points in this discussion).\u003c\/p\u003e\n\n\u003cp\u003eBut I'm actually optimistic about this. MediaWiki's ResourceLoader already supports \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Manual:HTML_templates#mw.template_(client-side)\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eclient-side template compilation using Mustache Templates\u003c\/a\u003e. This works fine and is used in a number of places in production now. The functionality we're talking about here is very similar. Browsers are very good at parsing strings into DOM nodes quickly and efficiently.\u003c\/p\u003e\n\n\u003cp\u003eI think that what the Vue docs mean by "performance sensitive" applications is a situation where you are creating hundreds or thousands of DOM nodes on the fly, or changing things very rapidly (something like a real-time stocks dashboard, for example). I could see how in these kinds of situations, you'd want to make things as efficient as possible and in-browser template compilation could slow things down.\u003c\/p\u003e\n\n\u003cp\u003eDoing the equivalent thing with React involves shipping the full Babel runtime, which I think is a lot more performance-intensive than parsing strings into DOM elements; now you are dealing with an entire Turing-complete programming language, so parsing is more involved and you need a bigger runtime to do it. I think there is a difference between saying "it makes your website slow and isn't suitable for production" vs. "This is usually fast enough in most cases but is best avoided if your app is performance sensitive."\u003c\/p\u003e\n\n\u003cp\u003eAnyway, incorporating Babel\/Webpack\/etc. into our build system has many potential benefits in terms of performance (it would be great to tree-shake libraries like OOUI so that only the pieces which are needed get shipped, for example). But I don't know if or when that will happen.\u003c\/p\u003e\n\n\u003cp\u003eMy hope is that using Vue can provide us a lot of the advantages of modern JS with a few minor trade-offs based on our unique infrastructure. If those trade-offs end up being not so minor, then we can re-evaluate.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_718\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3226j44b4ygmmdwjc64b\/PHID-FILE-h2ttujkqt45ga5n6dnoh\/profile-IMG_2065_edit.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jhernandez\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5828334\" id=\"5828334\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_717\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jhernandez\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_205\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Jhernandez\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5828334\" data-sigil=\"has-tooltip\" data-meta=\"0_716\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 10:30 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 22:30:18 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_714\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_715\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_206\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5827364\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_67\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5827364\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_68\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eThere will be some limitations to this approach:\u003c\/p\u003e\n\n\u003col class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ewe'll rely on Vue's built-in template compiler for the time being, which means shipping a little bit of additional code in production;\u003c\/li\u003e\n\u003c\/ol\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThis is irresponsible. For the amount of traffic we have, the amount of extra computation we are going to force on millions of clients because of our inability to get our process together.\u003c\/p\u003e\n\n\u003cp\u003eUser experience should be first and foremost, before developer experience. This is usually said when using new tools for the sake of devx but in our case it is using old tools and avoiding change.\u003c\/p\u003e\n\n\u003cp\u003eI strongly suggest the FAWG puts out a recommendation that any code using Vue has to be pre-compiled, either in the repo at commit or deploy time, or if it is gadgets\/scripts, client side \u003cstrong\u003eonce when saving the gadget, and not on read\/run\u003c\/strong\u003e.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_727\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3226j44b4ygmmdwjc64b\/PHID-FILE-h2ttujkqt45ga5n6dnoh\/profile-IMG_2065_edit.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jhernandez\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5828363\" id=\"5828363\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_726\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jhernandez\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_207\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Jhernandez\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5828363\" data-sigil=\"has-tooltip\" data-meta=\"0_725\"\u003e\u003cspan class=\"screen-only\"\u003eJan 23 2020, 10:43 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-23 22:43:22 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_723\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_724\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_208\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5828095\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_69\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5828095\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_71\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eWe will definitely need to study any possible performance impacts from using the template compiler at runtime. If it turns out that relying on the compiler at runtime causes significant perf regressions then we will need to come up with another solution (and re-open some points in this discussion).\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eLooking forward to this research.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eBut I'm actually optimistic about this. MediaWiki's ResourceLoader already supports \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Manual:HTML_templates#mw.template_(client-side)\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eclient-side template compilation using Mustache Templates\u003c\/a\u003e. This works fine and is used in a number of places in production now. The functionality we're talking about here is very similar. Browsers are very good at parsing strings into DOM nodes quickly and efficiently.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eProduct Web went the extra mile to avoid shipping the mustache compiler by default on desktop because of page previews, \u003ca href=\"\/p\/Niedzielski\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_72\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Niedzielski\u003c\/span\u003e\u003c\/a\u003e wrote about it here: \u003ca href=\"\/J90\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_70\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eBlog Post: mustache.js replaced with JavaScript template literals in Extension:Popups\u003c\/span\u003e\u003c\/a\u003e.\u003c\/p\u003e\n\n\u003cp\u003eWe should hold ourselves to a higher standard and be strict about the performance impact of our decisions, everything matters.\u003c\/p\u003e\n\n\u003cp\u003eShipping the vue compiler to production is like we have fully given up from the start.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_738\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3mqrant63ndishc5nu7f\/PHID-FILE-w5bxnf47gmyrdcr6bath\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Niedzielski\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/8\/\" data-sigil=\"has-tooltip\" data-meta=\"0_736\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-life-ring\" data-meta=\"0_737\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5828483\" id=\"5828483\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_735\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Niedzielski\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_209\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Niedzielski\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5828483\" data-sigil=\"has-tooltip\" data-meta=\"0_734\"\u003e\u003cspan class=\"screen-only\"\u003eJan 24 2020, 12:24 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-24 00:24:58 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_732\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_733\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_210\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eHey \u003ca href=\"\/p\/Jhernandez\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_74\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Jhernandez\u003c\/span\u003e\u003c\/a\u003e! Point taken but of course the integration won't be perfect or frictionless initially. As I understand it, FAWG and Web will be iterating on the initial solution well beyond this RFC so there will be opportunity to uncover integration complexities (such as the ones you noted) that would arise from \u003cstrong\u003eany\u003c\/strong\u003e choice and I'll be bold enough to say that I'm probably more optimistic than you that we'll figure them out :]\u003c\/p\u003e\n\n\u003cp\u003eFor example, MobileFrontend already has the ability to ship fully compiled assets. The changes you helped plan for the \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Reading\/Web\/Projects\/Invest_in_the_MobileFrontend_%26_MinervaNeue_frontend_architecture\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eMobileFrontend architecture project\u003c\/a\u003e (and which are now in production for Popups and MobileFrontend) demonstrate that we have a lot of flexibility for consuming arbitrary frameworks efficiently. I don't know whether Vue.js will require similar changes or not but these past experiences have proven to be quite successful for the desktop and mobile sites and give me confidence that it's a solvable problem. To your point about template parser overhead, I think that having the ability to parse Vue templates would be useful at least for development builds during initial iterations and I'm sure that will be explored more then.\u003c\/p\u003e\n\n\u003cp\u003eThis RFC in my view posits that 1) what we have isn't working 2) Vue.js is not only a viable alternative to what's currently available but a compelling one 3) a change is needed and will likely be imperfect at least at first. I'm 100% for it. I'm confident you'll agree with at least #1 (some points are documented in \u003ca href=\"\/T225453\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_73\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT225453\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e for others).\u003c\/p\u003e\n\n\u003cp\u003eOn a personal note, I wish we had had this tooling (or something similar) back when you were leading these efforts on behalf of Web. I believe that had your good ideas (in many ways repeated here but with different framing) met with nourishment instead of being extinguished, we would have something quite remarkable now to show for it but the timing wasn't right it seems. What's most important to me is that these changes are happening now even if it it's a few years tardy. I can't wait to start building things with this stuff!\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_751\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/de7rnuucgwsa2u5ow7bn\/PHID-FILE-towcvgcmdefffz27aphc\/profile-gravatar.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Catrope\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/18\/\" data-sigil=\"has-tooltip\" data-meta=\"0_747\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-star\" data-meta=\"0_748\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/5\/\" data-sigil=\"has-tooltip\" data-meta=\"0_749\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_750\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5828558\" id=\"5828558\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_746\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Catrope\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_211\"\u003eCatrope\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5828558\" data-sigil=\"has-tooltip\" data-meta=\"0_745\"\u003e\u003cspan class=\"screen-only\"\u003eJan 24 2020, 1:15 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-24 01:15:42 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_743\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_744\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_212\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5828334\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_76\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5828334\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/Jhernandez\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_79\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e\u003cspan class=\"phui-tag-dot phui-tag-color-grey\"\u003e\u003c\/span\u003e@Jhernandez\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5827364\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_75\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5827364\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_78\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eThere will be some limitations to this approach:\u003c\/p\u003e\n\n\u003col class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ewe'll rely on Vue's built-in template compiler for the time being, which means shipping a little bit of additional code in production;\u003c\/li\u003e\n\u003c\/ol\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThis is irresponsible. For the amount of traffic we have, the amount of extra computation we are going to force on millions of clients because of our inability to get our process together.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eAs \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_80\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e said: let's measure how much slower client-side compilation actually is, so that we can make an informed decision. Unless the performance impact is really bad, though, I would strongly favor starting with client-side compilation first, then working on a way to avoid it \/ make it faster second.\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eI strongly suggest the FAWG puts out a recommendation that any code using Vue has to be pre-compiled, either in the repo at commit or deploy time, or if it is gadgets\/scripts, client side \u003cstrong\u003eonce when saving the gadget, and not on read\/run\u003c\/strong\u003e.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eAs I pointed out before, there's a discussion about front-end build steps over at \u003ca href=\"\/T199004\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_77\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT199004\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, and it's a complicated topic. In particular, there are significant hurdles to running build steps like template compilation at build time. We could, as you suggest, pre-compile templates and commit them to the repository (Flow does this for Handlebars templates that are used server-side). However, your comment about "once when saving the gadget, not on read\/run" gave me another idea.\u003c\/p\u003e\n\n\u003cp\u003eShelling out to the Vue template compiler from ResourceLoader is likely to be too slow for \u003cem\u003eon the fly\u003c\/em\u003e processing (we should measure this and find out). But maybe we could \u003cem\u003elazy-compile\u003c\/em\u003e templates instead. At first, we'd serve the template uncompiled, and have the client compile it. But at the same time, we'd kick off a job that compiles the template and stores\/caches the result. Then, when the module is requested again, we could get the compiled template from cache and serve that instead. This would work even if shelling out to the template compiler is slow, because clients don't have to wait for the compilation step to complete: we just serve them a uncompiled template until the compiled template appears in the cache. There would be some challenges here with ResourceLoader's caching (it'd want to cache the uncompiled version for 30 days, we'd have to find a way around that) and with knowing when we would and wouldn't have to ship the Vue compiler to the client, but I think this is a concept worth exploring. We should also measure how slow shelling out to the Vue compiler actually is, if it isn't terribly slow we might even be able to do it on the fly (with heavy caching, like we do for LESS compilation).\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_761\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/p5u77oqyov4ap3ps6cpc\/PHID-FILE-gjasyhyux3vagjtellif\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Demian\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5829523\" id=\"5829523\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_760\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Demian\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_213\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e Demian\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5829523\" data-sigil=\"has-tooltip\" data-meta=\"0_759\"\u003e\u003cspan class=\"screen-only\"\u003eJan 24 2020, 1:32 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-24 13:32:57 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_757\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_758\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_214\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5827364\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_81\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5827364\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_82\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003col class=\"remarkup-list\"\u003e\n\u003cli class=\"remarkup-list-item\"\u003ewe'll rely on Vue's built-in template compiler for the time being, which means shipping a little bit of additional code in production;\u003c\/li\u003e\n\u003c\/ol\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThere were some exaggerated concerns about shipping a 30KiB "compiler" to the clients. This should not be confused with the complexity and execution time of let's say a C++ compiler or - more extreme - a Rust compiler.\u003cbr \/\u003e\nI don't have observations about the speed of the template generation, but I've noticed some potential savings in regards of the quantity of javascript written and shipped.\u003c\/p\u003e\n\n\u003cp\u003eWhen loading an article on enwiki, the largest js package that gets loaded is a bit above 496 KiB (139 KiB compressed). When I click an image and mmv gets loaded that's another 560 KiB compacted (93 KiB compressed) javascript code + 202 KiB jquery.color (56 KiB compressed) + a few small packages. Altogether 7 packages, \u003cstrong\u003e1488 KiB (356 KiB compressed)\u003c\/strong\u003e.\u003cbr \/\u003e\nMmv's half MB code is largely ooui and html dom generation. Generating a few lines of html takes a page of js (ad-hoc comparison). Should it be rewritten using Vue, I expect big part of that code would become unnecessary.\u003cbr \/\u003e\nLoading that code and generating mmv's dom often takes upwards of 1 second... I wonder if a lightbox in Vue would take that long to appear.\u003c\/p\u003e\n\n\u003cp\u003eTo compare this with \u003ca href=\"https:\/\/www.wikiwand.com\/en\/Wikipedia\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eWikiWand\u003c\/a\u003e: it loads \u003cstrong\u003e532 KiB (ca. 240 KiB compressed)\u003c\/strong\u003e js together with the minified angular and jquery. This includes the lightbox\/mediaviewer in the initial package.\u003c\/p\u003e\n\n\u003cp\u003eI'm looking forward to the performance tests.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_770\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ahnkehb5yzydqcgkmqra\/PHID-FILE-jwc6m4xc2qoc7jfj2v5y\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/stjn\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5829598\" id=\"5829598\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_769\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/stjn\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_215\"\u003estjn\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5829598\" data-sigil=\"has-tooltip\" data-meta=\"0_768\"\u003e\u003cspan class=\"screen-only\"\u003eJan 24 2020, 2:30 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-24 14:30:59 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_766\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_767\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_216\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5828095\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_83\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5828095\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/egardner\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_84\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@egardner\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eWe will definitely need to study any possible performance impacts from using the template compiler at runtime. If it turns out that relying on the compiler at runtime causes significant perf regressions then we will need to come up with another solution (and re-open some points in this discussion).\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eI would, again, suggest to test this on already JS-heavy sides of Wikipedia, and not on something like Desktop Improvements project. Loading additional 150 Kb of Vue.js + compiler (ungzipped, execution time also matters in this) to our existing 600 Kb or so would be absolutely detrimental to performance for something like a language switch toggle.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_781\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/bcjpua4r57wx43zxfghi\/PHID-FILE-he7vv2keyzoo67ipt2um\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/egardner\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-blue \" href=\"\/badges\/view\/22\/\" data-sigil=\"has-tooltip\" data-meta=\"0_779\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-graduation-cap\" data-meta=\"0_780\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5830340\" id=\"5830340\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_778\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/egardner\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_217\"\u003eegardner\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5830340\" data-sigil=\"has-tooltip\" data-meta=\"0_777\"\u003e\u003cspan class=\"screen-only\"\u003eJan 24 2020, 7:21 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-24 19:21:08 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_775\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_776\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_218\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003e\u003cspan class=\"phabricator-remarkup-mention-unknown\"\u003e@AronManning\u003c\/span\u003e I think a tool like MMV is exactly the kind of thing that could really benefit from a Vue.js re-write. The UploadWizard tool is another.\u003c\/p\u003e\n\n\u003cp\u003eThere are already several places where we are shipping large, complex JS packages to the user for features that exist mostly or entirely in the client side. Consolidating all these separate tools to use one library for rendering could actually save bandwidth and eliminate some redundancy in the code that we ship.\u003c\/p\u003e\n\n\u003cp\u003eRE: developer vs user experience \u2013\u00a0I am not advocating for just recklessly tossing in random NPM packages to our runtime dependencies and adding 1MB+ of JS on every page request because "it works fine on my machine". User experience should come before developer experience, but right now I would argue that our front-end developer experience is crippled. This negatively impacts user experience in other ways, because it slows or prevents the development of new features, makes it harder to fix bugs, etc.\u003c\/p\u003e\n\n\u003cp\u003eIf 33KB of JS can address some of those problems then we should at least investigate to see if a reasonable trade-off can be made. I don't think we're being irresponsible if we study the impact and make an informed decision.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_784\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/mr7hcutieyzdo37v6c46\/PHID-FILE-ticwxtvfm7llv3fsu5ib\/777cad-alphanumeric_lato-dark_J.png-255%2C255%2C255%2C0.4.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Jc86035\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5833767\" id=\"5833767\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_783\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Jc86035\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_219\"\u003eJc86035\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5833767\" data-sigil=\"has-tooltip\" data-meta=\"0_782\"\u003e\u003cspan class=\"screen-only\"\u003eJan 27 2020, 11:14 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-27 11:14:28 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_787\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/ja2jvvk7rqgjkczqi4sv\/PHID-FILE-5elxaqu5owwyq2igmilb\/alphanumeric_lato-white_A.png-_3ba984-0%2C0%2C0%2C0.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/alistair3149\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5837596\" id=\"5837596\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_786\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/alistair3149\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_220\"\u003ealistair3149\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5837596\" data-sigil=\"has-tooltip\" data-meta=\"0_785\"\u003e\u003cspan class=\"screen-only\"\u003eJan 29 2020, 5:00 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-01-29 05:00:59 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_790\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/x4mgwmxc2l7gj7pflzw3\/PHID-FILE-rvjzkzxxlzyuykney6xb\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/simnalamburt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5842524\" id=\"5842524\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_789\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/simnalamburt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_221\"\u003esimnalamburt\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5842524\" data-sigil=\"has-tooltip\" data-meta=\"0_788\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 1 2020, 8:59 AM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-01 08:59:18 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_800\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/x4mgwmxc2l7gj7pflzw3\/PHID-FILE-rvjzkzxxlzyuykney6xb\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/simnalamburt\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5843150\" id=\"5843150\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_799\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/simnalamburt\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_222\"\u003esimnalamburt\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003eEdited\u003cspan class=\"visual-only\" aria-hidden=\"true\"\u003e \u00b7 \u003c\/span\u003e\u003ca href=\"#5843150\" data-sigil=\"has-tooltip\" data-meta=\"0_798\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 1 2020, 9:11 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-01 21:11:34 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_796\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_797\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_223\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eUpdate (2020-02-27T03:53+0900): "Vue is Evan You's one-person project" \u2192 "Vue core is Evan You's one-person project"\u003c\/p\u003e\n\n\u003chr class=\"remarkup-hr\" \/\u003e\n\n\u003cp\u003eHi I\u2019m Hyeon Kim and I\u2019ve used both Vue and React more than 3 years in the day job, and also have contributed to a small MediaWiki instance more than 2 years. Since I\u2019ve used both React and Vue in production for more than three years, I believe I understand the advantages and disadvantages of both projects. And I believe that I understand the technical situation of MediaWiki.\u003c\/p\u003e\n\n\u003cp\u003eI read the RFC and felt that some points about React and Vue in the RFC were different from the actual status quo. I understand that you want to choose a library that suits the needs of MediaWiki, not something that is generally preferred. I just want to say that Vue has some aspects that don't meet MediaWiki's requirements.\u003c\/p\u003e\n\n\u003cp\u003eIn summary, Vue is unstable, slowly evolving, and has sustainability issues.\u003c\/p\u003e\n\n\u003cp\u003e\u3000\u003c\/p\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003e1. Vue core is Evan You's one-person project, which poses a risk to MediaWiki's sustainability.\u003c\/h4\u003e\n\n\u003cp\u003eYes, they do have a team, but who maintains the actual Vue core is only one person[1][2], Evan You, the creator of Vue. Unfortunately, there\u2019s no active outside collaborator either.\u003c\/p\u003e\n\n\u003cp\u003e[1]: \u003ca href=\"https:\/\/github.com\/vuejs\/vue\/graphs\/contributors\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/vue\/graphs\/contributors\u003c\/a\u003e\u003cbr \/\u003e\n[2]: \u003ca href=\"https:\/\/github.com\/vuejs\/vue-next\/graphs\/contributors\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/vue-next\/graphs\/contributors\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eIf Evan is forced to stop managing Vue core due to certain circumstances, MediaWiki will have to manage Vue core or change the framework again, which is undesirable.\u003c\/p\u003e\n\n\u003cp\u003eAlso, React\u2019s decision making is more predictable and transparent than Vue. React has an RFC process and decisions are made by the consensus of the React core team. Vue has an RFC process too, but only one person Evan You decides whether to accept or reject the RFC[3].\u003c\/p\u003e\n\n\u003cp\u003e[3]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/pulls?q=is%3Apr+is%3Aclosed\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/pulls?q=is%3Apr+is%3Aclosed\u003c\/a\u003e\u003c\/p\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003e2. React evolves in a stable and reliable way, while Vue breaks APIs.\u003c\/h4\u003e\n\n\u003cp\u003eWhen Vue was upgraded from 1 to 2, there were tons of breaking changes[4]. Now, Evan You is also preparing Vue 3, which has major breaking changes[5] again: removal of the filter[6], change of v-model[7], inline-template[8], etc. This RFC mentioned the transition feature, and it\u2019ll be changed[9] too.\u003c\/p\u003e\n\n\u003cp\u003e[4]: \u003ca href=\"https:\/\/vuejs.org\/v2\/guide\/migration.html\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/vuejs.org\/v2\/guide\/migration.html\u003c\/a\u003e\u003cbr \/\u003e\n[5]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/issues?q=label%3A"breaking+change"+is%3Amerged\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/issues?q=label%3A"breaking+change"+is%3Amerged\u003c\/a\u003e\u003cbr \/\u003e\n[6]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0015-remove-filters.md\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0015-remove-filters.md\u003c\/a\u003e\u003cbr \/\u003e\n[7]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0011-v-model-api-change.md\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0011-v-model-api-change.md\u003c\/a\u003e\u003cbr \/\u003e\n[8]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0016-remove-inline-templates.md\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0016-remove-inline-templates.md\u003c\/a\u003e\u003cbr \/\u003e\n[9]: \u003ca href=\"https:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0017-transition-as-root.md\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/vuejs\/rfcs\/blob\/master\/active-rfcs\/0017-transition-as-root.md\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eOn the other hand, React has been evolved in a more stable way[10][11]. Not only the number of breaking changes was much less than Vue, but also all those breaking changes were changes of only behavior, not API. All removed APIs were deprecated a year ago, so there was an enough time for users.\u003c\/p\u003e\n\n\u003cp\u003e[10]: \u003ca href=\"https:\/\/reactjs.org\/blog\/2017\/09\/26\/react-v16.0.html#breaking-changes\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/reactjs.org\/blog\/2017\/09\/26\/react-v16.0.html#breaking-changes\u003c\/a\u003e\u003cbr \/\u003e\n[11]: \u003ca href=\"https:\/\/reactjs.org\/blog\/2016\/04\/07\/react-v15.html#breaking-changes\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/reactjs.org\/blog\/2016\/04\/07\/react-v15.html#breaking-changes\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eWhy did this difference occur? This is because React and Vue pursue different values.\u003c\/p\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003e3. The core value that the React team pursues aligns much better with the MediaWiki team.\u003c\/h4\u003e\n\n\u003cp\u003eOne of React\u2019s design principles is stability[10]. React is not only globally adopted by the community, but also heavily used by Facebook themselves. And it works as a strong incentive for Facebook to maintain backward compatibility of API.\u003c\/p\u003e\n\n\u003cp\u003e[10]: \u003ca href=\"https:\/\/reactjs.org\/docs\/design-principles.html#stability\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/reactjs.org\/docs\/design-principles.html#stability\u003c\/a\u003e\u003c\/p\u003e\n\n\u003cp\u003eHowever, Vue is a one-person project with no incentive to maintain backward compatibility despite the hard work. Evan You is already overwhelmed with managing Vue alone and can't afford to maintain API compatibility. Vue pursues multiple values as a design principle but stability is not one of them.\u003c\/p\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003e4. React is evolving much faster than Vue.\u003c\/h4\u003e\n\n\u003cp\u003eSince Vue 2.5 which was released at 2017-10-13, the development pace of Vue has seriously decreased. Since then, Vue 2.6 (2019-02-04) was the only release that had new features. And since Vue 2.6, Vue 2.x became in maintenance mode which means it\u2019s fixing only bugs and security vulnerabilities. And Vue 3 has been in preview for 2 years.\u003c\/p\u003e\n\n\u003cp\u003eWithin the same period, React evolved dramatically. Fragments, Portals, React Fiber, Suspense, Hooks. These new features impacted the whole frontend community and impacted Vue 3 too. Not to mention that React not only evolved fast but also preserved the API letting existing codes works.\u003c\/p\u003e\n\n\u003ch4 class=\"remarkup-header\"\u003e5. Bigger community, more contributors, more free lunch.\u003c\/h4\u003e\n\n\u003cp\u003eAs you mentioned, React has a much larger community with many more programmers. Which means MediaWiki can get much more potential contributors by choosing React. And MediaWiki team will be able to save more time since there are many stable libraries out there.\u003c\/p\u003e\n\n\u003cp\u003e\u3000\u003c\/p\u003e\n\n\u003cp\u003eIn summary, React will be more conducive to MediaWiki's sustainability because it's stable, evolves faster, and has a larger community. There are a few points where Vue suits better with MediaWiki, but I think the disadvantages of Vue outweigh the advantages.\u003c\/p\u003e\n\n\u003cp\u003eP.S. Please check \u003ca href=\"https:\/\/github.com\/developit\/htm\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/developit\/htm\u003c\/a\u003e. HTM is useful when you want to use React without any build tools or JSX. HTM template is a string too so maybe you\u2019ll be able to leverage ResourceLoader just like the Vue template.\u003c\/p\u003e\n\n\u003cp\u003e(\u003ca href=\"https:\/\/docs.google.com\/document\/d\/1MEX_k5DZ8vzDSY7pwtmn5ArzFYz2FzttKRqc3s8oQo4\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003eGoogle Docs Link\u003c\/a\u003e)\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_809\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/7in5i7j22jezecbaetth\/PHID-FILE-n36covhe4ti6wyqvrnsg\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Michael\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5851832\" id=\"5851832\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_808\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Michael\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_224\"\u003eMichael\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5851832\" data-sigil=\"has-tooltip\" data-meta=\"0_807\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 5 2020, 12:19 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-05 12:19:29 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_805\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_806\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_225\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\n\n\u003cblockquote class=\"remarkup-reply-block\"\u003e\n\u003cdiv class=\"remarkup-reply-head\"\u003eIn \u003ca href=\"\/T241180#5843150\" class=\"phui-tag-view phui-tag-type-object \" data-sigil=\"hovercard\" data-meta=\"0_85\"\u003e\u003cspan class=\"phui-tag-core-closed\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-object\"\u003eT241180#5843150\u003c\/span\u003e\u003c\/span\u003e\u003c\/a\u003e, \u003ca href=\"\/p\/simnalamburt\/\" class=\"phui-tag-view phui-tag-type-person \" data-sigil=\"hovercard\" data-meta=\"0_86\"\u003e\u003cspan class=\"phui-tag-core phui-tag-color-person\"\u003e@simnalamburt\u003c\/span\u003e\u003c\/a\u003e wrote:\u003c\/div\u003e\n\u003cdiv class=\"remarkup-reply-body\"\u003e\u003cp\u003eP.S. Please check \u003ca href=\"https:\/\/github.com\/developit\/htm\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps:\/\/github.com\/developit\/htm\u003c\/a\u003e. HTM is useful when you want to use React without any build tools or JSX. HTM template is a string too so maybe you\u2019ll be able to leverage ResourceLoader just like the Vue template.\u003c\/p\u003e\u003c\/div\u003e\n\u003c\/blockquote\u003e\n\n\u003cp\u003eThat sounds intriguing, but unfortunately, it uses template literals which are \u003ca href=\"https:\/\/caniuse.com\/#feat=template-literals\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003enot available in IE 11\u003c\/a\u003e. So since IE11 still considered a modern browser that gets the \u003ca href=\"https:\/\/www.mediawiki.org\/wiki\/Compatibility#Browsers\" class=\"remarkup-link\" target=\"_blank\" rel=\"noreferrer\"\u003ehighest level of support\u003c\/a\u003e from MediaWiki, we would still need a build step to ensure that all features are working there as well.\u003c\/p\u003e\n\n\u003cp\u003eI leave it to others to respond to your main points.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_813\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/qg6iwggo535pagkoqbkr\/PHID-FILE-pj4bbpforckskr5bm42m\/alphanumeric_aleo-white_W.png-_ce9793-255%2C255%2C255%2C0.4.png)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/WMDE-leszek\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5852881\" id=\"5852881\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-trophy phui-timeline-icon\" data-meta=\"0_811\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view sprite-tokens tokens-coin-4 phui-timeline-token\" data-meta=\"0_812\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003ca href=\"\/p\/WMDE-leszek\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_226\"\u003eWMDE-leszek\u003c\/a\u003e awarded a token.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5852881\" data-sigil=\"has-tooltip\" data-meta=\"0_810\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 5 2020, 5:28 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-05 17:28:21 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_824\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-major-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/pftw7tn2jgpwaqdmxbtd\/PHID-FILE-4peudqvgp45hlsggbblo\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/TK-999\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-badges\"\u003e\u003cul class=\"phui-badge-flex-view grouped flex-view-collapsed \"\u003e\u003cli class=\"phui-badge-flex-item\"\u003e\u003ca class=\"phui-badge-mini phui-badge-mini-orange \" href=\"\/badges\/view\/17\/\" data-sigil=\"has-tooltip\" data-meta=\"0_822\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-rocket\" data-meta=\"0_823\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003cdiv class=\"phui-timeline-inner-content\"\u003e\u003ca name=\"5861147\" id=\"5861147\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon phui-timeline-title-with-menu\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-comment phui-timeline-icon\" data-meta=\"0_821\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/TK-999\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_227\"\u003eTK-999\u003c\/a\u003e added a comment.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5861147\" data-sigil=\"has-tooltip\" data-meta=\"0_820\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 7 2020, 10:47 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-07 22:47:08 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003ca href=\"#\" class=\"phui-timeline-menu\" aria-haspopup=\"true\" aria-expanded=\"false\" data-sigil=\"phui-dropdown-menu\" data-meta=\"0_818\"\u003e\u003cspan class=\"aural-only\"\u003eComment Actions\u003c\/span\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-caret-down\" data-meta=\"0_819\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-core-content\"\u003e\u003cspan class=\"transaction-comment\" data-sigil=\"transaction-comment\" data-meta=\"0_228\"\u003e\u003cdiv class=\"phabricator-remarkup\"\u003e\u003cp\u003eRegarding\u003c\/p\u003e\n\n\u003cblockquote\u003e\u003cp\u003eDeveloping a new component library in any framework will need to be done in a way that aligns with Wikimedia\u2019s existing design system. Integrating any new tools we adopt into this system is a precondition to production usage and should commence as soon as possible.\u003c\/p\u003e\u003c\/blockquote\u003e\n\n\u003cp\u003eI think this component library should strive to preserve the current strong points of OOUI\u2014the powerful accessibility features and centralized theming that allows skin authors to easily apply a custom theme to user interface elements regardless of where they are used by creating a custom theme, to make it easier for features to conform to the same accessibility standards and simplify the work of skin authors.\u003c\/p\u003e\u003c\/div\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_827\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/3ndsxtl44eofytwep42p\/PHID-FILE-4ybkrghfwjvx4ndzbgkv\/profile)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/kchapman\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5877934\" id=\"5877934\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-columns phui-timeline-icon\" data-meta=\"0_826\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/kchapman\/\" class=\"phui-handle handle-availability-disabled phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_229\"\u003e\u003cspan class=\"perfect-circle\"\u003e\u2022\u003c\/span\u003e kchapman\u003c\/a\u003e moved this task from \u003ca href=\"\/project\/board\/52\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_230\"\u003eUnder discussion\u003c\/a\u003e to \u003ca href=\"\/project\/board\/52\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_231\"\u003eRequest IRC meeting\u003c\/a\u003e on the \u003ca href=\"\/tag\/techcom-rfc\/\" class=\"phui-handle handle-status-closed\" data-sigil=\"hovercard\" data-meta=\"0_232\"\u003eTechCom-RFC\u003c\/a\u003e board.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5877934\" data-sigil=\"has-tooltip\" data-meta=\"0_825\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 12 2020, 6:52 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-12 18:52:38 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-spacer\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-shell\" data-sigil=\"transaction anchor-container\" data-meta=\"0_830\"\u003e\u003cdiv class=\"phui-timeline-event-view phui-timeline-minor-event\"\u003e\u003cdiv class=\"phui-timeline-content\"\u003e\u003ca style=\"background-image: url(https:\/\/phab.wmfusercontent.org\/file\/data\/l366g4gr73i2mwcc6thd\/PHID-FILE-xocxmw5y6luet67ckk65\/profile-AvatarFluff-square.jpg)\" class=\"visual-only phui-timeline-image\" href=\"\/p\/Lokal_Profil\/\" aria-hidden=\"true\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-wedge\" style=\"\"\u003e\u003c\/div\u003e\u003cdiv class=\"phui-timeline-group\"\u003e\u003ca name=\"5878270\" id=\"5878270\" class=\"phabricator-anchor-view\"\u003e\u003c\/a\u003e\u003cdiv class=\"phui-timeline-title phui-timeline-title-with-icon\"\u003e\u003cspan class=\"phui-timeline-icon-fill\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-user-plus phui-timeline-icon\" data-meta=\"0_829\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003c\/span\u003e\u003ca href=\"\/p\/Lokal_Profil\/\" class=\"phui-handle phui-link-person\" data-sigil=\"hovercard\" data-meta=\"0_233\"\u003eLokal_Profil\u003c\/a\u003e subscribed.\u003cspan class=\"phui-timeline-extra\"\u003e\u003ca href=\"#5878270\" data-sigil=\"has-tooltip\" data-meta=\"0_828\"\u003e\u003cspan class=\"screen-only\"\u003eFeb 12 2020, 8:28 PM\u003c\/span\u003e\u003cspan class=\"print-only\" aria-hidden=\"true\"\u003e2020-02-12 20:28:31 (UTC+0)\u003c\/span\u003e\u003c\/a\u003e\u003c\/span\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e"},"javelin_metadata":[{"hovercardSpec":{"objectPHID":"PHID-USER-3qggseejscb6dtiy4uyx"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-3ljmcrqixyljk2wy63jb","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-uqcn2l4ng4murmyfnvyp","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-uqcn2l4ng4murmyfnvyp","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-kxyuujnpfeyuo2w2bw3s","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-t5vuh5cscqpo25f4rzkd","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-mkscnu5vrsd7rgzxbvwp"}},{"hovercardSpec":{"objectPHID":"PHID-USER-t5vuh5cscqpo25f4rzkd","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-fovtl67ew4l4cc3oeypc","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"phid":"PHID-FILE-p36yxqc3kajf4fexhdj6","uri":"https:\/\/phab.wmfusercontent.org\/file\/data\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png","dUri":"https:\/\/phab.wmfusercontent.org\/file\/download\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png","alt":"image.png (75\u00d7716 px, 7 KB)","viewable":true,"monogram":"F31515253"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-mkscnu5vrsd7rgzxbvwp"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-mkscnu5vrsd7rgzxbvwp"}},{"hovercardSpec":{"objectPHID":"PHID-USER-v7vgzvvcw7v2umf737ri","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-ctchvhisqfvk4rz7nt7d","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-fovtl67ew4l4cc3oeypc","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-6wbaay22g6ffupyt3pxo","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"phid":"PHID-FILE-p36yxqc3kajf4fexhdj6","uri":"https:\/\/phab.wmfusercontent.org\/file\/data\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png","dUri":"https:\/\/phab.wmfusercontent.org\/file\/download\/lkhi54byczcbzo2lzdun\/PHID-FILE-p36yxqc3kajf4fexhdj6\/image.png","alt":"image.png (75\u00d7716 px, 7 KB)","viewable":true,"monogram":"F31515253"},{"hovercardSpec":{"objectPHID":"PHID-USER-u7w6n5ecde66oujx33pe","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-POST-qrxum2ekhygi6jzvav3f"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-6tlavgtsosjuvizsej53","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-emfcq7gc62qztnvhq2ev"}},{"hovercardSpec":{"objectPHID":"PHID-USER-cjstd4vv3u3gq2sijr7d","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-mkscnu5vrsd7rgzxbvwp"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-cjstd4vv3u3gq2sijr7d","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"hovercardSpec":{"objectPHID":"PHID-USER-3ugud6gxaxwwg75c2t74","contextPHID":"PHID-TASK-o47oln57tv4tbvxqwo62"}},{"phid":"PHID-XACT-TASK-gcxipavcytbxr6w"},{"hovercardSpec":{"objectPHID":"PHID-USER-3qggseejscb6dtiy4uyx"}},{"hovercardSpec":{"objectPHID":"PHID-USER-m2yck6646cdt5t6zkta4"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sscimmfqgfuh4pe2kfyw"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vifcrebzoy6r7apoo4kj"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vifcrebzoy6r7apoo4kj"}},{"hovercardSpec":{"objectPHID":"PHID-USER-abr5ge6gl2ovg7jokpst"}},{"hovercardSpec":{"objectPHID":"PHID-USER-c47vnc2yxmwfvvc4367q"}},{"hovercardSpec":{"objectPHID":"PHID-USER-cjbkqgaozso5gfp3xv2n"}},{"hovercardSpec":{"objectPHID":"PHID-USER-kxyuujnpfeyuo2w2bw3s"}},{"hovercardSpec":{"objectPHID":"PHID-USER-hrcsuxxosiyjqpef64tc"}},{"hovercardSpec":{"objectPHID":"PHID-USER-p6hvqn5njgnxuagekh4b"}},{"hovercardSpec":{"objectPHID":"PHID-USER-p6hvqn5njgnxuagekh4b"}},{"hovercardSpec":{"objectPHID":"PHID-USER-ip3u7ffkd2nk5q3kdjg5"}},{"hovercardSpec":{"objectPHID":"PHID-USER-ip3u7ffkd2nk5q3kdjg5"}},{"hovercardSpec":{"objectPHID":"PHID-USER-74o4a5jmvheilvwbsvfd"}},{"hovercardSpec":{"objectPHID":"PHID-TASK-mkscnu5vrsd7rgzxbvwp"}},{"phid":"PHID-XACT-TASK-67m5ijwsjsu42mh"},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4"}},{"phid":"PHID-XACT-TASK-hehx4dgi5sifmaw"},{"phid":"PHID-XACT-TASK-wzw634euuknpseo"},{"hovercardSpec":{"objectPHID":"PHID-USER-yawytiq5q7eduxmvnkid"}},{"phid":"PHID-XACT-TASK-h34pawl32ytysh5"},{"hovercardSpec":{"objectPHID":"PHID-USER-3ljmcrqixyljk2wy63jb"}},{"phid":"PHID-XACT-TASK-glndccbtsc2gknq"},{"hovercardSpec":{"objectPHID":"PHID-USER-uqcn2l4ng4murmyfnvyp"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-voqx4a3g5vsogfw"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-c3t4ff3x57oseyq"},{"phid":"PHID-XACT-TASK-46xypjrwsbrvmee"},{"hovercardSpec":{"objectPHID":"PHID-USER-t5vuh5cscqpo25f4rzkd"}},{"hovercardSpec":{"objectPHID":"PHID-USER-kxyuujnpfeyuo2w2bw3s"}},{"phid":"PHID-XACT-TASK-xyxmcf7cg6ie5ex"},{"hovercardSpec":{"objectPHID":"PHID-USER-je4a7kqdfgacwkyhtg4c"}},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y"}},{"phid":"PHID-XACT-TASK-gs7pb7tm66xm3rx"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-7fof4eg2idqzndh"},{"hovercardSpec":{"objectPHID":"PHID-USER-6wbaay22g6ffupyt3pxo"}},{"hovercardSpec":{"objectPHID":"PHID-USER-uqcn2l4ng4murmyfnvyp"}},{"phid":"PHID-XACT-TASK-5prsr45wnzwkdyt"},{"hovercardSpec":{"objectPHID":"PHID-USER-vy4qeyrllb2jf245ys5y"}},{"phid":"PHID-XACT-TASK-367lcymbqi7tqn5"},{"hovercardSpec":{"objectPHID":"PHID-USER-vbyvvtbztxaeuaxelxx4"}},{"phid":"PHID-XACT-TASK-lyo36fe23sqswqu"},{"hovercardSpec":{"objectPHID":"PHID-USER-cjstd4vv3u3gq2sijr7d"}},{"hovercardSpec":{"objectPHID":"PHID-USER-5dqihbanu3caaj7pigif"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-gdnvii2tziibym5uf7pi"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-oa6xrkbjkdkxrcft3gwx"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-fc6tzpgo4uo33xqvhtdj"}},{"hovercardSpec":{"objectPHID":"PHID-USER-fovtl67ew4l4cc3oeypc"}},{"hovercardSpec":{"objectPHID":"PHID-USER-sai77mtxmpqnm6pycyvz"}},{"hovercardSpec":{"objectPHID":"PHID-USER-fovtl67ew4l4cc3oeypc"}},{"phid":"PHID-XACT-TASK-lm6kbrfyawu5ldw"},{"hovercardSpec":{"objectPHID":"PHID-USER-3neel27i7dyu62jbbx2l"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-pdw4jlcz543opbp2drhq"}},{"hovercardSpec":{"objectPHID":"PHID-USER-3neel27i7dyu62jbbx2l"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-vylp6qxkolgim3w3hdzc"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-4ze4hlrtc2ev52plnqaf"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-pdw4jlcz543opbp2drhq"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-ab7geevp5wv4sgc"},{"hovercardSpec":{"objectPHID":"PHID-USER-ctchvhisqfvk4rz7nt7d"}},{"phid":"PHID-XACT-TASK-igqbxy7jga2f5at"},{"phid":"PHID-XACT-TASK-o3pfiybmwwetnxf"},{"hovercardSpec":{"objectPHID":"PHID-USER-v7vgzvvcw7v2umf737ri"}},{"hovercardSpec":{"objectPHID":"PHID-USER-c4xszutxtrvtj73h3rns"}},{"hovercardSpec":{"objectPHID":"PHID-USER-5dv7dcltvyvolwzbm2af"}},{"hovercardSpec":{"objectPHID":"PHID-USER-u7w6n5ecde66oujx33pe"}},{"hovercardSpec":{"objectPHID":"PHID-USER-u7w6n5ecde66oujx33pe"}},{"hovercardSpec":{"objectPHID":"PHID-USER-u7w6n5ecde66oujx33pe"}},{"phid":"PHID-XACT-TASK-x7fhjumbwowja5r"},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-ikitcmnutp4ce3p"},{"phid":"PHID-XACT-TASK-vy6mbe3wbre7jpv"},{"hovercardSpec":{"objectPHID":"PHID-USER-57yq4timbqfdkujzji3d"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-rlg7l7xmqnpgd6g"},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-nsdmaoumwkyw4zb"},{"hovercardSpec":{"objectPHID":"PHID-USER-2wquu5nwbdqcuzo5qiuf"}},{"hovercardSpec":{"objectPHID":"PHID-USER-khiuzivvgcimpgvedbzf"}},{"hovercardSpec":{"objectPHID":"PHID-USER-khiuzivvgcimpgvedbzf"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-7lhjz6cr5imt7q7"},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4"}},{"phid":"PHID-XACT-TASK-meeaz4gr6nuxzry"},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-xvcqtyhvrk6qmyr"},{"hovercardSpec":{"objectPHID":"PHID-USER-6wbaay22g6ffupyt3pxo"}},{"phid":"PHID-XACT-TASK-oed7epu4qioxv6p"},{"hovercardSpec":{"objectPHID":"PHID-USER-g7ljr7obhy5hgp4qpuiw"}},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-rzokpkvxevq2d3s"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-2cqfnabhsrwufrp"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-6wp4s6u3vtgd35q"},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4"}},{"phid":"PHID-XACT-TASK-q7tcozhnp22lr2g"},{"hovercardSpec":{"objectPHID":"PHID-USER-howgnelzsoau4shmq2h6"}},{"phid":"PHID-XACT-TASK-7eyeloguichcdmg"},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-hnm6m2dchmnbai2"},{"hovercardSpec":{"objectPHID":"PHID-USER-kms5nmb5gvqzcdep3cnl"}},{"phid":"PHID-XACT-TASK-lf3p6zji5oa7znk"},{"hovercardSpec":{"objectPHID":"PHID-USER-tzsi7tlbjiotgu6ouudy"}},{"hovercardSpec":{"objectPHID":"PHID-USER-g5rqg2k7irztdonlursm"}},{"phid":"PHID-XACT-TASK-ti2bvvmeqagytfg"},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4"}},{"phid":"PHID-XACT-TASK-uzmjbmzd4mgsrum"},{"hovercardSpec":{"objectPHID":"PHID-USER-cjstd4vv3u3gq2sijr7d"}},{"phid":"PHID-XACT-TASK-cw57vo2s73h6bh5"},{"hovercardSpec":{"objectPHID":"PHID-USER-cjstd4vv3u3gq2sijr7d"}},{"phid":"PHID-XACT-TASK-7ihqay5zkxhxqae"},{"hovercardSpec":{"objectPHID":"PHID-USER-6tlavgtsosjuvizsej53"}},{"phid":"PHID-XACT-TASK-qzmk7oytt46omiu"},{"hovercardSpec":{"objectPHID":"PHID-USER-fovtl67ew4l4cc3oeypc"}},{"phid":"PHID-XACT-TASK-sxhwm6o56ceh3no"},{"hovercardSpec":{"objectPHID":"PHID-USER-724ccjw2eq65o2te67qg"}},{"phid":"PHID-XACT-TASK-b2vq5nf2y5w5zlc"},{"hovercardSpec":{"objectPHID":"PHID-USER-3ljmcrqixyljk2wy63jb"}},{"phid":"PHID-XACT-TASK-a3thv4z3xngzm5u"},{"hovercardSpec":{"objectPHID":"PHID-USER-vlt742cfg2fzamtdvlr4"}},{"phid":"PHID-XACT-TASK-bpyeunlogubixo3"},{"hovercardSpec":{"objectPHID":"PHID-USER-zcjbttnvrligppi7hwnx"}},{"hovercardSpec":{"objectPHID":"PHID-USER-nzterrrjhsabuvagdv2x"}},{"hovercardSpec":{"objectPHID":"PHID-USER-3ugud6gxaxwwg75c2t74"}},{"hovercardSpec":{"objectPHID":"PHID-USER-3ugud6gxaxwwg75c2t74"}},{"phid":"PHID-XACT-TASK-mamkdk2qatv34ry"},{"hovercardSpec":{"objectPHID":"PHID-USER-6wbaay22g6ffupyt3pxo"}},{"phid":"PHID-XACT-TASK-emort7plszjky4u"},{"hovercardSpec":{"objectPHID":"PHID-USER-kxyuujnpfeyuo2w2bw3s"}},{"hovercardSpec":{"objectPHID":"PHID-USER-c4xszutxtrvtj73h3rns"}},{"phid":"PHID-XACT-TASK-kwalml72hqihk36"},{"hovercardSpec":{"objectPHID":"PHID-USER-a3ndrbmqqq7sb7olfps4"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-oa6xrkbjkdkxrcft3gwx"}},{"hovercardSpec":{"objectPHID":"PHID-PCOL-bxvivcbte6rnclddqyob"}},{"hovercardSpec":{"objectPHID":"PHID-PROJ-fc6tzpgo4uo33xqvhtdj"}},{"hovercardSpec":{"objectPHID":"PHID-USER-uu7wg6g3b37dcktbje3a"}},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-gcxipavcytbxr6w\/","ref":"T241180#5766561"},[],{"anchor":"5766561"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_1\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_234\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_235\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_3\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-gcxipavcytbxr6w\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_236\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_237\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-gcxipavcytbxr6w","anchor":"5766561"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-4m5safio3nied5o","anchor":"5766563"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-tjle75t3bxzkdgz","anchor":"5766660"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-vi5un6ii2pcg577","anchor":"5767471"},{"tip":"Via Web"},[],[],[],{"phid":"PHID-XACT-TASK-gbtn3uw3zvg32po","anchor":"5770100"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-y4vk2zm6hdhqfla","anchor":"5770102"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-pa6jvnlco4gjjle","anchor":"5770166"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-atdxvzvzsin24oa","anchor":"5770973"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-tzocaiptn65xn7w","anchor":"5777298"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-kowrkigdwyycg5w","anchor":"5778644"},{"tip":"Via Web"},[],[],[],{"phid":"PHID-XACT-TASK-ams6btkznoueb4w","anchor":"5780771"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-nth3qbxzxumwxwh","anchor":"5782450"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-mtime7b3rwjrljx","anchor":"5782472"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-fpiu6mxrsu7p4oj","anchor":"5783307"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-67m5ijwsjsu42mh\/","ref":"T241180#5789742"},[],{"anchor":"5789742"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_5\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_289\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_290\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_7\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-67m5ijwsjsu42mh\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_291\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_292\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"W3C AC rep","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-67m5ijwsjsu42mh","anchor":"5789742"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-hehx4dgi5sifmaw\/","ref":"T241180#5789763"},[],{"anchor":"5789763"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_9\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_300\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_301\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_11\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-hehx4dgi5sifmaw\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_302\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_303\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Deployment Training Graduate","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-hehx4dgi5sifmaw","anchor":"5789763"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-wzw634euuknpseo\/","ref":"T241180#5790160"},[],{"anchor":"5790160"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_13\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_311\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_312\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_15\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-wzw634euuknpseo\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_313\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_314\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-wzw634euuknpseo","anchor":"5790160"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-h34pawl32ytysh5\/","ref":"T241180#5797821"},[],{"anchor":"5797821"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_17\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_320\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_321\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_19\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-h34pawl32ytysh5\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_322\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_323\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_21\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-h34pawl32ytysh5\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_324\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-h34pawl32ytysh5","anchor":"5797821"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-glndccbtsc2gknq\/","ref":"T241180#5798663"},[],{"anchor":"5798663"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_23\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_330\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_331\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_25\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-glndccbtsc2gknq\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_332\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_333\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Backport Deployer","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-glndccbtsc2gknq","anchor":"5798663"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-os6xdqklah237ml","anchor":"5799020"},{"tip":"Via Web"},[],[],[],[],{"phid":"PHID-XACT-TASK-ds2r3axmckgxisc","anchor":"5799233"},{"tip":"Via Web"},[],[],[],{"phid":"PHID-XACT-TASK-ynbd7fxh3vi5rzg","anchor":"5799303"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-voqx4a3g5vsogfw\/","ref":"T241180#5800440"},[],{"anchor":"5800440"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_27\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_355\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_356\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_29\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-voqx4a3g5vsogfw\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_357\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_358\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_31\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-voqx4a3g5vsogfw\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_359\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-voqx4a3g5vsogfw","anchor":"5800440"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-c3t4ff3x57oseyq\/","ref":"T241180#5800460"},[],{"anchor":"5800460"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_33\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_365\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_366\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_35\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-c3t4ff3x57oseyq\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_367\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_368\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-c3t4ff3x57oseyq","anchor":"5800460"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-46xypjrwsbrvmee\/","ref":"T241180#5801407"},[],{"anchor":"5801407"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_37\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_374\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_375\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_39\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-46xypjrwsbrvmee\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_376\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_377\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Mentor","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-46xypjrwsbrvmee","anchor":"5801407"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-xyxmcf7cg6ie5ex\/","ref":"T241180#5801495"},[],{"anchor":"5801495"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_41\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_385\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_386\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_43\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-xyxmcf7cg6ie5ex\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_387\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_388\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-xyxmcf7cg6ie5ex","anchor":"5801495"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-fi2lf56hhmv3jaq","anchor":"5801917"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-gs7pb7tm66xm3rx\/","ref":"T241180#5802492"},[],{"anchor":"5802492"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_45\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_397\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_398\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_47\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-gs7pb7tm66xm3rx\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_399\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_400\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-gs7pb7tm66xm3rx","anchor":"5802492"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-7fof4eg2idqzndh\/","ref":"T241180#5802585"},[],{"anchor":"5802585"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_49\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_406\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_407\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_51\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-7fof4eg2idqzndh\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_408\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_409\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_53\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-7fof4eg2idqzndh\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_410\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-7fof4eg2idqzndh","anchor":"5802585"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-e2jaexnnab5fhvv","anchor":"5802623"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-5prsr45wnzwkdyt\/","ref":"T241180#5802985"},[],{"anchor":"5802985"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_55\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_419\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_420\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_57\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-5prsr45wnzwkdyt\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_421\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_422\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Backport Deployer","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-5prsr45wnzwkdyt","anchor":"5802985"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-367lcymbqi7tqn5\/","ref":"T241180#5805149"},[],{"anchor":"5805149"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_59\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_430\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_431\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_61\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-367lcymbqi7tqn5\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_432\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_433\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-367lcymbqi7tqn5","anchor":"5805149"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-dwonsbnm4htzord","anchor":"5805693"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-lyo36fe23sqswqu\/","ref":"T241180#5807233"},[],{"anchor":"5807233"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_63\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_442\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_443\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_65\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-lyo36fe23sqswqu\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_444\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_445\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-lyo36fe23sqswqu","anchor":"5807233"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-fgbeof5zsxnwewx","anchor":"5807481"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-lm6kbrfyawu5ldw\/","ref":"T241180#5807754"},[],{"anchor":"5807754"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_67\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_454\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_455\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_69\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-lm6kbrfyawu5ldw\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_456\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_457\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Mentor","align":"E","size":300},[],{"tip":"Backport Deployer","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-pli45netxck74bz","anchor":"5807754"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-wvjzhiujfznz4ma","anchor":"5811122"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-ab7geevp5wv4sgc\/","ref":"T241180#5811930"},[],{"anchor":"5811930"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_71\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_471\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_472\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_73\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-ab7geevp5wv4sgc\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_473\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_474\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_75\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-ab7geevp5wv4sgc\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_475\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ab7geevp5wv4sgc","anchor":"5811930"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-igqbxy7jga2f5at\/","ref":"T241180#5812071"},[],{"anchor":"5812071"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_77\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_481\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_482\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_79\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-igqbxy7jga2f5at\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_483\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_484\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Web Perf Hero","align":"E","size":300},[],{"tip":"Rat Catcher","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-igqbxy7jga2f5at","anchor":"5812071"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-o3pfiybmwwetnxf\/","ref":"T241180#5812101"},[],{"anchor":"5812101"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_81\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_494\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_495\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_83\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-o3pfiybmwwetnxf\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_496\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_497\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Web Perf Hero","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-o3pfiybmwwetnxf","anchor":"5812101"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-uxddurynajqxpzm","anchor":"5812165"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-yxcqxnj4pt3mfyp","anchor":"5812200"},{"tip":"Via Web"},[],[],[],{"phid":"PHID-XACT-TASK-knnmzggtbvix323","anchor":"5812210"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-x7fhjumbwowja5r\/","ref":"T241180#5812363"},[],{"anchor":"5812363"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_85\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_517\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_518\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_87\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-x7fhjumbwowja5r\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_519\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_520\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_89\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-x7fhjumbwowja5r\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_521\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Nerd Sniper","align":"E","size":300},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-x7fhjumbwowja5r","anchor":"5812363"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-ikitcmnutp4ce3p\/","ref":"T241180#5812722"},[],{"anchor":"5812722"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_91\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_531\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_532\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_93\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-ikitcmnutp4ce3p\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_533\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_534\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_95\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-ikitcmnutp4ce3p\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_535\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ikitcmnutp4ce3p","anchor":"5812722"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-vy6mbe3wbre7jpv\/","ref":"T241180#5812745"},[],{"anchor":"5812745"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_97\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_541\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_542\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_99\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-vy6mbe3wbre7jpv\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_543\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_544\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-vy6mbe3wbre7jpv","anchor":"5812745"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-rlg7l7xmqnpgd6g\/","ref":"T241180#5813806"},[],{"anchor":"5813806"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_101\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_550\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_551\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_103\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-rlg7l7xmqnpgd6g\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_552\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_553\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_105\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-rlg7l7xmqnpgd6g\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_554\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-rlg7l7xmqnpgd6g","anchor":"5813806"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-nsdmaoumwkyw4zb\/","ref":"T241180#5813866"},[],{"anchor":"5813866"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_107\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_560\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_561\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_109\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-nsdmaoumwkyw4zb\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_562\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_563\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-nsdmaoumwkyw4zb","anchor":"5813866"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-yz7zuexdp77obuc","anchor":"5815182"},{"tip":"Via Web"},[],[],[],{"phid":"PHID-XACT-TASK-vmdjzkoycirjffa","anchor":"5815791"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-7lhjz6cr5imt7q7\/","ref":"T241180#5821419"},[],{"anchor":"5821419"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_111\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_577\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_578\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_113\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-7lhjz6cr5imt7q7\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_579\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_580\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-7lhjz6cr5imt7q7","anchor":"5821419"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-meeaz4gr6nuxzry\/","ref":"T241180#5821811"},[],{"anchor":"5821811"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_115\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_586\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_587\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_117\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-meeaz4gr6nuxzry\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_588\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_589\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Deployment Training Graduate","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-meeaz4gr6nuxzry","anchor":"5821811"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-xvcqtyhvrk6qmyr\/","ref":"T241180#5822020"},[],{"anchor":"5822020"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_119\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_597\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_598\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_121\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-xvcqtyhvrk6qmyr\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_599\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_600\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_123\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-xvcqtyhvrk6qmyr\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_601\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-xvcqtyhvrk6qmyr","anchor":"5822020"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-oed7epu4qioxv6p\/","ref":"T241180#5822411"},[],{"anchor":"5822411"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_125\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_607\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_608\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_127\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-oed7epu4qioxv6p\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_609\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_610\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-oed7epu4qioxv6p","anchor":"5822411"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ajmbpa2gtz4eiuh","anchor":"5822426"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-rzokpkvxevq2d3s\/","ref":"T241180#5823432"},[],{"anchor":"5823432"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_129\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_619\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_620\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_131\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-rzokpkvxevq2d3s\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_621\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_622\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_133\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-rzokpkvxevq2d3s\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_623\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-rzokpkvxevq2d3s","anchor":"5823432"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-2cqfnabhsrwufrp\/","ref":"T241180#5826886"},[],{"anchor":"5826886"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_135\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_629\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_630\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_137\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-2cqfnabhsrwufrp\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_631\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_632\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-2cqfnabhsrwufrp","anchor":"5826886"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-6wp4s6u3vtgd35q\/","ref":"T241180#5827132"},[],{"anchor":"5827132"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_139\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_638\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_639\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_141\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-6wp4s6u3vtgd35q\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_640\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_641\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_143\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-6wp4s6u3vtgd35q\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_642\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-6wp4s6u3vtgd35q","anchor":"5827132"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-q7tcozhnp22lr2g\/","ref":"T241180#5827364"},[],{"anchor":"5827364"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_145\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_648\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_649\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_147\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-q7tcozhnp22lr2g\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_650\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_651\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Deployment Training Graduate","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-q7tcozhnp22lr2g","anchor":"5827364"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-7eyeloguichcdmg\/","ref":"T241180#5827532"},[],{"anchor":"5827532"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_149\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_659\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_660\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_151\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-7eyeloguichcdmg\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_661\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_662\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-7eyeloguichcdmg","anchor":"5827532"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-hnm6m2dchmnbai2\/","ref":"T241180#5827542"},[],{"anchor":"5827542"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_153\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_668\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_669\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_155\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-hnm6m2dchmnbai2\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_670\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_671\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-hnm6m2dchmnbai2","anchor":"5827542"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-lf3p6zji5oa7znk\/","ref":"T241180#5827745"},[],{"anchor":"5827745"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_157\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_677\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_678\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_159\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-lf3p6zji5oa7znk\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_679\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_680\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-lf3p6zji5oa7znk","anchor":"5827745"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-sskvbj7gdu6ogs4","anchor":"5827829"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-ti2bvvmeqagytfg\/","ref":"T241180#5827958"},[],{"anchor":"5827958"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_161\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_689\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_690\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_163\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-ti2bvvmeqagytfg\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_691\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_692\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-ti2bvvmeqagytfg","anchor":"5827958"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-uzmjbmzd4mgsrum\/","ref":"T241180#5828095"},[],{"anchor":"5828095"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_165\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_698\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_699\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_167\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-uzmjbmzd4mgsrum\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_700\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_701\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Deployment Training Graduate","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-uzmjbmzd4mgsrum","anchor":"5828095"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-cw57vo2s73h6bh5\/","ref":"T241180#5828334"},[],{"anchor":"5828334"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_169\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_709\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_710\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_171\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-cw57vo2s73h6bh5\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_711\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_712\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_173\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-cw57vo2s73h6bh5\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_713\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-cw57vo2s73h6bh5","anchor":"5828334"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-7ihqay5zkxhxqae\/","ref":"T241180#5828363"},[],{"anchor":"5828363"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_175\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_719\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_720\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_177\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-7ihqay5zkxhxqae\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_721\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_722\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-7ihqay5zkxhxqae","anchor":"5828363"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-qzmk7oytt46omiu\/","ref":"T241180#5828483"},[],{"anchor":"5828483"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_179\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_728\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_729\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_181\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-qzmk7oytt46omiu\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_730\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_731\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Continuous Integrator","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-qzmk7oytt46omiu","anchor":"5828483"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-sxhwm6o56ceh3no\/","ref":"T241180#5828558"},[],{"anchor":"5828558"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_183\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_739\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_740\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_185\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-sxhwm6o56ceh3no\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_741\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_742\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Mentor","align":"E","size":300},[],{"tip":"Backport Deployer","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-sxhwm6o56ceh3no","anchor":"5828558"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-b2vq5nf2y5w5zlc\/","ref":"T241180#5829523"},[],{"anchor":"5829523"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_187\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_752\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_753\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_189\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-b2vq5nf2y5w5zlc\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_754\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_755\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_191\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-b2vq5nf2y5w5zlc\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_756\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-b2vq5nf2y5w5zlc","anchor":"5829523"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-a3thv4z3xngzm5u\/","ref":"T241180#5829598"},[],{"anchor":"5829598"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_193\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_762\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_763\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_195\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-a3thv4z3xngzm5u\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_764\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_765\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-a3thv4z3xngzm5u","anchor":"5829598"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-bpyeunlogubixo3\/","ref":"T241180#5830340"},[],{"anchor":"5830340"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_197\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_771\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_772\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_199\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-bpyeunlogubixo3\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_773\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_774\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Deployment Training Graduate","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-bpyeunlogubixo3","anchor":"5830340"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-2vowr3s7o2cnpww","anchor":"5833767"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-axqocxgmbib5wyt","anchor":"5837596"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-t2fkwkd26lu54ju","anchor":"5842524"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-mamkdk2qatv34ry\/","ref":"T241180#5843150"},[],{"anchor":"5843150"},[],[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_201\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_791\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_792\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_203\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-mamkdk2qatv34ry\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_793\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_794\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_205\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/history\/PHID-XACT-TASK-mamkdk2qatv34ry\/\" class=\"phabricator-action-view-item\" data-sigil=\"workflow\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-list phabricator-action-view-icon\" data-meta=\"0_795\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Edit History\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-mamkdk2qatv34ry","anchor":"5843150"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-emort7plszjky4u\/","ref":"T241180#5851832"},[],{"anchor":"5851832"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_207\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_801\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_802\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_209\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-emort7plszjky4u\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_803\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_804\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-emort7plszjky4u","anchor":"5851832"},{"tip":"Via Web"},[],[],{"phid":"PHID-XACT-TASK-67dizvaplys7o4h","anchor":"5852881"},{"targetID":"UQ0_1","uri":"\/transactions\/quote\/PHID-XACT-TASK-kwalml72hqihk36\/","ref":"T241180#5861147"},[],{"anchor":"5861147"},[],{"items":"\u003cul class=\"phabricator-action-list-view \"\u003e\u003cli id=\"UQ0_211\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"#\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-quote\" data-meta=\"0_814\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-quote-left phabricator-action-view-icon\" data-meta=\"0_815\" aria-hidden=\"true\"\u003e\u003c\/span\u003eQuote Comment\u003c\/a\u003e\u003c\/li\u003e\u003cli id=\"UQ0_213\" class=\"phabricator-action-view phabricator-action-view-href action-has-icon\" style=\"\"\u003e\u003ca href=\"\/transactions\/raw\/PHID-XACT-TASK-kwalml72hqihk36\/\" class=\"phabricator-action-view-item\" data-sigil=\"transaction-raw\" data-meta=\"0_816\"\u003e\u003cspan class=\"visual-only phui-icon-view phui-font-fa fa-code phabricator-action-view-icon\" data-meta=\"0_817\" aria-hidden=\"true\"\u003e\u003c\/span\u003eView Raw Remarkup\u003c\/a\u003e\u003c\/li\u003e\u003c\/ul\u003e"},[],{"tip":"Via Web"},[],{"tip":"Web Perf Hero","align":"E","size":300},[],{"phid":"PHID-XACT-TASK-kwalml72hqihk36","anchor":"5861147"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-dgakfnwedixon3k","anchor":"5877934"},{"tip":"Via Web"},[],{"phid":"PHID-XACT-TASK-lg277ij6wcvzcp6","anchor":"5878270"}],"javelin_behaviors":{"phui-hovercards":[],"phui-dropdown-menu":[],"phabricator-watch-anchor":[],"phabricator-tooltips":[]},"javelin_resources":["https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/2eeda9e0\/core.pkg.js","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/98e6504a\/rsrc\/externals\/javelin\/core\/init.js","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/968d91ee\/core.pkg.css","https:\/\/phab.wmfusercontent.org\/res\/defaultX\/phabricator\/666e25ad\/rsrc\/css\/phui\/phui-badge.css"]}