{"slug": "mathjax", "name": "MathJax", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 4, "commenters": 10, "warners": 0, "score": 4.23, "rising": -1.31, "first": "2025-11-03", "latest": "2026-07-27", "why": "they get you closer to the typesetting quality of LaTeX compared to MathML", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 3, "neutral": 5, "compare": 1, "warn": 1}, "spark": [2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "they get you closer to the typesetting quality of LaTeX compared to MathML", "kind": "", "icon": true, "domain": "mathjax.org", "github_repo": null, "official_url": "https://www.mathjax.org/", "pricing": "", "aliases": ["MathJax"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 768786865, "item_id": 48049179, "url": "https://news.ycombinator.com/item?id=48049179", "by": "umvi", "date": "2026-05-07", "stance": "recommend", "quote": "it's not nearly as feature complete as Mathjax", "excerpt": "We recently switched from Node.js + Mathjax for rendering latex to Goja (https://github.com/dop251/goja) + Mathjax, and surprisingly it worked really well. We did this because the app is already 99% golang, and this allows us to eliminate the remaining non-go pieces, greatly simplifying the SBOM. And yes, we tried go-latex, but it's not nearly as feature complete as Mathjax. Not to mention using goja + Mathjax adds 1", "context": "", "use_case": "rendering LaTeX", "switched_from": "", "story": "RaTeX: KaTeX-compatible LaTeX rendering engine in pure Rust"}, {"id": 735051265, "item_id": 45940704, "url": "https://news.ycombinator.com/item?id=45940704", "by": "smartmic", "date": "2025-11-15", "stance": "recommend", "quote": "still gives you the benefit to render it with MathJax if required", "excerpt": "It would be much more readable if AsciiMath[0] is used and still gives you the benefit to render it with MathJax if required. [0] https://asciimath.org/", "context": "", "use_case": "", "switched_from": "", "story": "Weighting an average to minimize variance"}, {"id": 732926720, "item_id": 45807920, "url": "https://news.ycombinator.com/item?id=45807920", "by": "mkl", "date": "2025-11-03", "stance": "recommend", "quote": "MathJax has way more accessibility features", "excerpt": "MathJax lets you select text more often than KaTeX as far as I can tell (some KaTeX formulas act dead unless you start selecting outside them), not that either library give you anything especially useful if you try to copy and paste. MathJax will happily give you useful copy-to-clipboard if you right click. MathJax has way more accessibility features: https://docs.mathjax.org/en/latest/basic/accessibility.html", "context": "", "use_case": "", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}, {"id": 732778929, "item_id": 45798683, "url": "https://news.ycombinator.com/item?id=45798683", "by": "susam", "date": "2025-11-03", "stance": "recommend", "quote": "they get you closer to the typesetting quality of LaTeX compared to MathML", "excerpt": "For someone used to the typesetting quality of LaTeX, MathML leaves much to be desired. For example, if you check the default demo at https://mk12.github.io/web-math-demo/ you'll notice that the contour integral sign (\u222e) has an unusually large circle in the MathML rendering (with most default browser fonts) which is quite inconsistent with how contour integrals appear in print. It's not the fault of MathML of course ", "context": "", "use_case": "", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 732774801, "item_id": 45798425, "url": "https://news.ycombinator.com/item?id=45798425", "by": "susam", "date": "2025-11-03", "stance": "warn", "quote": "without the continual reflows or jitter I used to see with MathJax", "excerpt": "I switched from MathJax to KaTeX earlier this year for my blog. So far, it has been working out well. The only feature I really missed was the ability to use \\label and \\eqref for equation referencing, since KaTeX doesn't support these commands [1]. I worked around this limitation with a small custom setup defining my own \\label and a custom \\eqnref (not exactly \\eqref though) [2]. Another thing that bothered me a li", "context": "blog author", "use_case": "math rendering on blog", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}]}], "who": [], "tags": [], "use_cases": ["math rendering", "rendering latex", "math rendering on blog", "math typesetting"], "compared": [{"slug": "katex", "name": "KaTeX", "co": 5, "switched_from": 0, "switched_to": 2}, {"slug": "asciimath", "name": "AsciiMath", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "latex", "name": "LaTeX", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=45746063", "title": "KaTeX \u2013 The fastest math typesetting library for the web", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=49057241", "title": "Htmx 4.0, the first JavaScript library to release exclusively on the Game Boy", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49051130", "title": "Show HN: Writemark, a dependency free web component for inline Markdown editing", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48010729", "title": "RaTeX: KaTeX-compatible LaTeX rendering engine in pure Rust", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47916890", "title": "TurboQuant: A First-Principles Walkthrough", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47792718", "title": "The Future of Everything Is Lies, I Guess: Where Do We Go from Here?", "mentions": 1}], "sentiment_by_month": {"2025-11": {"compare": 1, "warn": 1, "recommend": 2}, "2025-12": {"neutral": 1}, "2026-01": {}, "2026-02": {}, "2026-03": {}, "2026-04": {"neutral": 2}, "2026-05": {"recommend": 1}, "2026-06": {}, "2026-07": {"neutral": 2}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "quotes": [{"id": 785060433, "item_id": 49066277, "url": "https://news.ycombinator.com/item?id=49066277", "by": "aktau", "date": "2026-07-27", "stance": "neutral", "quote": "MathJax is used for turning LaTeX expressions into nice graphics on the client-side.", "excerpt": "I have the same question. It seems like a decent amount of posters here don't require (non-standard) interactivity. Plain HTML+CSS (perhaps via static site generators) would work. It made me think about the Javascript present on my blog. The site works fine without JS (syntax high-lighting is pre-baked server-side). There is some optional JS enhancement: - MathJax is used for turning LaTeX expressions into nice graph", "context": "", "use_case": "", "switched_from": "", "story": "Htmx 4.0, the first JavaScript library to release exclusively on the Game Boy"}, {"id": 784870385, "item_id": 49054399, "url": "https://news.ycombinator.com/item?id=49054399", "by": "mjcohen", "date": "2026-07-25", "stance": "neutral", "quote": "For math.stackexchange.com which uses MathJax", "excerpt": "For math.stackexchange.com which uses MathJax, I use MacDown, a markdown editor with parallel windows, one showing the MathJax and the other (in real time) the rendered math. I find it essential. I enter my math directly into the editor without writing anything on paper. Works for me. The ability to copy and paste is invaluable.", "context": "", "use_case": "math rendering", "switched_from": "", "story": "Show HN: Writemark, a dependency free web component for inline Markdown editing"}, {"id": 768786865, "item_id": 48049179, "url": "https://news.ycombinator.com/item?id=48049179", "by": "umvi", "date": "2026-05-07", "stance": "recommend", "quote": "it's not nearly as feature complete as Mathjax", "excerpt": "We recently switched from Node.js + Mathjax for rendering latex to Goja (https://github.com/dop251/goja) + Mathjax, and surprisingly it worked really well. We did this because the app is already 99% golang, and this allows us to eliminate the remaining non-go pieces, greatly simplifying the SBOM. And yes, we tried go-latex, but it's not nearly as feature complete as Mathjax. Not to mention using goja + Mathjax adds 1", "context": "", "use_case": "rendering LaTeX", "switched_from": "", "story": "RaTeX: KaTeX-compatible LaTeX rendering engine in pure Rust"}, {"id": 766707057, "item_id": 47919191, "url": "https://news.ycombinator.com/item?id=47919191", "by": "0xA2kag", "date": "2026-04-27", "stance": "neutral", "quote": "MathJax 3 was used to render math stuff.", "excerpt": "I did a bunch of things :D I am not a frontend engineer (I am MLE) so I don't have the prowess to create things like this. I am heavily inspired by 3blue1brown and I love creating interactive explainers for ML concepts like this. I previously created this as well arkaung.github.io/interactive-eigenvector/. I heavily used Claude to get to the the exact design, typography, and style I want (there was a lot of hand hold", "context": "", "use_case": "", "switched_from": "", "story": "TurboQuant: A First-Principles Walkthrough"}, {"id": 764815746, "item_id": 47800984, "url": "https://news.ycombinator.com/item?id=47800984", "by": "tmoertel", "date": "2026-04-16", "stance": "neutral", "quote": "with support for rendering formulas using MathJax", "excerpt": "Thanks. I do not have a public, detailed description of how my blog works. But in short, my site build system is powered by a Makefile that invokes Hakyll [1]. My Hakyll configuration has the following rule baked into it for generating HTML docs from Markdown docs in the `posts/` directory: match \"posts/*\" $ do route $ setExtension \"html\" let ctx = postCtx tags compile $ pandocMathCompiler >>= loadAndApplyTemplate \"t", "context": "", "use_case": "Math rendering", "switched_from": "", "story": "The Future of Everything Is Lies, I Guess: Where Do We Go from Here?"}, {"id": 742077521, "item_id": 46379845, "url": "https://news.ycombinator.com/item?id=46379845", "by": "mixedmath", "date": "2025-12-24", "stance": "neutral", "quote": "allows about 1500 characters of mathjax-displayed notes", "excerpt": "I wrote a similar app when mathbin was shutting down. It allows about 1500 characters of mathjax-displayed notes. [1] [1]: https://davidlowryduda.com/mathshare/", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Minimalist editor that lives in browser, stores everything in the URL"}, {"id": 735051265, "item_id": 45940704, "url": "https://news.ycombinator.com/item?id=45940704", "by": "smartmic", "date": "2025-11-15", "stance": "recommend", "quote": "still gives you the benefit to render it with MathJax if required", "excerpt": "It would be much more readable if AsciiMath[0] is used and still gives you the benefit to render it with MathJax if required. [0] https://asciimath.org/", "context": "", "use_case": "", "switched_from": "", "story": "Weighting an average to minimize variance"}, {"id": 732926720, "item_id": 45807920, "url": "https://news.ycombinator.com/item?id=45807920", "by": "mkl", "date": "2025-11-03", "stance": "recommend", "quote": "MathJax has way more accessibility features", "excerpt": "MathJax lets you select text more often than KaTeX as far as I can tell (some KaTeX formulas act dead unless you start selecting outside them), not that either library give you anything especially useful if you try to copy and paste. MathJax will happily give you useful copy-to-clipboard if you right click. MathJax has way more accessibility features: https://docs.mathjax.org/en/latest/basic/accessibility.html", "context": "", "use_case": "", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}, {"id": 732799153, "item_id": 45799947, "url": "https://news.ycombinator.com/item?id=45799947", "by": "susam", "date": "2025-11-03", "stance": "neutral", "quote": "I tend to just stick with MathJax or KaTeX", "excerpt": "> The size of the circle on the contour integral is a matter of personal preference, but it just depends on the typeface and is orthogonal to the choice of LaTeX/MathML. Indeed! That was precisely the point of my previous comment. I agree that switching to Latin Modern resolves some of the minor issues I mentioned earlier. However, it does not resolve all of them. In particular, it does not address the spacing concer", "context": "", "use_case": "", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}, {"id": 732778929, "item_id": 45798683, "url": "https://news.ycombinator.com/item?id=45798683", "by": "susam", "date": "2025-11-03", "stance": "recommend", "quote": "they get you closer to the typesetting quality of LaTeX compared to MathML", "excerpt": "For someone used to the typesetting quality of LaTeX, MathML leaves much to be desired. For example, if you check the default demo at https://mk12.github.io/web-math-demo/ you'll notice that the contour integral sign (\u222e) has an unusually large circle in the MathML rendering (with most default browser fonts) which is quite inconsistent with how contour integrals appear in print. It's not the fault of MathML of course ", "context": "", "use_case": "", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}, {"id": 732774801, "item_id": 45798425, "url": "https://news.ycombinator.com/item?id=45798425", "by": "susam", "date": "2025-11-03", "stance": "warn", "quote": "without the continual reflows or jitter I used to see with MathJax", "excerpt": "I switched from MathJax to KaTeX earlier this year for my blog. So far, it has been working out well. The only feature I really missed was the ability to use \\label and \\eqref for equation referencing, since KaTeX doesn't support these commands [1]. I worked around this limitation with a small custom setup defining my own \\label and a custom \\eqnref (not exactly \\eqref though) [2]. Another thing that bothered me a li", "context": "blog author", "use_case": "math rendering on blog", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}, {"id": 732764113, "item_id": 45797757, "url": "https://news.ycombinator.com/item?id=45797757", "by": "s20n", "date": "2025-11-03", "stance": "compare", "quote": "MathJax 3 (a complete rewrite) has significantly improved performance from the previous version and is now a bit faster than KaTeX in my experience.", "excerpt": "I use KaTeX for my blog, and indeed KaTeX was faster than MathJax 2, but MathJax 3 (a complete rewrite) has significantly improved performance from the previous version and is now a bit faster than KaTeX in my experience. This website has a comparison of the loading times of the same LaTeX rendered in both KaTeX and MathJax: https://www.intmath.com/cg5/katex-mathjax-comparison.php", "context": "", "use_case": "math typesetting", "switched_from": "", "story": "KaTeX \u2013 The fastest math typesetting library for the web"}]}