Formulae render through the ZaTeX engine, loaded at runtime via dlopen — never linked, so the ship binary keeps its size budget with the engine absent. Math is render-only, never authoring.
1. Read.app/Contents/Resources/libzatex.dylib (vendored — the version a release ships)
2. /usr/local/lib/libzatex.dylib (manual install)
Without either, formulae fall back to source text — fences as code cards, islands as literal text.
git clone https://github.com/gregoreesmaa/zatex # build packages/zatex per its README, then: cp <build-output>/libzatex.dylib /usr/local/lib/libzatex.dylib
Only exact ```math fences, whole-line $$…$$ display, and guarded $…$ inline islands route to the engine. tex/latex/katex fences stay syntax-highlighted code; currency ($100) stays literal.
Layout is fully on-device and synchronous — a document's formulae never leave the machine.