Math accessibility
MathML, MathJax, and the long road
For twenty years the web rendered prose well and rendered mathematics badly. Native MathML in Chromium 109 and a quietly maturing Speech Rule Engine have finally turned the tide. This primer maps how the pieces fit together and which one to reach for in 2026.
1. Native MathML in 2026
The first thing to say plainly is that the long, slow argument about whether browsers should render mathematics natively has been settled. Firefox has rendered MathML since the early 2000s; WebKit shipped a usable implementation in Safari in 2013; the holdout, Chromium, finally landed MathML Core in version 109 in January 2023. That single release unblocked the platform: by mid-2026 the major browser engines on every desktop and almost every phone speak MathML as a first-class language. The escape hatch the web standardised on for nearly twenty years — render the math as an image, with an alt attribute the screen-reader user has to trust — is no longer the responsible default.
What changed in 2023 is narrower than the headline suggests. Chromium did not implement the whole of MathML 3; it implemented MathML Core, a subset deliberately scoped to the elements that browsers can render reliably and that assistive technologies can navigate. Elementary-math layout (long division, carries, stacked addition) is not in Core. Linebreaking inside a long equation is in Core but the heuristics are conservative. Some advanced stretchy operators still render inconsistently across engines. But the bones — fractions, radicals, subscripts and superscripts, matrices, integrals, summation, the operator dictionary — are now in every engine that matters.
The accessibility consequence is direct. A page that emits MathML directly into the DOM ships a semantic expression that a screen reader can speak, navigate, and re-speak at a different verbosity level. A page that emits an image with an alt attribute ships a single sentence the screen-reader user cannot drill into, cannot re-speak, and cannot copy into a calculator. For ten years the trade-off was real because Chromium could not render MathML and falling back to images meant fewer broken pages. That trade-off no longer holds.
MathML Core is the subset of MathML 3 the browser engines agreed to ship interoperably. If you are emitting MathML from a build pipeline today, target Core. Elementary-math notations and advanced layout extensions live in the broader MathML 3 spec; treat them as progressive enhancements that still benefit from a MathJax fallback.
”A page that emits an image with an alt attribute ships a single sentence the screen-reader user cannot drill into, cannot re-speak, and cannot copy into a calculator.”
2. MathJax: from renderer to polyfill
MathJax was the bridge that kept math on the web legible during the long Chromium gap. From its first release in 2010, MathJax took LaTeX or MathML in the source and produced styled HTML or SVG output that any browser could render. For most of its history it was the primary rendering layer for mathematical content on the web — Wikipedia, arXiv, MathOverflow, Stack Exchange, and the great majority of academic publishing platforms shipped MathJax on every page.
The role MathJax plays in 2026 is different. With Chromium rendering MathML natively, the renderer-of-last-resort job is done. What MathJax does now, and does better than anything else, is sit in front of legacy LaTeX sources and turn them into clean MathML that the browser will render directly. Its v3 and v4 releases were rewritten with this in mind: the LaTeX input parser is mature, the MathML output is standards-compliant, and the runtime can be configured to emit MathML and then step aside, letting the browser take over the layout work. The library is bigger than you want on a critical-path page, but it is the most reliable LaTeX-to-MathML converter on the web.
3. LaTeX to MathML in practice: good vs bad markup
Most mathematical content on the web has a LaTeX source somewhere upstream. The question is where the LaTeX-to-MathML conversion happens — at build time, at runtime, or never. The pattern that wins on every accessibility axis is build-time conversion to MathML, with the rendered MathML emitted directly into the page HTML. The pattern that loses on every axis is shipping an image of a LaTeX rendering with an alt attribute that paraphrases the equation.
- Equation lives in the DOM as semantic markup.
- Screen reader speaks operator, operand, structure — and lets the user navigate sub-expressions.
- Browsers render it natively; zero runtime JavaScript on the critical path.
- Search engines and AI summarisers can read the expression as text.
- Copy-paste produces a usable representation, often round-trippable to LaTeX.
- Equation is a flat image; the structure is invisible to assistive technology.
- Screen reader speaks the single alt sentence; no navigation, no re-speak, no verbosity control.
- Image scales poorly with reader zoom and operating-system text size.
- Search engines and AI tools see “image of equation” and nothing more.
- Copy-paste produces a PNG; the reader cannot move the math into a calculator.
Many CMS platforms still ship raw LaTeX inside the page and let a runtime library (often MathJax) discover and convert it on load. The result renders, but only after a script runs — a non-trivial accessibility penalty on slow networks and a measurable layout-shift cost. Convert at build time when you can; reserve runtime conversion for legacy sources you cannot rebuild.
4. Screen-reader math navigation
Rendering the math is half the job. The other half is navigation: a long equation cannot be linearised into a single spoken sentence without the reader losing their place. Every major screen reader now ships a “math mode” that lets the user step into a fraction, walk along its numerator, drop into a subscript, jump out to the parent expression, and re-speak the current sub-expression at a different verbosity. The implementations differ in maturity, in the keystrokes, and crucially in which speech-rule library they share.
| Screen reader | Native MathML | Speech engine | Navigation | Maturity |
|---|---|---|---|---|
| NVDA (Windows) | Yes | MathCAT (modern), historic MathPlayer add-on | Sub-expression walk, verbosity levels, braille output | Production-ready |
| JAWS (Windows) | Yes | MathCAT | Sub-expression walk, math-only review cursor | Production-ready |
| VoiceOver (macOS, iOS) | Yes | Apple internal, partially derived from MathML semantics | Item-chooser navigation; less granular than NVDA/JAWS | Usable, less rich |
| ChromeVox (ChromeOS, Chrome) | Yes | Speech Rule Engine (SRE) directly | Sub-expression walk via SRE rules | Strong in classroom contexts |
| Orca (Linux) | Partial | SRE via browser; Orca itself relies on accessible-tree text | Limited; depends on browser | Variable |
MathPlayer was the original Design Science add-on that taught NVDA to speak MathML; it has been retired. MathCAT is its modern successor — actively maintained, Rust-based, the recommended back-end for both NVDA and JAWS today. MathML is the markup itself: the input both libraries consume. References to MathPlayer in a 2026 spec or vendor doc are usually historical and should be read as “the math-speech add-on” in spirit.
5. The Speech Rule Engine quietly underneath
Behind almost every modern math-speech experience on the web is a project most engineers have never heard of: the Speech Rule Engine, or SRE. SRE started inside Google’s ChromeVox team in the mid-2010s and is now an open-source library maintained primarily by Volker Sorge. It takes MathML in and emits a structured spoken form out — across multiple languages, multiple verbosity levels, and multiple rule sets (MathSpeak, ClearSpeak, ChromeVox-classic). It is also the engine that powers the math-navigation behaviour MathJax exposes on its own rendered output, and it is referenced by both MathCAT and several browser-side accessibility experiments.
The reason SRE matters as infrastructure is that without a canonical pronunciation library, every screen reader would invent its own way to say x squared plus y squared equals r squared. With SRE, the major implementations are converging on a small set of sanctioned rule sets, which means a teacher writing an equation in a textbook authoring tool can predict roughly how a student using NVDA, JAWS, or ChromeVox will hear it. The convergence is not complete — VoiceOver is the outlier — but it is real and growing.
MathSpeak versus ClearSpeak
The two best-known rule sets ship inside SRE. MathSpeak is the older, more literal style — “fraction one over two end-fraction” — and was designed for braille-style precision. ClearSpeak is newer, more natural-sounding — “one-half” — and is the default in most classroom deployments today. Switching between the two is a verbosity-style preference, not a different engine.
Multi-language support
SRE ships translated rule sets for English, French, German, Italian, Spanish, and a growing set of additional languages. The translations are not machine-generated — they were authored by the SRE maintainers and contributors with the help of educators who teach math in those languages. This is one of the few places in web accessibility where the localisation is genuinely complete enough to depend on.
Braille output, not just speech
SRE emits Nemeth and UEB-math braille from MathML as well, which is the path most modern braille displays use to render mathematics. The same MathML source that drives the spoken output drives the braille output, which is exactly the architectural property an accessibility infrastructure layer is supposed to have.
6. Recommendations by document type
The general principle — ship MathML, convert from LaTeX at build time when possible, lean on SRE for speech — applies to every document type. The specifics shift with the surface. Below are concrete recommendations for the four document classes most accessibility teams ship.
Web articles and blog posts
If your platform supports it, render MathML directly into the post body — most static site generators can call Temml or Pandoc at build time and emit MathML into the HTML. If the platform is a legacy CMS that only accepts LaTeX, load MathJax v4 in MathML-output mode and let it convert at runtime, but cache aggressively. Do not ship PNGs of equations.
Academic journal papers
The corpus is overwhelmingly LaTeX, and the publication pipeline is the right place to convert. Pandoc, MathJax in batch mode, or the publisher’s own LaTeXML pipeline can emit HTML with MathML and a PDF in the same run. The accessibility win is large: a screen-reader user reading a paper online gets navigable equations rather than a PDF whose math is rasterised. Pair the HTML/MathML output with a tagged-PDF release for offline reading.
Textbooks and long-form courseware
EPUB 3 with embedded MathML is the standard, and modern reading systems (Apple Books, Thorium, ACE-tested production readers) handle it correctly. Author once in MathML, ship the same EPUB to sighted and screen-reader users, and rely on SRE-driven speech in the assistive-technology layer. Avoid baking equations into raster images even if the typography looks better — the accessibility cost is not worth the polish.
Classroom slides and live teaching
Slides are the messiest surface — PowerPoint and Google Slides each handle math differently, and presenter mode often falls back to images. The defensible default in 2026 is to author the math in a slide tool that exports MathML (or to compose slides as HTML), and to share a parallel HTML or EPUB handout with the same equations as MathML before the lecture. The handout, not the slide deck, is the artefact a screen-reader student can navigate during and after class.
Across all four document types, the same single principle holds: emit MathML, let the browser render it, let SRE-driven speech and braille handle the assistive-technology layer, and treat any pipeline that produces an equation image as a failure to be fixed. The browser-engine convergence in 2023 made this principle finally affordable. The screen-reader convergence on SRE made it finally consistent.
Conclusion: the long road, and where it now leads
Math accessibility on the web has been the slowest of the major accessibility frontiers to mature. The standards were ready in 1998. The screen readers were ready, in a basic way, in the mid-2000s. The browser engines took until 2023. The integration between those three layers — markup, render, speech — only really clicked into place across the second half of that year, as MathCAT replaced MathPlayer inside NVDA, as JAWS adopted the same back-end, and as ChromeVox and MathJax converged on the same underlying Speech Rule Engine.
The work that remains is at the edges. Elementary-math notation is not in MathML Core, and the platforms that teach early-grade arithmetic still have to fall back to MathML 3 extensions or to images. VoiceOver’s math navigation is usable but less granular than what Windows users get. Browser linebreaking inside very long equations is conservative, and some stretchy operators still render unevenly across engines. These are real problems and worth fixing. They are not the same kind of problem as “Chromium cannot render math at all” was for the decade before 2023.
For an engineering team shipping a new product surface in 2026 with mathematical content on it, the defensible default is: emit MathML, generate it from LaTeX at build time when the source allows, fall back to MathJax v4 for legacy LaTeX you cannot pre-process, and trust the screen-reader stack — NVDA plus MathCAT, JAWS plus MathCAT, ChromeVox plus SRE, VoiceOver natively — to handle the speech layer. The long road is not over. But for the first time, it leads somewhere readable.
”The standards were ready in 1998. The browser engines took until 2023. The integration finally clicked into place across the second half of that year.”