A chalkboard with a mathematical equation in chalk and a hand about to add another term — the visual marker for math accessibility on the web.
Image description: A chalkboard with a mathematical equation in chalk and a hand about to add another term — the visual marker for math accessibility on the web.

Engineering primer · Math accessibility

Math accessibility: MathML, MathJax, and the long road

An engineering primer on the state of math accessibility on the web in 2026.

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.

2023
Chromium ships native MathML Core (v109)
4
screen-reader math stacks in active use
approx. 95%
of browsers now read MathML natively
10 min read
Updated May 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.

approx. 95%
of global browser sessions now render MathML natively, per the browser-share aggregate of Chromium 109+ since Jan 2023, Firefox, and WebKit-based Safari.
approx. 23 years
between MathML becoming a W3C Recommendation (Feb 1998, MathML 1.01) and Chromium shipping a native implementation (Jan 2023).
approx. 0 KB
JavaScript needed to render native MathML — the rendering happens in the browser layout engine, not on the main thread.
MathML Core, briefly

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.”

— this article, section 1

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.

MathJax v4
Open source · runtime LaTeX/MathML conversion
Legacy LaTeX corpora rendered in the browser; the renderer behind most academic and STEM publishing platforms
StrengthLaTeX parser handles the long tail of academic macros
WeaknessHeavy runtime; approx. 700 KB on a critical path is real
Best forPages whose source is LaTeX and that cannot pre-process
KaTeX
Open source · fast LaTeX renderer
Documentation sites, blogs, and product surfaces that want LaTeX without the MathJax payload
StrengthFast, small (approx. 270 KB), synchronous render
WeaknessMathML output mode improved but still narrower coverage than MathJax
Best forPerformance-sensitive surfaces with a smaller LaTeX dialect
Temml
Open source · LaTeX to pure MathML
Build-time conversion: emit MathML once at publish time, ship zero JavaScript at runtime
StrengthPure MathML output; tiny runtime footprint when used at build time
WeaknessSmaller LaTeX dialect than MathJax
Best forStatic-site pipelines where math is part of the build
Pandoc
Open source · document-format converter
Convert long-form LaTeX or Markdown manuscripts into HTML with MathML at publish time
StrengthWhole-document conversion; ships MathML as one output choice
WeaknessNot a runtime renderer; CLI-driven
Best forAcademic publishing pipelines and textbook conversion

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.

Good: MathML in the page
  • 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.
The third option that also loses

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 readerNative MathMLSpeech engineNavigationMaturity
NVDA (Windows)YesMathCAT (modern), historic MathPlayer add-onSub-expression walk, verbosity levels, braille outputProduction-ready
JAWS (Windows)YesMathCATSub-expression walk, math-only review cursorProduction-ready
VoiceOver (macOS, iOS)YesApple internal, partially derived from MathML semanticsItem-chooser navigation; less granular than NVDA/JAWSUsable, less rich
ChromeVox (ChromeOS, Chrome)YesSpeech Rule Engine (SRE) directlySub-expression walk via SRE rulesStrong in classroom contexts
Orca (Linux)PartialSRE via browser; Orca itself relies on accessible-tree textLimited; depends on browserVariable
MathPlayer, MathCAT, MathML — three names to keep straight

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.

1

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.

2

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.

3

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.

1

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.

2

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.

3

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.

4

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.

Single principle, four surfaces

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.”

— this article, conclusion