Typst 0.15 makes HTML a first-class target — LaTeX's escape hatch widens

4 min read 1 source clear_take
├── "HTML export is the load-bearing change because it solves the dual-publishing problem for technical documents"
│  └── top10.dev editorial (top10.dev) → read below

The editorial argues HTML export's real significance isn't replacing static site generators, but eliminating the manual re-authoring step for documents that ship as both PDF and web. Academic papers, RFCs, and technical books currently get authored in LaTeX, exported to PDF, then redone in Markdown — Typst's single-source dual output collapses that workflow.

├── "0.15.0 marks a shift from incremental polish to a substantive feature release"
│  └── top10.dev editorial (top10.dev) → read below

The editorial frames the changelog as denser and more ambitious than two years of incremental releases — bundling HTML export, content-driven page breaks, PDF/A archival profiles, ICC color, OpenType per-run features, and CLI variable injection. The breadth signals Typst maturing from a LaTeX alternative into a serious typesetting toolchain being wired into CI pipelines.

└── "Package authors now face mandatory cleanup work to stay in the registry"
  └── top10.dev editorial (top10.dev) → read below

The editorial highlights that the registry will reject manifests missing description, repository, or license fields, and that typst.toml gains a categories array. Anyone who shipped a Typst package in the last year has homework — a deliberate tightening of ecosystem standards that signals the registry is being treated as a real distribution channel rather than a sandbox.

What happened

Typst 0.15.0 landed on June 16 with a changelog that reads less like a point release and less like the incremental polish the project has been shipping for two years. The headline: experimental HTML export is in, gated behind `--features html` but functional enough that the team is asking for production feedback. A Typst document can now compile to either a PDF or a semantic HTML tree from the same source, with `html.elem` and `html.frame` primitives for dropping into raw tags or embedding typeset fragments inside HTML output.

The rest of the changelog is dense. Content-driven page breaks via `pagebreak(to: ...)`, a new `context` expression that captures the current styling environment, first-class support for PDF/A-2b and PDF/A-3b archival profiles, ICC color profiles, OpenType feature tags on a per-text-run basis, and a `typst init --package` command that scaffolds a new package against the registry's manifest schema. The math module gets `mat` delimiter inference and better alignment primitives. The CLI gains `--input` for passing variables from the shell into a compile, which is the kind of thing you only add when people are wiring Typst into CI pipelines.

Package authoring tightened: the registry now rejects manifests with missing `description`, `repository`, or `license` fields, and `typst.toml` gains a `categories` array. If you've shipped a Typst package in the last year, you have homework.

Why it matters

HTML export is the load-bearing change, and not for the reason most people will assume. The interesting question isn't "can Typst replace my static site generator" — it can't, and isn't trying to. The interesting question is what happens to the long tail of documents that currently get authored in LaTeX, exported to PDF, and then manually re-authored in Markdown or HTML for the web version. Academic papers with companion blog posts. RFCs with public mirrors. Technical books sold as PDF and serialized as a website. The dual-target compile collapses two parallel toolchains into one source of truth, and that's a class of work nobody enjoys doing twice.

The `pagebreak(to:)` primitive is small and easy to undersell. LaTeX's page model is famously imperative — you tell it where to break, then fight it when it doesn't. Typst's original model was already more declarative, but content-driven breaks ("break to the next chapter," "break to the next odd page that contains a section heading") are the kind of layout logic that templates have always wanted to express and historically had to fake with `\clearpage` plus prayer. For anyone building reusable templates — thesis kits, report scaffolds, invoice generators — this is the feature that makes templates compose instead of leak.

The package registry hardening is the quietest important change. Typst Universe has been growing steadily — last count, north of 500 packages — and the registry has so far operated on convention. Mandatory metadata fields and a `categories` taxonomy are the kind of governance moves you make when you're planning for a much larger surface area. Compare with npm circa 2014, or crates.io circa 2016: the moment package metadata gets enforced is the moment the ecosystem stops being a hobbyist scratchpad and starts being something a procurement department will eventually audit.

The HN thread (298 points at time of writing) is dominated by two camps. The PDF/A people are quietly thrilled — archival-grade output without a LaTeX toolchain was the missing piece for institutional adoption, and PDF/A-3b lets you embed source files inside the PDF for reproducibility. The web-output people are split between "finally" and "why are you doing this in a typesetter," which is a fair question with a non-obvious answer: the layout primitives that make typesetting tractable (boxes, anchors, content queries) are exactly the primitives that make complex HTML layouts tractable too. A `figure` element with a caption that auto-numbers and cross-references across both PDF and HTML output is genuinely hard to do from either side alone.

What this means for your stack

If you're maintaining a LaTeX pipeline for anything other than journal submission requirements, this release moves the calculus. The remaining LaTeX-only holdouts are roughly: specific journal classes (still LaTeX-mandatory), heavy custom TikZ work, and BibTeX integrations with field-specific styles. Everything else — internal reports, RFCs, books, technical docs, slides via `touying` or similar — is now within reach of a single-source Typst pipeline that outputs both PDF and HTML. The migration cost was always the blocker; the dual-target output cuts it roughly in half because you stop maintaining two copies.

If you've been wiring Typst into CI, the new `--input` flag is the missing piece for templated documents. You can now pass build metadata, git SHAs, environment names, or customer IDs into a compile without preprocessing the source file. Combined with `typst watch` and the existing `--root` flag, the CLI is finally feature-complete for treating documents as build artifacts in the same way you treat binaries.

Package authors should audit `typst.toml` against the new manifest rules before the next push. The registry's preflight will reject incomplete manifests, and the `categories` field is going to determine discoverability once the front-end work lands. Pick categories that match what users actually search for, not what your package technically does — the same lesson npm and PyPI learned the hard way.

Looking ahead

HTML export is marked experimental, which in Typst-land has historically meant "shipping in 0.16, stable by 0.17." The real test is whether the team can hold the line on a single source compiling to both targets without the HTML output degrading into a second-class citizen — the failure mode that killed every previous attempt at this (Pollen, Scribble, Sphinx's PDF output, take your pick). The early signal is good: HTML export was clearly designed alongside the layout engine, not bolted onto a PDF-first compiler. If 0.16 lands MathML export and CSS Grid-aware layout primitives, the LaTeX-to-web pipeline as a category gets quietly absorbed.

Hacker News 315 pts 85 comments

Typst 0.15.0

→ read on Hacker News
room271 · Hacker News

As a former software developer, now turned student (studying theology while I train to become a pastor), Typst has been great for writing my dissertation with one notable exception: it really doesn't handle footnotes well. Specifically, see:https://github.com/typst/typst&#x2

raybb · Hacker News

I'm currently working on my fourth book produced using Typst, and it has been nothing but amazing. LLMs struggle with Typst a bit but other than that it has been an absolute joy to work with.I have a pretty good workflow set up for publishing these books, which are mostly collections of student

subset · Hacker News

Typst also has native scripting! For fun, I've been working on a small statistical distributions library in Typst, distro[^1] that uses plain Typst.It's really nice having a decently powerful scripting component, it makes for some fun literate-style programming. You can package things up p

uniqueuid · Hacker News

I have nothing but great things to say about typst, and this is my personal favorite from this release:"A single document can now contain multiple bibliographies"

thomascountz · Hacker News

HTML support just keeps getting better and better! Mathematical equations are now automatically exported to MathML (thanks to @mkorje)[1] [1]: https://github.com/typst/typst/pull/7436

// share this

// get daily digest

Top 10 dev stories every morning at 8am UTC. AI-curated. Retro terminal HTML email.