Skip to content

v0.1.15

Latest

Choose a tag to compare

@erweixin erweixin released this 16 Oct 06:29
· 19 commits to main since this release

[0.1.15] - 2026-10-16

What's Changed

Compatibility

  • LayoutOptions keeps the v0.1.14 fields and layout(nodes, options) keeps its
    signature. Existing full struct literals and exhaustive patterns remain valid.
    Host-provided glyph metrics use the additive layout_with_fallback_metrics
    API; no caller migration is required. The C ABI and DisplayList JSON remain
    unchanged.

Added

  • \slashed and \centernot commands.
  • Mac Catalyst support in the Apple XCFramework and Swift package.
  • layout_with_fallback_metrics(nodes, options, metrics) for host-provided
    fallback glyph metrics and more accurate text spacing. See the API rustdoc
    for an example and layout validation for resource limits.
  • Configurable PNG/SVG padding in the CLI.
  • Borrowed lexer tokens via Lexer::next_span() and TokenSpan.

Fixed

  • PNG rendering reports malformed large-font errors instead of succeeding with missing glyphs.
  • PNG glyphs shifting by one pixel after cache reuse at different positions.
  • mhchem spacing regression caused by escaped ## source locations.
  • Color inheritance for rules, boxes, and related symbols.
  • Website rendering before fonts finish loading.
  • Website font-loading failures now time out and allow retrying without reloading the page.
  • Delimiter cache keys no longer serialize the host's fallback glyph metrics map on every lookup.
  • iOS linking failures involving unwind symbols.

Security

  • Bound macro expansion, mhchem intermediates, and layout work, including
    \edef/\xdef, \pmb, and Array/CD padding.
  • Reject overflowing \char values and oversized PNG allocations.
  • Bound dashed-line rendering and clip work to the viewport.
  • Enforce Android 16 KB ELF alignment and verify release packages.

See resource limits for scope and limitations.

Performance

  • Cache glyph masks and emoji rasters; share font buffers and load fallback
    fonts on demand.
  • Reuse built-in macros and delimiter measurements; reduce allocations in
    PNG encoding and SVG serialization.

Latest comparison with v0.1.14 (lower is better):

Metric v0.1.14 Unreleased Change
PNG render 717 μs 339 μs −53%
SVG standalone 938 μs 403 μs −57%
End-to-end PNG 1,030 μs 506 μs −51%
Peak RSS 389.5 MiB 218.6 MiB −44%

Measured on x86_64 macOS with Rust 1.95.0 and matching dependencies: 100 formulas
in release mode, one warmup and three measured renders per formula, median of
five alternating runs. RSS excludes compilation. These are warmed-render
results; cold renders and continually changing glyph positions may differ.

PRs

  • feat(Performance): png & svg by @erweixin in #152
  • fix(layout): inherit formula color for implicit geometry by @Yash-Singh1 in #155
  • fix(font-loading): enhance font loading mechanism with stylesheet readiness and improved error handling by @erweixin in #156
  • fix(ios): build XCFramework with panic-abort std by @chasing1874 in #153
  • feat(cli): add configurable padding for PNG and SVG by @Tao-Boy in #160
  • test(core): capture compatibility baselines for refactoring by @erweixin in #157
  • feat: support \slashed by @erweixin in #161
  • feat: support \centernot relation negation by @erweixin in #166
  • feat(ios): add Mac Catalyst XCFramework support by @kirill-markin in #167
  • fix(ios): improve Catalyst XCFramework workflow and font registration checks by @erweixin in #169
  • fix(android): add Android ELF alignment checks and verification scripts by @erweixin in #170
  • feat(layout): take host metrics for glyphs the KaTeX fonts lack by @codec4 in #168
  • fix: enforce resource limits across parsing, layout, and rendering and improve font loading by @erweixin in #171
  • chore: update version to 0.1.15 by @erweixin in #172

New Contributors

Full Changelog: v0.1.14...v0.1.15