v1.31.4

gildas-lormeau/SingleFilev1.31.4Oct 19, 2026by gildas-lormeau

Upgrading?

AI Summary

This release focuses on fixing font parsing, resource fetching concurrency, and frame loading behaviors. Updates to the underlying core library ensure better handling of fonts, styles, and images during the archiving process.

Key Highlights

  • Fixed `@font-face` parsing to correctly handle comma-separated `src` lists where a comma was used instead of a semicolon.
  • Limited concurrent resource fetching to 6 per host to resolve rate limiting issues on HTTP/2 and HTTP/3.
  • Improved the 'Remove unused fonts' feature to preserve fonts used by list markers and text transformations.
  • Reduced the frame load timeout from 5 seconds to 2 seconds to speed up the save process for failed frames.

Full Release Notes

### Fixes

- A resource answered with a server error (status 500 or more) is requested once more without the cache, in the page and in its frames. The fetch runs in force-cache mode, which replays a stored response without revalidating it whatever its status, so an error served during a short outage came back in every save for as long as the cache entry lived. The frames now receive the cache mode of the retry.
- Update single-file-core to 1.6.39:
  - A `@font-face` rule whose `src` list holds an item that fails to parse no longer loses its font. Browsers parse the list item by item and skip only the broken one, so a comma typed where a semicolon belonged (`src: url(a.woff) format("woff"), font-display: swap;`, the way every "Libé" font on liberation.fr is written) still loads the font on the live page while the saved page kept a URL that pointed nowhere. The valid sources are now kept and embedded.
  - The "Remove unused fonts" option no longer removes a font the page draws only through a list marker (the numbers of an ordered list, a `::marker` icon) or a `text-transform` (É drawn from an é): the characters a marker and a transform draw are now reported as drawn, in Chrome and Firefox alike.
  - "Remove unused styles" also removes the custom properties nothing reads, such as an icon set declared as `--icon: url()` properties under `:root` whose rules were removed: on linkedin.com this saves 1.25 MB and 272 inline SVGs with no computed style changed.
  - Resources are fetched at most 6 at a time per host, what browsers allow over HTTP/1.1. Over HTTP/2 and HTTP/3 every resource of a page left at once, and a site behind a rate limiter answered 429 to a quarter of them.
  - An image still loading when the page is saved is kept instead of being dropped as hidden because its box measured 0 × 0.
  - A frame that failed to load (blocked by `X-Frame-Options`, unreachable host, dead embed) is given up after 2 s instead of 5 s before the page is saved. The `:first-letter` style is read only on block containers when collecting the used fonts.

Related Repositories