MathML in Web Browsers
https://mathml.igalia.com
A joint effort to add native MathML-Core support to web browsers.
Mon, 16 Mar 2026 15:25:02 +0100'MathML in Chromium' project is completed!
https://mathml.igalia.com/news/2023/01/10/mathml-in-chromium-project-is-completed/
<p>Igalia launched the ‘MathML in Chromium’ project in 2019 with the goal to allow native rendering of mathematical expressions in Chromium-based browsers. The hard work done over the past four years has finally paid off and <a href="https://www.igalia.com/2023/01/10/Igalia-Brings-MathML-Back-to-Chromium.html">today we announced that MathML is back in Chrome 109</a>. We would like to thank all the people who helped us reach that milestone, and more specifically all the individuals and organizations who sponsored this effort!</p>
<p>This is, however, not the end of the story. Implementation work in web browsers will continue in order to fix bugs, implement new features, or improve interoperability. Please follow the <a href="https://opencollective.com/mathml-core-support">Open Collective project page</a> for future updates, and consider contributing to it if you’d like to help advance math on the web.</p>
Tue, 10 Jan 2023 00:00:00 +0100
https://mathml.igalia.com/news/2023/01/10/mathml-in-chromium-project-is-completed/
Igalia at BlinkOn 17
https://mathml.igalia.com/news/2022/11/18/igalia-at-blinkon-17/
<p>Early this week, Chrome developers from around the world gathered for <a href="https://www.igalia.com/2022/11/02/Igalia-at-BlinkOn-17.html">BlinkOn 17</a>. Igalia contributed several talks, including one about MathML. We announced the plan to ship MathML in Chrome 109, which will be released next January. For more details, you can watch the <a href="https://www.youtube.com/watch?v=s3i02Yh3F9s">recording</a> or read the <a href="https://people.igalia.com/fwang/blink-on-17/">slides</a> of the presentation.</p>
Fri, 18 Nov 2022 00:00:00 +0100
https://mathml.igalia.com/news/2022/11/18/igalia-at-blinkon-17/
March 2022 - Sept 2022 Update - MathML-Core Support
https://mathml.igalia.com/news/2022/10/06/march-september-update-mathml-core-support/
<p>In the last 6 months, quite a lot has happened with support from this fund, and additional work by Igalia. This included about 137 commits across many repos related to fuzzing, documentation, spec status, and interop.</p>
<ul>
<li>In June, an Intent to Ship was filed in Chromium</li>
<li>Commits to improve MathML-Core interop in WebKit for dir, numalign, denomalign attributes</li>
<li>Commits to improve MathML-Core interop in Firefox for script-related features, the operator dictionary, invalid markup, semantics/maction, fontstyle/fontweight and numerous bits of cleanup</li>
<li>Many improvements to the MDN documentation, MDN content, Browser Compatibility Data, the MDN sidebar and MDN/webref CSS syntax data.</li>
</ul>
<p>MathML-Core Chromium support mainstream release was delayed by some ongoing Chromium internals rework for LayoutNG creating a situation where support would have temporarily created a problem for anyone wanting to print MathML from existing sites with Chromium. Full support is currently scheduled for release 109.</p>
<p>Note: This post was <a href="https://opencollective.com/mathml-core-support/updates/feb-2022-sept-2022-update-mathml-core-support">originally published on the Open Collective project page</a>.</p>
Thu, 06 Oct 2022 00:00:00 +0200
https://mathml.igalia.com/news/2022/10/06/march-september-update-mathml-core-support/
Link to MathML updates
https://mathml.igalia.com/news/2022/06/23/links-to-mathml-updates/
<p>Although we haven’t published any update on this website since <a href="/news/2021/02/15/mathml-plans-for-2021/">February 2021</a>, we’ve continued to actively work on implementing MathML in Chromium and finally reached the intent-to-ship stage yesterday 🎉 ! Below you’ll find information about our progress:</p>
<ul>
<li><a href="https://bkardell.com/blog/IntentToMathify.html">Jun 22, 2022: Achievement Unlocked: Intent to Mathify</a></li>
<li><a href="https://www.igalia.com/2022/06/22/Intent-to-Ship-MathML.html">Jun 22, 2022: Intent to Ship: MathML</a></li>
<li><a href="https://frederic-wang.fr/update-on-open-type-math-fonts.html">June 20, 2022: Update on OpenType MATH fonts</a></li>
<li><a href="https://people.igalia.com/fwang/2022-06-igalia-week-shipping-mathml-in-chromium/">June 14, 2022: Shipping MathML in Chromium</a></li>
<li><a href="https://www.youtube.com/watch?v=n9lX5RLWwGs">May 18, 2022: Remainder estimate for MathML integration (BlinkOn 16)</a></li>
<li><a href="https://www.youtube.com/watch?v=H-7kG2lEKQ8">Nov 16, 2021: MathML onde estamos? (BlinkOn 15)</a></li>
<li><a href="https://www.igalia.com/2021/10/19/Announcing-the-MathML-Core-Support-Collective.html">Oct 19, 2021: Announcing the MathML-Core Support Collective</a></li>
<li><a href="https://www.igalia.com/2021/08/09/MathML-Progress.html">Aug 9, 2021: MathML Progress</a></li>
</ul>
Thu, 23 Jun 2022 00:00:00 +0200
https://mathml.igalia.com/news/2022/06/23/links-to-mathml-updates/
MathML plans for 2021
https://mathml.igalia.com/news/2021/02/15/mathml-plans-for-2021/
<p>It’s been a while since <a href="/news/2020/09/07/upstreaming-status-Q3/">our previous update</a> on the implementation of MathML in Chromium so we thought it was important to provide an update on what Igalia has (and hasn’t) been up to, and why.</p>
<p>One big thing that has been happening during this time has been that Igalia has been helping to coordinate and facilitate the the re-activation of the MathML WG in the W3C. Our aim has always been to not only ship an implementation, but to help define MathML-Core, resolving the initial historical challenges and setting MathML back on stable standards footing. As part of this, we helped <a href="https://w3c.github.io/charter-drafts/math-2020.html">draft a new charter</a>, present things to a few different groups within the W3C, answer questions during the early review phase and, help gather votes and answer questions on the charter itself. You can view the charter, as well as see a presentation we did at W3C’s annual conference <a href="https://twitter.com/w3cdevs/status/1359892579148513280">on this thread</a>.</p>
<p>Last fall, our implementations reached a point where things weren’t quite ready to move on due to some pending re-work that was underway. Given the pending charter, some necessary wait time and a number of more immediate opportunities, a few of Igalia’s engineers temporarily reallocated most of their efforts to help advance on some other exciting web platform projects such as <a href="https://blog.ipfs.io/2021-01-15-ipfs-and-igalia-collaborate-on-dweb-in-browsers/">distributed web</a> or <a href="https://opencollective.com/open-prioritization/projects/focus-visible-in-webkit">:focus-visible</a>. While severly reduced in capacity during this time, we did still manage to do some MathML implementation tasks (i.e. fixes or reviews in security & stability) and fix a serious integration bug regarding the fact that <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2398702">legacy layout was forced for MathML in SVG, fragmented or editable trees</a>.</p>
<p>Since then, however, things are shaping up on the charter and pending chromium rework has progressed a bit and we believe it’s time to start talks on how we take this up again. Our plans are to return to this work part time during the second quarter. Let’s recap the current status and plans with respect to the <a href="/project/">initial roadmap</a> :</p>
<ol>
<li><strong>Basic setup</strong> <span style="color: green">✅</span><br /></li>
<li><strong>Basic Layout</strong>
<ul>
<li>Basic HTML-like implementation of <code class="language-plaintext highlighter-rouge">mtable</code> ❌</li>
</ul>
</li>
<li><strong>Operator Dictionary</strong> <span style="color: green">✅</span><br /></li>
<li><strong>Stretchy operators</strong>
<ul>
<li>Stretch logic in <code class="language-plaintext highlighter-rouge"><mrow></code>-like elements and under and over scripts. ❌</li>
<li>Using <code class="language-plaintext highlighter-rouge">stretchy</code> and <code class="language-plaintext highlighter-rouge">symmetric</code> attributes. ❌</li>
<li>Simple embellished operators ❌</li>
</ul>
</li>
<li><strong>Advanced Style</strong> <span style="color: green">✅</span><br /></li>
</ol>
<p>According to Google engineers from the <a href="https://www.chromium.org/teams/rendering#TOC-Team-Members">Rendering Core Team</a>, a few <a href="https://www.chromium.org/blink/layoutng">LayoutNG</a> features necessary to implement <a href="https://mathml-refresh.github.io/mathml-core/">MathML Core</a> completely won’t be ready very soon (more details below).</p>
<p>Igalia has a <a href="https://chromium-review.googlesource.com/c/chromium/src/+/2390636">CL pending</a> for <code class="language-plaintext highlighter-rouge">mtable</code> which still requires refinement to pass the test for alignment within cells. However, as said in previous announcements, this was pending on the <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=958381">new table support</a> to be available. Currently, this new implementation is still being experimented by Google engineers with the flag flipping on and off recently. They seem positive it will be ready this year though. Once it gets stable enough, work on improving math tables can be restarted.</p>
<p>Regarding stretchy operators, a critical aspect is to ensure that the min-content and max-content inline sizes are calculated as <a href="https://mathml-refresh.github.io/mathml-core/#layout-of-operators">described in MathML Core</a>, otherwise a lot of gaps will appear in formulas. This concern was already <a href="https://chromium-review.googlesource.com/c/chromium/src/+/1913250/19/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.cc">raised when upstreaming started in fall 2019</a>. From recent chats, the idea of better min/max pass for LayoutNG is relatively complicated, it will take time and resources from Google engineers and is not going to start before Q4 2021. However, in the meantime, we believe that a more rudimentary support for stretchy operators can be implemented.</p>
<p>Another important task that must be addressed before sending an intent-to-ship is related to accessibility. This was <a href="https://groups.google.com/a/chromium.org/d/msg/blink-dev/OOZIrtSPLeM/sEqeg4H2BQAJ">discussed with Google’s accessibility team in 2019</a> but not much progress was made, again due to other tasks of higher priority and some pending issues in MathML (such as <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=750990">text-transform changing string length</a> or <code class="language-plaintext highlighter-rouge">mtable</code> support). Still, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1038895">first experiments for ATK</a> started and an initial <a href="https://w3c.github.io/mathml-aam/">MathML AAM draft</a> was published.</p>
<p>There are additional features that would be helpful (though perhaps not strictly required) to implement before an intent-to-ship as well, such as font-related features (ink metrics, italics correction, <code class="language-plaintext highlighter-rouge">font-family: math</code>, etc) or improving interoperability (more conformance tests, refinements in specification, development in WebKit and Firefox). None are really a requirement for shipping, but they will be considered depending on available resources and progress on other tasks mentioned in the above paragraphs.</p>
<p>As usual, updates will be published on this blog when new milestones are reached. Stay tuned!</p>
Mon, 15 Feb 2021 00:00:00 +0100
https://mathml.igalia.com/news/2021/02/15/mathml-plans-for-2021/
Q3 review of Chromium's MathML upstreaming
https://mathml.igalia.com/news/2020/09/07/upstreaming-status-Q3/
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/mathml-in-chromium-upstreaming-progress-september-2020.gif" alt="Screenshot of MathML formulas in Chromium" />
<figcaption style="text-align: center; margin-top: 20px;">Evolution of upstream MathML rendering during 2020</figcaption>
</figure>
<p>Since the previous update, Igalia has continued MathML collaboration with Google
engineers from the <a href="https://www.chromium.org/teams/rendering#TOC-Team-Members">Rendering Core Team</a>. Let’s review again the upstreaming status of the
<a href="https://mathml.igalia.com/project/#roadmap-2019">2019 implementation work</a>:</p>
<ol>
<li><strong>Basic setup</strong> <span style="color: green">✅</span><br />
This step was already done, although we have been working on a few improvements to how token and unknown elements are handled.</li>
<li><strong>Basic Layout</strong> <span style="color: orange">●</span><br />
The <code class="language-plaintext highlighter-rouge"><mmultiscripts></code> (multiple pre and post scripts) and <code class="language-plaintext highlighter-rouge"><mpadded></code>
elements (tweaking spacing) have been implemented.
The only thing missing here is the basic implementation for <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1125111">MathML tabular elements</a>, which has not started yet, we will consider it again in one or two months, depending on how fast patches for <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=958381">TableNG</a> land.</li>
<li><strong>Operator Dictionary</strong> <span style="color: green">✅</span><br />
We have implemented the low-level API to access the operator dictionary and parse operator attributes (form, boolean properties and spacing). Currently <code class="language-plaintext highlighter-rouge">accent</code> and <code class="language-plaintext highlighter-rouge">accentunder</code> attributes on underover scripts as well as <code class="language-plaintext highlighter-rouge">largeop</code>, <code class="language-plaintext highlighter-rouge">stretchy</code> and <code class="language-plaintext highlighter-rouge">movablelimits</code> attributes on the underover base are considered. The <code class="language-plaintext highlighter-rouge">lspace</code> and <code class="language-plaintext highlighter-rouge">rspace</code> attributes are now considered for formula spacing.</li>
<li><strong>Stretchy operators</strong> <span style="color: orange">●</span><br />
This was pending on the previous step and is now unblocked, we plan to start this important feature very soon!</li>
<li><strong>Advanced Style</strong> <span style="color: green">✅</span><br />
As previously said, this is essentially done. We hope to discuss <a href="https://github.com/w3c/csswg-drafts/issues/5384">MathML Core related CSS properties</a> this month with the CSSWG. Although this was not in the 2019 plan we also implemented new style for TeX’s “cramped superscript”.</li>
</ol>
<p>Among things that were not necessarily explicit in the initial roadmap but are still in our TODO list, one can mention <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1021837">MathMLUnknownElement</a>, mixing with <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=989916">SVG</a> or <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1125137">ink metrics</a> (tighter bound for text) or <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=1125136">italic correction</a>. Stay tuned for more updates!</p>
Mon, 07 Sep 2020 00:00:00 +0200
https://mathml.igalia.com/news/2020/09/07/upstreaming-status-Q3/
Igalia interview with Rick Byers and Rossen Atanassov
https://mathml.igalia.com/news/2020/07/15/igalia-chats-ecosystem-health-part-II/
<p>Below is the part of the discussion related to MathML in Chromium. You can also read the <a href="https://www.igalia.com/chats/ecosystem-health-ii">transcription of the full chat</a>:</p>
<div class="row">
<div style="margin: 50px;" class="embed-responsive embed-responsive-16by9 text-center">
<iframe width="640" src="https://www.youtube.com/embed/OCWtStem0Jw?start=2728&end=3010" frameborder="0" allowfullscreen=""></iframe>
</div>
</div>
Wed, 15 Jul 2020 00:00:00 +0200
https://mathml.igalia.com/news/2020/07/15/igalia-chats-ecosystem-health-part-II/
More MathML patches upstreamed to Chromium in 2020 !
https://mathml.igalia.com/news/2020/06/29/upstreaming-status-H1/
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/mathml-in-chromium-upstreaming-progress.gif" alt="Screenshot of MathML formulas in Chromium" />
<figcaption style="text-align: center; margin-top: 20px;">Evolution of upstream MathML rendering during the first half of 2020</figcaption>
</figure>
<p>Since the beginning of the year, Igalia has worked with Google engineers from
the <a href="https://www.chromium.org/teams/rendering#TOC-Team-Members">Rendering Core Team</a> to upstream and improve the MathML implementation we worked on in 2019. Let’s review the status with respect to the <a href="https://mathml.igalia.com/project/#roadmap-2019">2019 implementation roadmap</a>:</p>
<ol>
<li><strong>Basic setup</strong> <span style="color: green">✅</span><br />
This part is done. Note that compared to the original plan, all unknown MathML Core elements behave like a grouping <code class="language-plaintext highlighter-rouge"><mrow></code> element as agreed in the MathML Refresh Community Group.</li>
<li><strong>Basic Layout</strong> <span style="color: orange">●</span><br />
Fractions and simple scripts have been upstreamed. A patch for multiple pre and post scripts has been uploaded and mpadded should come soon too. Regarding math tables, Aleks Totic has done excellent progress on the new <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=958381">TableNG implementation</a>. We expect we will be able to update our downstream branch to switch from the legacy table support to this new implementation so that we can then upstream table support.</li>
<li><strong>Operator Dictionary</strong> <span style="color: red">❌</span><br />
Upstreaming for this has not started at all, so expect bugs and missing features with operator spacing, stretching, size, etc. We have worked with the MathML Refresh Community Group to provide a compact form for the MathML operator dictionary in order to avoid the <a href="https://chromium.googlesource.com/chromium/src/+/master/docs/speed/binary_size/metrics.md">binary size</a> increase and make patches acceptable. Refactoring our downstream implementation accordingly will be straightforward and we can then starting upstreaming this part.</li>
<li><strong>Stretchy operators</strong> <span style="color: orange">●</span><br />
The basic low-level font shaping and measuring logic has been upstreamed and is used to draw radical symbols. The rest depends on the previous step but a lot of the logic in the layout and painting code has already been upstreamed in order to support radicals.</li>
<li><strong>Advanced Style</strong> <span style="color: green">✅</span><br />
This step is essentially done. However, it involves new CSS properties to be discussed with the CSS Working Group so the patch for advanced mathvariant has been put on hold and we expect a few extra refactoring and cleanup patches (e.g. renaming) when we get the feedback from the CSS Working Group.</li>
</ol>
<p>In addition to the above, some features that were not in the initial roadmap have been discussed in the MathML Refresh Community Group and are implemented or being considered. This includes better DOM API, mixing with SVG/HTML, ink metrics (tighter bound for text), new style for TeX’s “cramped superscript” concept and more. Let’s check again the status at the end of the year !</p>
Mon, 29 Jun 2020 00:00:00 +0200
https://mathml.igalia.com/news/2020/06/29/upstreaming-status-H1/
42 MathML Patches Upstreamed
https://mathml.igalia.com/news/2020/04/23/forty-two-mathml-patches-upstreamed/
<p>Since <a href="https://mathml.igalia.com/news/2020/02/19/upstreaming-progress/#new">our last update in February</a>, Igalia has upstreamed MathML patches to Chromium at a good pace: already 42 patches! Thanks to very helpful review from Google’s <a href="https://www.chromium.org/teams/rendering">rendering core</a> team, we have been able to refine our implementation both for upstreamed patches and for our downstream branch. Here are some highlights of what has landed:</p>
<ul>
<li>
<p>MathML integration with <a href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript">DOM/IDL</a> and <a href="https://mathml-refresh.github.io/mathml-core/#css-styling">CSS</a>.</p>
</li>
<li>
<p>The low-level OpenType MATH support (layout parameters and shaping of stretchy operators) is completely upstreamed and will be used by the MathML layout for radicals and operators.</p>
</li>
<li>
<p>Experimental CSS properties corresponding to TeX’s concepts of displaystyle and cramped are implemented. We are currently working on extending the font-size and text-transform properties to implement <a href="https://mathml-refresh.github.io/mathml-core/#displaystyle-and-scriptlevel-in-scripts">scriptlevel</a> and <a href="https://mathml-refresh.github.io/mathml-core/#size-variants-for-operators-mromathvariants">mathvariant</a> changes.</p>
</li>
<li>
<p>Basic layout is implemented for grouping, spacing, fractions and scripts (<code class="language-plaintext highlighter-rouge"><mrow></code>-like elements, <code class="language-plaintext highlighter-rouge"><mspace></code>, <code class="language-plaintext highlighter-rouge"><mfrac></code>, <code class="language-plaintext highlighter-rouge"><msub></code>, <code class="language-plaintext highlighter-rouge"><msup></code>, <code class="language-plaintext highlighter-rouge"><msubsup></code>, <code class="language-plaintext highlighter-rouge"><munder></code>, <code class="language-plaintext highlighter-rouge"><mover></code>, <code class="language-plaintext highlighter-rouge"><munderover></code>).</p>
</li>
</ul>
<p>Although this is still work in progress, one can already notice some improvements. For example, the LaTeX formula <code class="language-plaintext highlighter-rouge">\sum_{n=1}^{+\infty} \frac{1}{n^4} = \frac{\pi^4}{90}</code> converted to MathML is rendered by your browser as</p>
<p style="font-size: 200%;"><math style="font-family: Latin Modern Math" display="block"><mrow><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mrow><mo>+</mo><mn>∞</mn></mrow></munderover><mfrac><mn>1</mn><msup><mi>n</mi><mn>4</mn></msup></mfrac><mo>=</mo><mfrac><msup><mi>π</mi><mn>4</mn></msup><mn>90</mn></mfrac></mrow></math></p>
<p>In Chromium upstream (Canary, experimental web features enabled) and in our downstream branch, it currently looks like this:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/mathml-2020-04-23.png" alt="Screenshot of a MathML formula in Chromium" />
<figcaption style="text-align: center; margin-top: 20px;">A mathematical formula rendered by Chromium (left: upstream, right: downstream)</figcaption>
</figure>
<p>We would like to thank all the people who have written encouragements and supported this work, including our fellow Igalians who have helped invest funding. If, like them, you believe in this project and the broader work that we do <a href="https://mathml.igalia.com/sponsors/#Your%20support%20is%20important">please consider becoming a sponsor</a>. You can reach us with comments or questions via <a href="mailto:[email protected]">email</a> or <a href="https://twitter.com/igalia">Twitter</a>.</p>
Thu, 23 Apr 2020 00:00:00 +0200
https://mathml.igalia.com/news/2020/04/23/forty-two-mathml-patches-upstreamed/
MathML in Chromium Upstreaming Progress
https://mathml.igalia.com/news/2020/02/19/upstreaming-progress/
<p>Last year Igalia completed
<a href="https://mathml.igalia.com/news/2019/07/25/project-status-after-one-semester/">initial prototype work in Chromium of a functional MathML-Core</a>
in our downstream fork. By the end of last year we
<a href="https://mathml.igalia.com/news/2019/10/31/mathml-in-chromium-upstream-process-started/">began the work of upstreaming</a>
and further discussion and review which we expected to take about a year.</p>
<p>Since then, we have continued to make good progress: Sending patches,
discussing and iterating based on input and feedback. As one would expect,
things have to happen in some kind of order, and some steps involve more
complexity or discussion than others. Here’s what’s happened so far…</p>
<p>We have thusfar upstreamed, in the following order:</p>
<ul>
<li>Enabling MathML as an experimental web platform feature, and enabling it to run against WPT.</li>
<li>Patching the DOM IDL, making MathML a first class citizen of the Web platform.</li>
<li>Providing the default UA stylesheet for MathML-Core elements</li>
<li>Providing relevant MathML global attributes mappings to CSS counterparts</li>
<li>Adding initial support for the new internal CSS display values for <code class="language-plaintext highlighter-rouge">math</code> and <code class="language-plaintext highlighter-rouge">inline-math</code>.</li>
<li>Adding basic support for containers: <code class="language-plaintext highlighter-rouge"><math></code> and <code class="language-plaintext highlighter-rouge"><mrow></code>, and then out-of-flow elements in MathML containers.</li>
<li>Adding initial layout contraints for stretchy operators.</li>
<li>Adding support for <code class="language-plaintext highlighter-rouge"><mspace></code>, which is critically used on nearly all MathML WPT tests.</li>
<li>Adding baseline adjustment logic for MathML containers.</li>
<li>Beginning to add support for OpenType MATH layout constants.</li>
</ul>
<p>Next up, we are working on <code class="language-plaintext highlighter-rouge"><mfrac></code> and continuing the work on stretchy
operators (a big step).</p>
<p>Getting initial foundations established, aligned with the platform and
landed successfully is important and notable for everyone…</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">And critically we aren't the only folks doing work in this area.<br /><br />Our friends at Igalia are implementing MathML and actually specifying what the rendering model and *much* tighter integration with CSS.<br /><br />(e.g. width/height etc actually work consistently on MathML elements \o/ )</p>— Ian Kilpatrick (@bfgeek) <a href="https://twitter.com/bfgeek/status/1227633631968944129?ref_src=twsrc%5Etfw">February 12, 2020</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>We are excited that each of these patches to land builds increasing and
observable value toward our larger goals.</p>
<p>If you’re interested in tracking this more directly, day to day progress is
visible via <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=6606">the issue tracking MathML support in Chromium</a>.</p>
<p>If you believe in this work, please considering sponsoring: <a href="https://mathml.igalia.com/sponsors/#Your%20support%20is%20important">Your support is important</a>
in helping us fund the development and prioritization efforts to ensure that
native mathematical rendering is, finally, a universally supported and
interoperable foundation of the Web Platform.</p>
Wed, 19 Feb 2020 00:00:00 +0100
https://mathml.igalia.com/news/2020/02/19/upstreaming-progress/
MathML Conference 2020
https://mathml.igalia.com/news/2020/01/20/mathml-conference/
<p>Igalia will be hosting the Web Engines Hackfest 2020 in A Coruña, Galicia,
Spain, Monday, May 18th to Wednesday, May 20th. Members from all parts of the
web platform community are invited to attend. We are excited to announce that
this year we will also include a track specific to MathML. This track will
discuss the accomplishments, current status, future plans and fundraising
efforts of the MathML project. People interested in MathML are invited to join
us please visit the
<a href="https://github.com/Igalia/webengineshackfest/wiki/MathML-Conference-2020">wiki page of the event</a>
for detailed information.</p>
Mon, 20 Jan 2020 00:00:00 +0100
https://mathml.igalia.com/news/2020/01/20/mathml-conference/
Igalia Chats with Neil Soiffer on MathML
https://mathml.igalia.com/news/2019/12/03/igalia-chats-with-neil-soiffer-on-mathml/
<div class="row">
<div style="margin: 50px;" class="embed-responsive embed-responsive-16by9 text-center">
<iframe width="640" src="https://www.youtube.com/embed/dw6QDmH7Sgs" frameborder="0" allowfullscreen=""></iframe>
</div>
</div>
<h2 id="transcription">Transcription</h2>
<blockquote>
<p><strong>Brian</strong>: Ok, so, I am Brian Kardell. I am from Igalia, where I am a developer advocate. We thought it would be fun and interesting for posterity to do some interviews around our MathML efforts. So, I’m here with Neil who is the chair of the MathML Refresh Community Group and we’re going to have a conversation about MathML. So Neil, I think a lot of people coming to MathML and hearing about it — a lot of them are probably new to it, and they probably don’t realize that conversations about Math on the web go way back. And, I know that you have been here for really a lot of it, can you tell us a little about that — your history, and the history of Math on the Web?</p>
<p><strong>Neil</strong>: Yeah, I was part of it from way back from the start — back in the 90’s even. I worked for Wolfram Research and we were interested in promoting a web standard. There had been some initial work on an inital standard that hadn’t gone anywhere. It was very minimal. So, we proposed something to the W3C — and that we should start a group. They were very favorable to that idea so we convened a number of people. We had a few conferences and workshops together. It took a while, but in… 1998, I think it was, we became the second XML application out there on the web. So, it goes back quite a ways. So that was a long time ago, and I was part of that, and I’ve been part of the community working on MathML ever since. Which makes me feel kind of old.</p>
<p><strong>Brian</strong>: [chuckles] Yeah. I think a lot of web standards have a long history, but the late 90’s, that really puts it into perspective. I guess it’s historically been kind of a roller coaster ride?</p>
<p><strong>Neil</strong>: [slight sigh] Yeah. There have been all of these periods of enthusiasm, and then that gets damped down. And then it comes back up again. You know, we had this proposal, it was 1998, and that was great. It was a compromise, as most standards are, and it was huge because of that compromise. That was maybe a problem because that made it harder to implement. Another thing was, as I said, it was an XML application — so we had hitched our wagon to that, but that did not turn out to be the direction the web went in. On the other hand, so did SVG, and SVG has had a little more buy-in on the web than MathML has.</p>
<p><strong>Brian</strong>: Yeah, I’m glad you mention SVG, because I think there are two really interesting things about this. One is that both MathML and SVG are specifically integrated into the HTML parser later on and so they’re “special” in history. But also, like with SVG, because of that aspect of it — MathML has this huge ecosystem around it outside of browsers: From things to understand and transcribe it from handwriting analysis and pictures and just, all this cool stuff… But browsers, I think, have been really where the rollercoaster ride has been, right?</p>
<p><strong>Neil</strong>: That’s right, yeah. It’s been a little strange that all of the browser implementation work has been done by volunteers — it was never initially picked up by the browser vendors themselves. I’m not sure why. I could guess that maybe there is some Math phobia — or maybe math wasn’t the sexy thing to work on or something… I don’t think anyone ever said “gee this is a terrible standard and we don’t want to do it” it just never seemed to become a priority for them. That’s been a disappointment. We’ve seen ups and downs, and I can get into that, but yeah — it’s used in so many places as you indicated. It’s used a lot in publishing because they really do like XML workflows in publishing. But, on the web, it just hasn’t been able to get into all the browsers in the same way other things have. It has been supported in several browsers over the years, but yeah… right now, it is making a comeback — and the roller coaster is on a big upswing, I think.</p>
<p><strong>Brian</strong>: Yeah… Sort of my favorite bit of history here is that MathML has been really the victim of just so much unfortunate timing. So many things that have little to do with MathML itself, but about changes. For example, which browsers were popular at the time, which ones you had to get into — and then also, as you said, the shift from XML and XHTML looking like they are going to be the future and then it leaves W3C and goes into WHATWG as HTML, eventually integrated into the parser. There’s just a really bunch of interesting things there about the unfortunate timing.</p>
<p><strong>Neil</strong>: Yeah, well, you’ve jumped through probably two decades worth of time there, but … yeah. Initially, way back around 2000, it’s probably hard for people to remember even, but <em>the</em> browser back then was IE. Maybe it was IE6 at that point — and — Design Science, a company I eventually joined, produced a plugin for IE called MathPlayer. It supported MathML, it was great. Firefox was a really small percentage, but it was a percentage and people wanted cross platform support. They got MathML support, but when they did it was for XHTML documents only. I can’t recall the reasons why, but, as you said, that seemed to be the trend back then that maybe XML was the way things would go. Turned out, not at all. This created this incompatibility because IE then did not support XHTML. So, we ended up hacking the IE plugin so that it would transform XHTML to HTML, and that was all very good. We were all very positive at Design Science that we had solved this problem — because, now all you had to do is put out XHTML documents. But… there wasn’t an easy way to do that. Most people were putting out HTML. So there was confusion about this, and this lasted until about 2010, I guess, when Firefox finally supported it as HTML. But, by that point IE was falling away, and they had stopped supporting the interface that MathPlayer needed in order to work — and now Chrome was getting to be really popular. So, a volunteer worked and, had some pretty good success, getting an implementation into Chrome [through webkit]. And so, at that point — I think we were up to 4 browsers supporting MathML in some form or other, and things were looking positive, and I think there was a lot of excitement that Chrome was finally going to get it — it was the dominant browser. But, unfortunately when there was a fork to blink off of it, they yanked it all out. There were issues, maybe with security. But in the end, that was a kind of a downside turn for MathML in browsers because this dominant browser no longer supported it. The support in IE had kind of failed as IE went away. It was a bleaker period for MathML support. There were a lot of people who were very upset about Chrome support being yanked. It is ranked as the third, or maybe even the second issue that is sitting there in the Chrome logs as people wanting it back. There definitely were people saying great things about MathML, but it just wasn’t clear why it wasn’t getting the attention from implementers.</p>
<p><strong>Brian</strong>: There was a little bit of a double whammy here, actually, as well. Right about at, approximately at the same time that the math support was removed… and… oh… actually, when we say the math support was removed, we should say math rendering support, more correctly because the parser in all of the browsers still parses MathML specially because…</p>
<p><strong>Neil</strong>: Yeah, that’s something that I think is really important. MathML did go into HTML5, but HTML5 basically defined how the parser was going to turn it into the DOM — it didn’t say anything about how you must render this.</p>
<p><strong>Brian</strong>: Right. It just delegated that support to supporting the rendering of embedded MathML. But, the other sort of double whammy… or, maybe this is the triple whammy, or quadruple whammy? But, it’s right about the same time that support was removed — or — maybe just before, a thing that I was involved in — the Extensible Web Manifesto was published. And, the thing is — it argues how we move forward, and it distinguishes between existing high level features that make up the platform, and new features. And, I think this actually played out pretty badly for MathML too because, like, which one is it? Because we lost support…</p>
<p><strong>Neil</strong>: Yeah, I agree, you are kind of stuck in this limbo where you’re not really supposed to add it because it’s in there, and yet, it’s not supported, so you need to add it on. It’s a catch 22.</p>
<p><strong>Brian</strong>: Yeah, it created a difficult situation because of the split with blink because not just chrome, but opera followed — and so in a very short period of time — like, maybe a week — the trend for MathML seemed to turn increasingly bleak…. But… well… here you are again, with us, and the MathML Core specification, in the MathML Refresh Community Group, chairing it. And, well, I just want to give you the opportunity to answer this, because I know a whole lot of people have asked me as I talk to them about MathML “…ummm…well… [sigh]… is it going to be any different this time”?</p>
<p><strong>Neil</strong>: Yeah, sure. Well, as bleak as it looked in the browsers, it actually had a lot of buyin from publishers and in the accessibility community because that is what the screen readers could use. That is what the dyslexia tools, which wanted to do highlighting of math — that’s what they interpreted. So, there was a lot of non-browser based support for MathML out there — and that support all still exists, and there are still a lot of people who really want to see MathML supported natively. So, while MathML itself wasn’t natively supported in all of the browsers, there is a wonderful — and very large — library called MathJAX. It’s a JavaScript library that does support MathML. It also supports TeX. So, there’s a lot of Math out there and the nice thing about MathJAX is that it can hide the MathML (since it can’t be displayed in Chrome) but they hide it in a way that screen readers can still see it. Wikipedia does the same thing, Khan Academy did the same thing, and, in fact… I was just helping my son with a calculus problem and needed to refresh my memory about how something worked, and I was looking at a bunch of web pages, and they almost all used MathJAX or hid it the same way because they did some server rendering — but they’re all accessible because they have the MathML. So, it’s there, it’s just not being layed out in the browsers. And, as wonderful as the MathJAX library is, its a JavaScript library — and there are just problems with JavaScript libraries beyond just load time, interacting with other things. So, I’m maybe losing the initial train of thought, but I think that this time around, the Igalia work is pushing it foward so that the rendering part of it can show up, and the MathML that’s been there all along can just be put in to be rendered. So, the support that Igalia has given to the implementation and the support that the Chrome team has given Igalia, all makes me very excited about the future. Oh, and also the work the Igalia team has done to help make the other browser engines consistent with this newer work that the refresh community is doing. It just has all of the signs that I think this time, we really have it.</p>
<p><strong>Brian</strong>: I agree with…I agree with the .. the idea that this time is gonna be different. Because, not just we have the support and the implementers and the sort of good working relationship — but because the MathML Refresh Community Group, which you chair, took the time and actually answered all of the questions and concern that were lacking. Because of this weird history, there was this big gap. MathML, even in the browsers where it was implemented, it was kind of… undefined how it would work in the browsers.</p>
<p><strong>Neil</strong>: Yeah… a little defense of MathML, but also, a strong defense of what the group is doing now: Way back in 1998, when people wrote specs, the idea was that browsers would do the innovation and they didn’t want specs that forced everybody to do exactly the same thing because there was a lot of innovation coming on. So if you put out a web page, it wouldn’t on the same on one browser… exactly the same, on another. And that was, I think, a goal back then because people wanted to see — you know — what’s the best way to do things. And, that’s changed dramatically. Now we think “if I put out a web page it should look the same everywhere” and the goal of the refresh group is to do that same thing for MathML. So, one of the things we’re doing in MathML Core work, the part that goes into a browser, is we are looking at how MathML integrates with CSS, and defining layout in terms of the CSS Layout Engines so that the MathML will layout identically in every browser. We’re paring out the parts that are problematic or aren’t used very much, letting those be handled for now by a polyfill to maintain backward compatibility. The issue that made it difficult to implement MathML in a browser, we’ve looked at those and we’ve tried to make that not a problem, and get everything to be identical everywhere so that MathMl fits the way the Web works nowadays.</p>
<p><strong>Brian</strong>: Yeah, definitely. And also, I wanted to make sure you understood the context of my point, because it was not in any way to say something negative about MathML. It’s that it comes from a co-evolutionary past. It was evolving at the same time as HTML and the DOM and how we think about and write up standards. Like, do we write them up in this way where there is infinite room for browsers to interpret them in many ways? Like, do we write the words first without worrying about the implementability of it. Because of this, the spec was not very inline with today’s web platform, and I think that the work that the MathML Refresh CG group has done to integrate it with CSS and the way that we think about units and the roles of attributes and DOM nodes and the DOM itself, actually, is my favorite one… And how we look forward to the future together and integrate with it all together. In fact, one of the things that makes me very very positive is, as you say we have had some positive support from Google and patches have begun landing upstream in the past couple of weeks.</p>
<p><strong>Neil</strong>: Yeah, one of the things that I’m very enthusiastic about is that years ago, when the volunteer that I mentioned trie to put MathML into Chrome — he told me that it was like pulling teeth to get anyone to do a review of his code. And now, these pathces that are landing, I’ve seen very quick response — people are very excited to see these come in. They have comments about how to do some things better, but the interest is there, and I think that’s a world of difference from before and that makes me very, very this time around.</p>
<p><strong>Brian</strong>: So… Another thing that I wanted to ask about — and you have actually answered it a little bit already… When I talk to people about this, they point to — as you already said — the fact that there is a lot of MathML on the web today — or — there is a lot of math on the web today, even more… A superset of MathML I guess. So, it is there. It exists. You can see it. So, kind of, what’s the problem? Why does it really matter to have native support — instead of just some amazing tooling that can turn it into SVGs or images or something like that?</p>
<p><strong>Neil</strong>: Yeah. So.. Again, it comes down to this issue of standards. Once people have standards, they can innovate more because they don’t have to reinvent the wheel every time. There are a number of math editors out there that have their own implementations to draw the math. Except for the very big ones like MathJAX, they tend to have a number of rendering issues when you start stretching things like parenthesis, you might see gaps in them, or they might not stretch very well at all. They may look really funny. And, there are other issue — like if you want to start building interaction, you don’t have a standard underneath to draw — what one person uses underneath can’t be used by someone else, because they render it a little differently using divs and spans and playing different tricks. Once you have that standardization, you have, essentially the ability to stand on the shoulders of others and… stuff happens much better. So, whereas you might see some very nice work — like: Desmos has some very nice interactive stuff — it’s just Desmos only. I can’t export it for someone else and do much of anything other that they support export and import from MathML, but I’m not able to use their interactivity in any particular way. So, I see the standardization as allowing all sorts of innovation to really take off as opposed to being one shot efforts that can’t integrate with each other and can’t build on each other.</p>
<p><strong>Brian</strong>: I think there’s also a really strong case to be made here that math is text, and text is sort of the web’s thing
and putting text into images and things is not..Well, it seems very weird trying to think about how you manipulate the
rendering of text itself with JavaScript without some other like really core fundamental primitives that are currently not there. It feels bad, right? And it feels worse to me even that this is sort of almost discriminates against this one particular kind of text which is fundamentally important to STEM the origins of the web and I think, society. I think there’s sort of a like a [argument about] what should the web be and do, for I don’t know, ethical reasons — I suppose is
maybe the thing I’m trying to say here what do you think?</p>
<p><strong>Neil</strong>: Yeah. I mean, you know there’s… you could do look at all these studies that talk about STEM being important for people to get good jobs to understand the world better . There’s, you know… There’s lots of things about STEM and when it becomes harder for education to put out math on the web that’s just a blockage for people to learn it and become more proficient in it and it does seem like a disservice to a core part of, I mean not — you know not just math but it’s it’s science and engineering and medicine and all sorts of areas that it’s just harder to collaborate in because there’s no easy way to put the math out. Or, you know, there’s no way to build upon these things. So, yeah, it it’s always bothered
me. I’ve had a phrase that every kid and from kindergarten through 12th grade has to take a math class and whereas
everybody uses the web these days for regular text. math has been a kind of backward area. Maybe four years ago now Wikipedia finally buried the MathML inside of the math that it generated [for rendering] so it was at least except accessible but it’s still not as rendered as nicely as the regular text in Wikipedia and there’s just no — you know — rationale for
why math should be held back that way.</p>
<p><strong>Brian</strong>: Yeah I think I think basically we make it hard, and we make you think about… well, make you think about things that you don’t generally have to think about for text like flash of unstyled content, like dragging down the performance of your page, like potential failures in which you get something that is like — gibberish on your screen. So I think that is really interesting. You hit on, in your earlier statement — just now and a little bit before too, about how a standard lets you stand atop that and do interesting new things.. So, I’m curious – like do you have any particular hopes for what kinds of things a universal standard highly
interoperable math on the web would have</p>
<p><strong>Neil</strong>: I think there’s a lot of possibilities for interactivity. So, people have written some editors for the
most part they’re not as powerful as they could be if they didn’t have to spend so much effort trying to figure
out how to get the rendering done. I think they could spend more effort on the interactivity. There are people that have done, you know, great things. I mentioned desmos. There were nice graphics nice interactivity and stuff but it’s it’s a world unto itself because they’re not building upon each others back, and so that desmos application: I can’t just pop it in to something else it’s it’s there it’s by itself and
that’s the way it is and that’s unfortunate. There’s a ecosystem called Jupiter notebooks which is a sort of Python an in the web and that has become very popular. math I think still remains a bit of a problem there because again MathML’s not really there. The nice thing about Jupiter notebooks
is I have the data there. I have programmability. I can produce graphs. I can peruse tables. I can manipulate the data in various ways and send it off to my colleagues and they
look at it and they have that data there and they can do their own thing. But you can’t do that really with the math
because if I ever wanted to do something with the math — I’ve kind of got to pull it out to its own little application,
because it’s not a standard that’s really supported everywhere. So it’s to to look at some of these isolated things and say yeah well if I could just put them all together then I have this really neat little thing that I could
start doing. And maybe I could, you know, take my handwriting and pump it over here and I don’t have to type and do
that. And then I take it out there and I manipulate it again by doing a little bit more handwriting and crossing things
out and so forth as I would do on a pencil and
paper. You just can’t do that where everybody has to implement their own version of how to lay the math out and
there’s just no standard that people can
depend upon that works across all the
browsers. So, there’s you know, once you start thinking about the interactivity you can start thinking about what about
, in education, what kind of neat interactivity things can I do and there. There are some specialized programs that use
their own specialized tools to do that but again they don’t build upon each other and it’s it’s such a sad state
that everybody has to go and reinvent
the wheel every time they want to do something with math. So, I’m very excited at once MathML support gets
in there we’re gonna see all sorts of really interesting applications come up because people will be able to take
advantage of what’s there and what clever things one person has done and incorporate that in math to the work that
they’re doing, and not have to reinvent that part of it.</p>
<p><strong>Brian</strong>: Yeah I think actually, for me, one of the things that’s really interesting about the things that you said there is MathJAX itself. Because… I think people hear us talk about wanting a native standard and why maybe MathJAX
isn’t like the right final answer for this problem and they get the impression that we think MathJAX is good.. or, I mean, is bad. Personally, I think MathJAX is good because it’s enabled all these things…</p>
<p><strong>Neil</strong>: Yeah, I… You know: I want to I want to say absolutely I think MathJAX is wonderful it allowed math to show up on the web and the people that have done it have done a great job with the rendering and I am 100% behind them. It’s just they had to spend a lot of effort on things that they
really didn’t shouldn’t have had to spend.</p>
<p>Brian yeah, yeah — no this this is exactly going to the point that you were saying that I was trying to pull back into
which was: MathJAX actually does like… they have explored considerably more than simply the rendering part, right? Yeah and, so really, I think a lot of the work that we’ve done
in MathML core is to help enable them to continue to do that — but just not worry about the rendering. Because, there
seems like a lot of the people who were involved with mathjax are now working with, like my coworker Joanie — the editor of
ARIA, with you. Like, how can we make MathML exploration interactive and like, more accessible and explorable? And, I
think there’s like lots of great things that they can do if they can stand on top of a standard where a whole bunch of
the problems that a lot of us see with the current state of things are just resolved, right? Like that the library gets smaller, and you don’t have these like worries about like: When does your page render text and reflow and how much JavaScript you have to load to just see the thing? I just think all that gets a lot better if we give them a really good foundational core on which to build</p>
<p><strong>Neil</strong>: Yeah, I mean one of the things I
mentioned I mentioned before as I’ve
been involved in accessibility and
accessibility is a really big deal using
math and now and way back in mathplayer
I added the ability to synchronize the
speech and highlighting because for
people with dyslexia it’s been shown
that if you highlight a word it helps
focus them as you speak it so that they
can read the math better and there’s
studies that show that actually math
reading is twice as hard or they make
twice the number of errors that they do
in reading regular text and without
a standard for how do I pick out the
part that I’m going to highlight that
synchronized highlighting has kind of
been lost for the last decade because
math player’s no longer doing the
rendering. I think once MathML gets
to be back as the standard way of
displaying things we’ll get back to
being able is for it something as basic
as highlighting the math as it’s
been just as it’s done for text now by
the various tools that help people with
dyslexia.</p>
<p><strong>Brian</strong>: Yeah I think I think all this
is really really great I think one of
the things that’s like… probably
hard for a lot of people to appreciate -
it certainly was difficult for me to
appreciate before getting involved with
standards — and even the MathML work, is
just how difficult text rendering
actually is. And to do it in line with
the browser in the way that the browser
thinks about it and flows it and when it
processes and participate in all of the
rules and everything… I was talking to a
friend here in Pittsburgh who is
very well-known for design and the two
of us were just thinking about how
recently it seems we’ve gotten a lot
more information about just how
difficult the rendering of text is, and
how magical we’ve made it. And also how that
that is such a nice thing — that you
don’t have to think about just how much
complexity is there yeah.</p>
<p><strong>Neil</strong>: I mean, I completely agree. It’s taken
for granted I think. Most people think you just are,
like, well I guess just laying out some text maybe.
There’s bold maybe, there’s italic, it’s just gonna wrap
around the lines… I mean how hard is this? But in fact making it look nice and, you know, at the very lowest level having a nice looking font that’s gonna render cleanly on various displays of different resolutions and be clear… that’s incredibly hard stuff. And, to me, the layout of math is so much easier than that. People have put in so much work to make text look nice on a screen [for non-math] — it
just pails in the amount of time the
in on doing that then what it’s taken to
do the math stuff and we all take the
text for granted. I think people
think “Oh laying out the math is so hard”
but once you have a font that you know
can do the type of things math needs to
do and that includes being able to
stretch things like parentheses and
other characters — arrows and whatnot — once
you have that the math layout is
relatively quite simple to sit on top of
all that work that other people who have
done.</p>
<p><strong>Brian</strong>: Yeah I’m I’m really excited to see
to see all this stuff land and to also — like, imagine the larger impact on
society in like a long time. I think that
this has like good good potential for a
lot of positive things like you
mentioned Jupiter notebooks and things
like that that are exploring I think it
would be fantastic if… well not “it would
be” — it will be fantastic when the web is
able to finally meet — 30 years since its
inception at CERN, be able to really meet
the use cases that they had at CERN at
the time.</p>
<p><strong>Neil</strong>: Yeah you know when you think
back to where it all started as you said
back at CERN and you know this is a
scientific thing. Tim Berners-Lee was a
physicist he wanted to put out his stuff
and that still remains a little bit
problematic how he can do that, and
that’s a little strange. But, I’m really
really excited that that problem after,
as you said 30 years, is going away -
and to see to make it so easy
that people can do their research. It’s a
great thing and I’m really happy to be
part of pushing that forward and I’m
really glad you’re part of that effort
too because you’ve great help also.</p>
<p><strong>Brian</strong>: Thank you and thanks for spending the
time to talk to me. I think this was a fun
chat that we had and hopefully people
find it interesting.</p>
<p><strong>Neil</strong>: Well thanks for inviting me to do the chat hopefully
some people learned a little bit about
the history of MathML and why it’s gone
up and down in the past and why this
time it’s finally going to catch on</p>
<p><strong>Brian</strong>: Yeah. Excellent. Thanks Neil.</p>
<p><strong>Neil</strong>: All right, thanks</p>
<p><strong>Brian</strong>: Bye bye</p>
<p><strong>Neil</strong>: Bye</p>
</blockquote>
Tue, 03 Dec 2019 00:00:00 +0100
https://mathml.igalia.com/news/2019/12/03/igalia-chats-with-neil-soiffer-on-mathml/
MathML in Chromium: Upstream process started
https://mathml.igalia.com/news/2019/10/31/mathml-in-chromium-upstream-process-started/
<p>The Chromium project has a very important process for
<a href="https://www.chromium.org/blink/launching-features">launching new features</a>.
MathML is a well-established standard implemented in two
other web engines (Safari and Firefox) and frequently
requested by users of Chrome and Microsoft Edge, but it also has a complex
history in browsers.
As a consequence, it was necessary to proceed a bit differently than other
new web platform proposals.</p>
<p>From the beginning, Igalia engineers have gathered feedback from the community
by participating in the MathML Refresh Community Group and talking to browser
implementers and other standardization groups in order to reach a consensus on
what eventually became <a href="https://github.com/mathml-refresh/mathml-core/blob/master/docs/explainer.md#mathml-core-explainer">MathML Core</a>.</p>
<p>In parallel, they have been working on a Chromium branch
in order to obtain concrete results for discussions with Google engineers and
the web community in general, for the
<a href="https://mathml-refresh.github.io/mathml-core">MathML Core specification</a>
and for
<a href="https://docs.google.com/document/d/1biGEaWN8ThNTDtAbT1M5GIf6N5uQLWdxh2QhrG9uN5c/preview">Chromium’s design documentation</a>.</p>
<p>Finally, they have contributed to the inter-operability effort by creating a
<a href="https://mathml-refresh.github.io/mathml-core/implementation-report.html">test suite of about 2000 subcases</a>
and making necessary changes to existing browser implementations.</p>
<p>After all of this, there is a solid proposal with a wide consensus
on MathML Core. The “Idea” and “Design” phases of the
<a href="https://www.chromium.org/blink/launching-features">launch process</a> are
complete and a significant portion of the “Implementation” phase is ready.
<strong>The upstream process can start!</strong></p>
Thu, 31 Oct 2019 00:00:00 +0100
https://mathml.igalia.com/news/2019/10/31/mathml-in-chromium-upstream-process-started/
MathML and Browsers
https://mathml.igalia.com/news/2019/08/28/mathml-and-browsers/
<p>Users can easily get confused between the different browsers, web engines
and MathML statuses. This blog post provides an overview and summary in order
to clarify things. For each MathML implementation, a screenshot of the same
formula involving the
<a href="https://en.wikipedia.org/wiki/Gamma_function">Gamma Function</a> is
provided so that one can easily compare their rendering quality. Here is what
it looks like in LaTeX:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/xelatex-3.14159265-2.6-0.999991.png" alt="Screenshot of a formula in XeLaTeX" />
<figcaption style="text-align: center; margin-top: 20px;">A mathematical formula rendered by XeLaTeX</figcaption>
</figure>
<p>The rendering engine is one (primary) component of a browser. Rendering web content is very complex business, so there are only a few. Today, the three rendering engines are: WebKit, Blink and Gecko. Each of these is open source, and can be used in several browsers. Along the way, however, there have been some other notable ones: Presto, Trident and EdgeHTML. Each of these was proprietary. Each has (or had) markedly different architectures and evolutions.</p>
<p>The <a href="https://webkit.org/">WebKit</a> rendering engine is used by several browsers, notably: Apple’s
<a href="https://www.apple.com/safari/">Safari</a> browser or
<a href="https://wiki.gnome.org/Apps/Web/">GNOME Web</a>.
An initial implementation of MathML in WebKit happened around
<a href="https://webkit.org/blog/1366/announcing%e2%80%a6mathml/">2010</a> and
was later improved in
<a href="https://webkit.org/blog/2178/last-week-in-webkit-mathml-meets-flexbox-and-xhr-replay-in-the-inspector/">2012</a>. Back then,
<a href="https://www.google.com/chrome/">Google Chrome</a> was also using
WebKit and MathML was enabled in Chrome 24. Here is how it rendered:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/chrome-23.0.1271.99.png" alt="Screenshot of an old MathML implementation in Chrome" />
<figcaption style="text-align: center; margin-top: 20px;">MathML in WebKit-based Chrome 23.0.1271.99 for macOS (2012)</figcaption>
</figure>
<p>A few months later, <a href="https://blog.chromium.org/2013/04/blink-rendering-engine-for-chromium.html">Google announced a fork of WebKit</a>, which they would re-factor into a new web engine called Blink. Blink is used for the
<a href="https://www.chromium.org/Home">Chromium browser</a>.
Chromium is really the same as Google Chrome
<a href="https://en.wikipedia.org/wiki/Chromium_(web_browser)#Differences_from_Google_Chrome">modulo minor differences</a>.
During this refactoring, MathML was disabled and Blink has remained without support ever since. The latest version of Chromium does not support MathML rendering, so basically it renders text without any math layout:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/chrome-76.0.3809.100.png" alt="Screenshot of MathML in Chrome" />
<figcaption style="text-align: center; margin-top: 20px;">MathML in Blink-based Chrome 76.0.3809.100 for Linux (2019)</figcaption>
</figure>
<p>This is, more or less, how Microsoft’s Trident and EdgeHTML engines would have rendered as well.</p>
<p>Older versions of Opera used the proprietary Presto engine
<a href="https://dev.opera.com/blog/mathml-support-in-opera-kestrel/">which supported</a> the
<a href="https://www.w3.org/TR/mathml-for-css">MathML for CSS Profile</a> (effectively just default User Agent styles).
This would have rendered very much like this:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/chrome-76.0.3809.100-css.png" alt="Screenshot of MathML in Chrome with extra CSS rules" />
<figcaption style="text-align: center; margin-top: 20px;">MathML in Chrome 76.0.3809.100 for Linux (2019), with
<a href="https://www.w3.org/TR/mathml-for-css/#d2e2482">Presto's extra CSS rules applied</a>
</figcaption>
</figure>
<p>However, today, <em>many</em> browser projects are based on Blink/Chromium, including both
<a href="https://dev.opera.com/blog/introducing-opera-15-for-desktop-and-a-fast-release-cycle/">Opera</a> and, more recently, <a href="https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/#p4xBTcVeKWqAB5gA.97">Microsoft’s Edge</a>.</p>
<p>During the first semester of 2016, Igalia engineers
<a href="https://webkit.org/blog/6803/improvements-in-mathml-rendering/">worked on a complete refactoring of the MathML code in Webkit</a> to address main design and rendering issues. This is more or less the implementation in recent releases of WebKit, and it renders like this:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/webkitgtk-2.24.3.png" alt="Screenshot of MathML in GNOME Web" />
<figcaption style="text-align: center; margin-top: 20px;">MathML in WebKitGTK 2.24.3 for Linux (2019)</figcaption>
</figure>
<p>As part of the
<a href="https://mathml.igalia.com/news/2019/02/12/launch-of-the-project/">MathML in Chromium project</a>,
Igalia has also been implementing MathML on top of a new layout system for Blink currently being developed by
Google. In Igalia’s Chromium build, MathML is currently rendered like this:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/chromium-igalia-78.0.3874.0.png" alt="Screenshot of MathML in Igalia's Chromium build" />
<figcaption style="text-align: center; margin-top: 20px;">MathML Chromium 78.0.3874.0 for Linux (Igalia's development build)</figcaption>
</figure>
<p>Finally, Gecko is another web engine which is best known for being used by
Mozilla <a href="https://www.mozilla.org/en-US/firefox/">Firefox</a>. The
Mozilla MathML project started 20 years ago and support was released in
<a href="http://www.mozillazine.org/articles/article2278.html">Mozilla’s 1.0</a>, two years before Firefox 1.0 was actually released. MathML is still supported
in the latest versions of Firefox:</p>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/gamma-function/firefox-68.0.1.png" alt="Screenshot of MathML in Firefox" />
<figcaption style="text-align: center; margin-top: 20px;">MathML in Firefox 68.0.1 for Linux (2019)</figcaption>
</figure>
<p>Although the history of browsers and native MathML implementations is a bit
complicated, the summary is:</p>
<ul>
<li>Old implementations from Chrome 24 (WebKit) or Opera 9.5 (Presto) no longer
exist and have nothing to do with newest implementations.</li>
<li>All modern browsers are essentially using or going to use
one of the three open source engines:
WebKit, Gecko and Blink. MathML is implemented in the first two and is being
implemented in the last one.</li>
<li>These are really three different MathML implementations but work is in
process to improve interoperatility between them and fix bugs.</li>
</ul>
Wed, 28 Aug 2019 00:00:00 +0200
https://mathml.igalia.com/news/2019/08/28/mathml-and-browsers/
MathML in Chromium: Project status after one semester
https://mathml.igalia.com/news/2019/07/25/project-status-after-one-semester/
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/mathml-in-chromium-progress-first-semester.gif" alt="Screenshot of MathML formulas in Chromium" />
<figcaption style="text-align: center; margin-top: 20px;">Evolution of MathML rendering during the project</figcaption>
</figure>
<p>Let’s review again the status of the initial
<a href="https://mathml.igalia.com/project/#roadmap">implementation roadmap</a> with
details of the subtasks for the fundamental <em>Stretchy Operators</em> section:</p>
<ol>
<li>Basic setup <span style="color: green">✅</span></li>
<li>Basic Layout <span style="color: green">✅</span></li>
<li>Operator Dictionary <span style="color: green">✅</span></li>
<li>Stretchy Operators.
<ol>
<li><strong>Shaping large and stretchy operators using the MathVariants table</strong>
<span style="color: orange">●</span>
Support has been imported from WebKit and is doing the job for now. However,
the plan is to better integrate it into
<a href="https://github.com/Igalia/chromium-dev/issues/20#issuecomment-481659432">Chromium’s text layout code</a> and
to implement the
<a href="https://mathml-refresh.github.io/mathml-core/#size-variants-for-operators-mathvariants">full support described in MathML core</a>.</li>
<li><strong>Drawing of largeop operators</strong> <span style="color: green">✅</span></li>
<li><strong>Stretch logic in mrow-like elements and under and over scripts</strong>
<span style="color: orange">●</span>
Experimental support has landed and operators can now stretch but this still
need some more testing and polishing.</li>
<li><strong>Using stretchy and symmetric attributes</strong> <span style="color: green">✅</span></li>
<li><strong>Simple embellished operators</strong>
<span style="color: orange">●</span>
Very partial support has landed.</li>
<li><strong>Roots (msqrt, mroot)</strong> <span style="color: green">✅</span></li>
</ol>
</li>
<li>Advanced Style <span style="color: green">✅</span></li>
</ol>
<figure style="margin-top: 1em; margin-bottom: 1em;">
<img class="img-responsive img-center" src="/img/x-tex-screenshot-2019-07-25.png" alt="Screenshot of MathML formula in Igalia's Chromium build" />
<figcaption style="text-align: center; margin-top: 20px;">Screenshot of the <a href="https://fred-wang.github.io/TeXZilla/examples/customElement.html"><x-tex> Custom Element demo</a> in Igalia's Chromium build.</figcaption>
</figure>
<p>Besides the implementation effort, Igalia has been collaborating with
the W3C MathML Refresh Community Group on the
<a href="https://mathml-refresh.github.io/mathml-core/">MathML Core</a> specification.
The group continues to improve MathML compatibility with CSS and HTML5.
More <a href="https://github.com/web-platform-tests/wpt">web platform tests</a>
are being written in order to ensure better
<a href="https://mathml-refresh.github.io/mathml-core/implementation-report.html">interoperability in all implementations</a>!</p>
Thu, 25 Jul 2019 00:00:00 +0200
https://mathml.igalia.com/news/2019/07/25/project-status-after-one-semester/
MathML in Chromium: Igalia is making good progress!
https://mathml.igalia.com/news/2019/05/03/igalia-is-making-good-progress/
<p>Last month, Igalia developers attended <a href="https://www.youtube.com/user/blinkontalks/playlists?view=50&sort=dd&shelf_id=2">BlinkOn</a>.
It was an opportunity to introduce the project to the Chromium
community and to present the first MathML results after three months.
Things are progressing well as you can see on this slide show which
demonstrates the improvements in rendering on two mathematical formulas over
these past few months:</p>
<div style="width: 512px; margin-left: auto; margin-right: auto; margin-bottom: 1em; margin-top: 1em;">
<figure>
<img class="img-responsive" src="/img/mathml-in-chromium-progress-first-months.gif" alt="Screenshot of MathML formulas in Chromium" />
<figcaption style="text-align: center; margin-top: 20px;">Evolution of MathML rendering in Chromium</figcaption>
</figure>
</div>
<p>Currently, the status on the
<a href="https://mathml.igalia.com/project/#roadmap">implementation roadmap</a> is as
follows:</p>
<ol>
<li>
<p><strong>Basic setup</strong>: This part is complete. It is possible to display equations
(centered in its own paragraph) and inline equations (with correct
alignment with respect to surrounding text). Support for miscellaneous
<code class="language-plaintext highlighter-rouge">mrow</code>-like containers, text or spacing elements is implemented. Finally,
basic style attributes (direction, colors, font-size) are mapped to CSS.</p>
</li>
<li>
<p><strong>Basic Layout</strong>: This part is complete too. This includes fractions,
various scripted elements, simple table layout (e.g. for matrices) and
more advanced spacing.</p>
</li>
<li>
<p><strong>Operator Dictionary</strong>. This part is still in progress. For now, simple
dictionary-based operator spacing is implemented. More features like
<code class="language-plaintext highlighter-rouge">accent</code>, <code class="language-plaintext highlighter-rouge">largeop</code> or <code class="language-plaintext highlighter-rouge">movablelimits</code> are expected.</p>
</li>
<li>
<p><strong>Stretchy Operators</strong>. This has not started yet and is currently the most
obvious missing features (e.g. big integrals or stretchy fences).
Discussions that happened with Google at BlinkOn will help to start
the implementation soon.</p>
</li>
<li>
<p><strong>Advanced Style</strong>. Support for the <code class="language-plaintext highlighter-rouge">mathvariant</code> attribute
(including automatic math italic for variables)
has been implemented by extending the <code class="language-plaintext highlighter-rouge">text-transform</code> CSS property.
A new CSS property for <code class="language-plaintext highlighter-rouge">displaystyle</code> is also available but it is not
fully used yet in the MathML layout. Support for the <code class="language-plaintext highlighter-rouge">scriptlevel</code> attribute
is missing but thanks to the help of Mozilla, the
<a href="https://mathml-refresh.github.io/">MathML Refresh Community Group</a> has
designed a CSS proposal that will be used to implement it.</p>
</li>
</ol>
<p>Besides the implementation effort,
interoperability work mentioned in <a href="https://mathml.igalia.com/news/2019/02/12/launch-of-the-project">the initial announcement</a> is
also being pursued at a good pace. Stay tuned for more updates!</p>
Fri, 03 May 2019 00:00:00 +0200
https://mathml.igalia.com/news/2019/05/03/igalia-is-making-good-progress/
BlinkOn 10
https://mathml.igalia.com/news/2019/04/08/blinkon-10/
<p>This week, <a href="https://www.igalia.com/nc/igalia-247/news/item/blinkon10/">Igalia will attend BlinkOn 10</a>, the main event for Chromium developers.
Rob Buis and Frédéric Wang will <a href="https://www.slideshare.net/igalia/mathml-in-layoutng-blinkon-10">present the ongoing
MathML project</a>
and the current status (specification effort, WPT tests, LayoutNG
design, demo of prototype implementation…).
If you plan to be in attendance and would like to have a quick chat, please
reach out to us via info at igalia.com or you can follow us on twitter @igalia.</p>
Mon, 08 Apr 2019 00:00:00 +0200
https://mathml.igalia.com/news/2019/04/08/blinkon-10/
Launch of the MathML project
https://mathml.igalia.com/news/2019/02/12/launch-of-the-project/
<p>Last November, we announced that NISO obtained a grant from the
<a href="https://sloan.org/">Alfred P. Sloan Foundation</a> to support the implementation
of MathML in Chromium. Thanks to NISO’s sponsorship, Igalia’s web platform
engineers will be able to commit to MathML development in 2019.</p>
<h3 id="brief-summary-of-activities-to-date">Brief summary of activities to date</h3>
<p>Google contacted us early this year to reiterate their support for this
MathML project. Their layout team offered to help Igalia with design and code
reviews. They also re-confirmed the
<a href="https://mathml.igalia.com/project/">plan agreed to in 2017</a> which was that
we will work on top of Chromium’s new layout engine “LayoutNG” and introduce
C++ API or CSS features as needed to ensure a clean layering.</p>
<p>Development has been in progress since January. Following the approach
used for adding <a href="https://github.com/Igalia/chromium#chromium-for-wayland">Wayland support to Chromium</a>,
we set up a dedicated
<a href="https://github.com/Igalia/chromium-dev/tree/mathml-dev#-mathml-in-chromium">Chromium branch</a> with continuous integration (for style check, compilation and
test execution).
This branch is regularly rebased against Chromium’s upstream repository in order
to get the latest changes to the layout engine and ensure that the
<a href="https://github.com/web-platform-tests/wpt#the-web-platform-tests-project-">web platform tests</a>
are up-to-date. Incidentally, these MathML tests
<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1452158/">are now imported into the Chromium repository</a>
at regular intervals.</p>
<p>In 2016, we realized that the official MathML specification and test suites had several limitations. In
particular the MathML 3 specification lacks detailed implementation rules for
web engines
(integration with CSS layout, use of low-level primitives, math rendering
based on TeXBook’s appendix G and the OpenType MATH table…),
the official
<a href="https://www.w3.org/Math/testsuite/">MathML test suite</a> is not automated and
the specification has many features without
strong use cases. Similar concerns have been raised by miscellaneous
groups including browser vendors and more recently the
<a href="https://github.com/w3ctag/design-reviews/issues/313#issuecomment-460523527">W3C TAG</a>.</p>
<p>Some effort has been made to address these issues. Specifically, an implementation note for
a core subset has been drafted, we have started the transition from
browser-specific and non-automated W3C tests to official Web Platform Tests and
a lot of feedback has been provided to the Math Working Group. The Math Working Group has, however, been on hold for a while which has prevented any official progress at the W3C.
After discussion between browser implementers, former Math WG members
and other actors of MathML community, a
<a href="https://mathml-refresh.github.io/">MathML Refresh W3C group</a> has been
launched to tackle these issues.</p>
<h3 id="next-steps-for-igalia-and-the-mathml-refresh-w3c-group">Next steps for Igalia and the MathML Refresh W3C Group</h3>
<p>One of the main goals will be to work on a
<a href="https://mathml-refresh.github.io/mathml-core/">new specification for a core subset of MathML</a>
with careful implementation details. Some redundant or less important features
will be deprecated and tools to ensure backward compatibility will be provided.
Missing low-level primitives for math rendering will also be added:
for example we’ve been working with some Mozilla engineers to
standardize
<a href="https://mathml-refresh.github.io/mathml-css-proposals/">CSS features for math</a>
that are currently implemented in Gecko/Stylo as internal properties. Last but not least, great care will taken
for better interoperability and more Web Platform Tests will be added to verify
the specification. In particular, we expect to import, merge and rewrite tests
that are available in WebKit and Gecko’s own test suites.</p>
<h3 id="conclusion">Conclusion</h3>
<p>We believe that we are off to a good start and we are excited to implement MathML in Chromium. We look forward to continuing to collaborate with the different groups on W3C specifications and tests for better
interoperability of math on the web!</p>
Tue, 12 Feb 2019 00:00:00 +0100
https://mathml.igalia.com/news/2019/02/12/launch-of-the-project/
NISO is sponsoring the implementation of MathML in Chromium
https://mathml.igalia.com/news/2018/11/27/niso-sponsoring-implementation-mathml-in-chromium/
<p>We are very happy to announce that <a href="https://www.igalia.com">Igalia</a> has just received the confirmation from the <a href="https://www.niso.org/">National Information Standards Organization (NISO)</a> about the sponsoring for the work related to support MathML in Chromium.</p>
<p>Last August <a href="https://www.niso.org/niso-io/newsline/2018/08/newsline-august-2018">NISO announced that they have received a grant</a> from the <a href="https://sloan.org/">Alfred P. Sloan Foundation</a> to support the implementation of MathML in Chromium. With these funds NISO becomes the <a href="/sponsors/#primary-sponsor">primary sponsor</a> of this initiative covering the <a href="/project/#project-roadmap">project roadmap</a> defined on this website.</p>
<p>Igalia is really grateful to NISO and Alfred P. Sloan Foundation for trusting us to develop this work. We’re still drafting the final plan but ideally everything should start moving by the end of the year or the beginning of 2019.</p>
<p>We’ll post more updates on this website. Stay tuned!</p>
Tue, 27 Nov 2018 00:00:00 +0100
https://mathml.igalia.com/news/2018/11/27/niso-sponsoring-implementation-mathml-in-chromium/