Skip to content

FlashTeX v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Oct 18:01
6316bc1

FlashTeX v0.2.0 is the first release with the new engine: a port of pdfTeX
to Rust that typesets as pdflatex does. It covers the changes since v0.1.9
(2026-09-26), about 560 merged pull requests.

The new engine

  • FlashTeX now ships a pdfTeX-compatible engine. It is translated from
    Knuth's tex.web and pdftex.web with TeX Live's change files, and it
    passes Knuth's trip test and e-TeX's etrip test.
  • pdfTeX's font, image and PDF code is ported too: Type 1, Type 3/PK,
    TrueType and OpenType fonts, PNG/JPEG/PDF images, and SyncTeX.
  • Each night it is checked against pdflatex, over fixtures, arXiv papers,
    templates, TeX Live package documents and a corpus of about 5,000
    documents. Infinite Descent, a 592-page book, comes out the same as
    pdflatex's.
  • The nightly check now downloads every arXiv paper first,
    retries and checks it, and reports a failed download as a failure. Before,
    a paper that failed to download was left out without notice.
  • bibtex and makeindex are now built in (Rust ports). They run inside the
    engine and from \write18, with no TeX Live install.
  • \write18 is restricted by default, as in TeX Live.

Instant preview

  • One engine process stays running for each open document. After an edit it
    starts again from a saved point close to the edited page, not from the
    start of the document. Preamble edits also restart part-way through.
  • Reopening a document is faster: the last state is saved on disk, so a
    reopen often needs one pass, not two or three.
  • Tested for typing at up to 200 words per minute, with a latency target for
    the edited page.
  • Editing \title and other preamble lines that LaTeX only uses at
    \begin{document} no longer restarts the document from the start.
  • Each keystroke costs less: the preview's drawing step reads pages about four
    times faster, and the check for whether a rerun has caught up is about a
    fifth cheaper. Output is unchanged.
  • A file that is rewritten in place with its old size and date put back (for
    example by cp -p or rsync -t --inplace) is now seen as changed. Saved
    states from earlier builds are discarded once and rebuilt.

Mac app

  • Engine choice. You can turn on the new engine for one document (the
    status bar's engine menu, or View > Engine for This Document) or for all
    documents (Settings > Compile). New documents still use the previous
    engine by default. If the new engine cannot typeset a project the way the
    previous engine does, the app uses the previous engine and tells you.
  • New-engine preview. Zoom with sharp tiles, forward and reverse search,
    clickable hyperref links, the page under the caret marked, page labels,
    dark preview, VoiceOver page text and a Pages rotor. Export PDF and Print,
    bibliographies, indexes and package fetching all work with it.
  • Unicode mode. Documents that need fontspec or unicode-math run in a
    XeLaTeX-compatible engine (flashtex-host-unicode), chosen per document.
    Unicode mode also works with no TeX Live installed, and finds the bundle's
    fonts by the same family names as xelatex.
  • Faster Unicode mode. Unicode mode now restarts after an edit from the
    page before it, or from \begin{document} after a body edit, instead of
    typesetting the whole document again. Reopening a document uses its saved
    state. Start-up is about 44% shorter and each keystroke does about two
    thirds less work. This also holds for right-to-left documents set with
    polyglossia.
  • Right-to-left and other scripts in Unicode mode. Hebrew and Arabic words
    are laid out right to left, as xelatex does, and line breaking for
    \XeTeXlinebreaklocale (Thai, Japanese and similar) follows xelatex. The
    polyglossia manual, which used to stop with an internal error, now
    typesets as xelatex's.
  • Unicode-mode PDFs. Beamer's links and soft masks are written, and
    copied text maps back to the right characters as xdvipdfmx's does.
  • Performance modes. Settings > Performance: Low Memory, Balanced or
    High Performance. You can switch while a document is open.
  • Editor. The project sidebar shows a folder tree. You can paste or drop
    an image to make a figure, choose editor themes, and use hybrid conceal
    (\alpha shows as α until the caret reaches it). The TeXpand abbreviation
    engine is in too, off by default. You can preview a single \include
    chapter (LaTeX's \includeonly). Settings has a delay for dimming stale
    pages. New windows open on a blank article.
  • Live Share (preview, off by default) lets people edit together, with
    presence, invites and approval.
  • Preview fixes. Page labels and zoom tiles no longer appear upside
    down for a moment while a page is redrawn.
  • Speed and memory. Typing no longer waits on work over the whole
    document. Leaks are fixed, including one in the preview that kept every
    page image (up to 9.6 GB). Memory use on large documents is much lower,
    and the app trims its caches under memory pressure.

Command line

  • flashtex-v3 runs build, check and watch on the new engine and shows
    progress on a terminal. --mode, % !TEX program and a [project]
    setting choose the engine.
  • The CLI tarball ships flashtex-v3 with its engine host, flashtex-host.
  • Package downloads use rustls 0.23.45, which fixes a TLS handshake flaw
    (GHSA-2mjx-qc3c-rqvc).
  • The README has benchmarks of the new engine against pdflatex, xelatex and
    latexmk.

No TeX Live needed

  • A TeX Live 2026 bundle is published as release assets
    (texbundle-tl2026-*). The new engine compiles from it with no TeX Live
    installed, including bibliography and index styles.
  • The bundle now also has the packages and fonts the Unicode test documents
    need, an index of font names, and TeX Live's glyphlist, so text copied
    from a PDF built without TeX Live maps back to the right characters.

Previous engine

  • The previous engine is frozen and gets fixes only. Fixes in this release:
    TikZ and pgfplots plots, amsmath aligned, amsthm spacing, \sqrt[n],
    \binom, siunitx, fancyhdr, minipage, multicolumn, and side-by-side
    authors.

Licences and source

flashtex-host and flashtex-host-unicode are separate programs under the
GNU General Public License, version 2 or later. Their complete source is the
v0.2.0 tag of https://github.com/flash-tex/flashtex (crates/flashtex-engine,
crates/flashtex-xetex, tools/web2rust), and GitHub's source archives of
that tag are listed with this release. The licence texts and third-party
notices ship in the app and in share/flashtex/engine/ in the CLI tarball.
The rest of FlashTeX is under the MIT licence (LICENSE).

Downloads

Asset What
FlashTeX.dmg / FlashTeX-0.2.0-macos-arm64.dmg The Mac app (macOS 14+, Apple Silicon). Same file under both names; install.sh on the website fetches FlashTeX.dmg.
flashtex-cli-0.2.0-macos-arm64.tar.gz The flashtex CLI (flashtex build main.tex, check, watch, supported, worker, fonts) plus flashtex-render/compiler/pdf helpers, with the bundled fonts/metrics; and flashtex-v3 (build, check, watch on the pdfLaTeX-compatible engine; needs TeX Live) with its engine host flashtex-host (GPL-2.0-or-later).
flashtex-cli-0.2.0-linux-x86_64.tar.gz Command-line tools for Linux x86_64 (built: flashtex-cli render-pipeline compiler pdf flashtex-build flashtex-engine).
SHA256SUMS sha256sum -c SHA256SUMS after downloading.

Signing

This build is ad-hoc signed (no Developer ID certificate configured in CI). macOS Gatekeeper will refuse the first launch from a browser download: right-click FlashTeX.app > Open, or install with the website's install.sh which strips the quarantine attribute after verifying the checksum.

FlashTeX.dmg sha256: 8b6e35452fbb4eb9cc5f6d638309c82882e60a7cd9d81d915bbfab52d123d3dd

Source

Source code for the FlashTeX engine (GPL-2.0-or-later): https://github.com/flash-tex/flashtex (this release: https://github.com/flash-tex/flashtex/tree/v0.2.0)

What's Changed

New Contributors

Full Changelog: v0.1.9...v0.2.0