Changelog

v0.3.0

Format v0.3.0

  • Engine
  • React
  • Vue
  • Studio
  • Fonts
  • API

Format v0.3.0 brings faster PDF rendering, running heads, clearer bookmarks, and document language support.

Faster PDF rendering. In early benchmarks, text and table-heavy documents of around 50–400 pages took 15–29% less time from request to finished PDF.

DocumentPagesTime saved per requestReduction
Text~50290–560 ms17–27%
Tables~50400 ms15%
Text~4002.9–4.0 s18–29%
Tables~40011.9 s21%

Keep readers oriented. Add a RunningHead to a header or footer to show the current section's title and number. Show the page's first or last heading, the section continuing from the previous page, or a range of headings. The new within option on TableOfContents lets you add chapter contents alongside a document-wide table of contents.

Clearer PDF bookmarks. Bookmarks now use your heading text and numbers, preserving spaces across line breaks and the case you wrote. Use <Bookmarks> in React or Vue to change the separator or omit heading numbers. Set data-bookmark on a heading for a shorter title, or leave it empty to exclude that heading. Links to elements styled with display: contents now land on their content.

Declare your document's language. Set lang on Document in React or Vue, or data-lang on an HTML document template. Format records the language in your PDF so screen readers can use the appropriate voice and pronunciation. Studio flags missing or invalid language tags and shows how to fix them.

Style content across pages. Split elements and Flow regions now carry data-split, data-split-start, data-split-continued, and data-split-end attributes. Use them to add continuation labels or adjust borders and spacing at page breaks.

More reliable pagination. Headings kept with the next block now move correctly across nested Flows. Long lists fill the available space and retain their numbering across pages. A fix to font loading prevents intermittent table-of-contents overflow errors. Content that overflows fixed-height CSS columns now returns COLUMN_OVERFLOW instead of disappearing from the output.

Smaller PDFs with richer metadata. PDF optimization now shares repeated content and removes redundant structure without changing the page's appearance. PDFs include XMP metadata, and supporting viewers show the document title instead of the filename.

More serif weights. Format Serif now includes weights 200, 300, and 900 in normal and italic, completing its 200–900 range.

Consistent request limits. HTML sent through the SDKs can now exceed 1 MiB, up to the 10 MiB limit. Both multipart and JSON requests enforce that limit. Oversized requests return 413 with PAYLOAD_TOO_LARGE instead of an internal server error. JSON requests containing more than 10 MiB of HTML, which previously passed, are now rejected.

Upgrading. Run format update to move your project to v0.3.0:

format update 0.3.0

Set a language on every document, including English documents: use lang="en" in React or Vue, or data-lang="en" on the HTML document template. Hosted rendering no longer assumes English, including for documents pinned to older engines. Upgrade and declare a language to include it in the PDF.

v0.2.0

Format v0.2.0

  • Engine
  • React
  • Vue
  • Fonts

Format v0.2.0 gives you explicit control over heading numbering and fixes the size of math in previews and PDFs.

Choose your heading scheme. Numbering now has a defaultHeadings option in React and Vue. Headings keep their built-in numbers by default, and any rules you add run alongside them. Set defaultHeadings to false to number headings entirely with your own rules.

Updating custom numbering. Previously, a custom heading rule could switch off the built-in heading scheme automatically. If your document uses custom rules to number headings, set defaultHeadings={false} in React or :default-headings="false" in Vue when upgrading. For HTML templates, use data-default-headings="false" on the numbering template. Otherwise, headings matched by your rules can receive two numbers.

<Numbering defaultHeadings={false}>
	<NumberingRule match=".chapter-title" counter="chapter" format="Chapter {chapter}. " />
</Numbering>

Turning off the default scheme also removes its restarts between heading levels. Use CounterDef with resetEach for any restarts your own scheme needs.

Correct math sizing. Format Math now keeps its original font metrics and hinting. This fixes math that could appear at about half its intended height in PDFs. It also restores the intended size of large operators, stretched brackets, radicals, and accents in MathML. Compact PDFs with a lot of math may be larger as a result.

Upgrading. Run format update to move your project to v0.2.0:

format update 0.2.0
v0.1.3

Format v0.1.3 fixes a CLI issue that could stop Studio and the compiler from starting after a new release.

Studio starts after a new release. format dev and format compile could fail with an ETARGET error from npm when your project pinned a version newer than npm's cached package list. The CLI now checks the registry for the latest package list. If you're offline, it falls back to npm's cache straight away.

Quieter installs. format add, format update, and new projects no longer print npm's funding message after installing packages.

Upgrading. Run format update to move your project to v0.1.3:

format update latest
v0.1.2

Format v0.1.2

  • CLI
  • Studio
  • Compiler

Format v0.1.2 makes upgrades more reliable, explains data file problems in Studio, and fixes several compiler issues.

Upgrades run with the new release. format update now hands the upgrade to the CLI for the version you're moving to. Each release runs its own upgrade, so improvements to updating reach you straight away.

Fresh dependencies after an upgrade. format update now gives Format's dependencies the same versions a new project would get. Older versions your lockfile kept, such as the bundler dependencies from v0.1.0, are removed. Your own dependencies keep their versions.

See what's changed. After an upgrade, format update lists links to the changelog entries between your old and new versions.

Exact versions with format add. format add now saves exact versions with npm, yarn, and bun, so every Format package matches your pinned version.

Clearer data file errors. If a variant's data file is missing or isn't valid JSON, Studio now says so, with the file name and the parser's message. Before, it showed a list of schema errors that pointed at the wrong problem.

Errors lock the document, not Studio. While a document shows an error, Studio dims it and stops it scrolling. The sidebar and controls stay available, so you can switch variant or document.

Compiler fixes.

  • A document that imports no CSS no longer picks up styles from other documents in the same compile.
  • Documents without a schema now compile with schema validation on.
  • Files renders can't use, such as a font's .txt license, are left out of the assets bundle with a warning. Before, they made the render fail.

Upgrading. Your installed v0.1.1 CLI doesn't have the new upgrade steps yet. To use them for this upgrade, run the v0.1.2 CLI directly:

npm exec [email protected]/[email protected] -- format update 0.1.2

From v0.1.2 onward, you can run format update latest to upgrade to our newest release.

v0.1.1

Format v0.1.1

  • Studio
  • Compiler

Format v0.1.1 fixes Studio's first launch and brings security updates to the tools behind your documents.

Studio startup. Running format dev now loads Studio correctly when npm downloads it on demand. This fixes an issue that could leave a new project on the loading screen.

Clearer errors. Compiler errors in Studio now display without terminal formatting codes, making it easier to read the message and find the problem in your template.

Updated dependencies. Studio and the compiler now use Vite 8. We've also updated ZIP extraction and build dependencies to address security advisories affecting v0.1.0.

Upgrading. Use format update to move your project's Format packages to v0.1.1 together:

format update 0.1.1

If you use npm and your project lists @format.dev/compile as a direct dependency, also run:

npm update

This clears older bundler dependencies that npm can retain after the upgrade. It can also update other dependencies within their allowed version ranges, so review the lockfile changes before committing.

v0.1.0

Introducing Format

  • Platform
  • Engine
  • Studio
  • SDKs

Format v0.1.0 is the first release of the Format platform. It lets you build PDFs with the web technology you already know: HTML, CSS, and the frameworks you use every day.

You write a template the way you'd write a web page. The engine turns it into a paginated, pixel-perfect PDF.

Automatic pagination. Content flows across pages on its own. Wrap content in a Flow and the engine opens new pages as it fills them, reprinting your headers and table scaffolding on each one. No manual page breaks, no clipped rows. Read how pagination works.

Templates in React, Vue, or HTML. The React and Vue SDKs give you Document, Layout, Flow, and Stream components. Plain HTML templates work too, with Eta templating for your data. Tailwind and Sass are supported out of the box.

Studio. A local development toolkit with instant preview. Run format dev, edit your template, and watch the paginated document update as you type. Test against multiple data variants without leaving your editor.

Render via the API. Compile your template once, then render documents in milliseconds from any Node backend or serverless function. Pass data in, get a PDF back. See the API reference.

Control how text splits. Each Flow chooses how finely its content may break across pages: keep items whole, or split at sentence, word, or grapheme boundaries. Bring your own fonts, or use Google Fonts and Fontsource directly.

This release covers the engine, Studio, the React and Vue SDKs, the CLI, and the rendering API. Svelte support is next.

Format is currently in private beta.

.