Skip to content

Webfont Generator Changelog

Looking for the plugin changelog?

This is the changelog for the @atlowchemi/webfont-generator core engine. For the vite-svg-2-webfont Vite plugin changelog, see Plugin Changelog.

0.7.0 (2026-09-15)

⚠ BREAKING CHANGES

  • webfont-generator: Incremental regeneration now requires explicit source inputs. In Node, wrap ordinary file arrays in { files }; in Rust, use RegenerationFiles::Single. Multi-variant updates provide every configured design and its complete ordered file list.

    Multi-weight icon families

    Generate multiple SVG designs, such as light and bold, as one shared font per format. Match icon filenames across designs and select a weight with the generated CSS modifier classes. Supported family formats are TTF, WOFF, and WOFF2; WOFF and WOFF2 are the defaults. Ordinary single-design generation retains SVG and EOT support.

    ts
    import { generateWebfonts } from '@atlowchemi/webfont-generator';
    
    let result = await generateWebfonts({
        dest: './dist/fonts',
        fontName: 'icons',
        incremental: true,
        variants: [
            { name: 'light', files: ['icons/light/add.svg'], weight: 300, default: true },
            { name: 'bold', files: ['icons/bold/add.svg'], weight: 700 },
        ],
    });

    Load the generated stylesheet and select the default or bold design:

    html
    <span class="icon icon-add" aria-hidden="true"></span> <span class="icon icon-add icon--bold" aria-hidden="true"></span>

    Incremental updates

    The same regenerate and regenerateAsync methods support ordinary fonts and multi-variant families. Async calls return a replacement result. Provide every design on each update; paths determine membership and ordering within each design. Change hints apply to every design referencing the path. Omit hints to re-read all files and infer changes.

    ts
    result = await result.regenerateAsync(
        {
            variants: [
                { variant: 'light', files: ['icons/light/add.svg'] },
                { variant: 'bold', files: ['icons/bold/add.svg'] },
            ],
        },
        [{ path: 'icons/bold/add.svg', changeType: 'changed' }],
    );

    Migrating ordinary regeneration calls

    The optional Node change entries retain their existing shape. Enable incremental: true during generation as before.

    ts
    // Before
    result.regenerate(files, changes);
    result = await result.regenerateAsync(files);
    
    // After
    result.regenerate({ files }, changes);
    result = await result.regenerateAsync({ files });

    Rust callers wrap the file list and retain the existing change enum:

    rust
    // Before
    result.regenerate(&paths, &changes)?;
    result = result.regenerate_all_async(paths).await?;
    
    // After
    use webfont_generator::RegenerationFiles;
    
    let files = RegenerationFiles::Single(paths);
    result.regenerate(&files, &changes)?;
    result = result.regenerate_all_async(files).await?;

    For families, use RegenerationFiles::Variants with VariantFileSet { variant, files } entries. Rust async methods consume the result; recover it through RegenerateError::into_result after a recoverable failure. Node async failures leave the receiver available for retry. Filesystem writes remain non-transactional. Results created with CSS/HTML context callbacks cannot be regenerated.

    Templates, sparse designs, and CLI

    Family CSS selects exact design weights and disables synthetic weights. CSS, HTML preview, and SCSS templates expose family metadata. Sparse icon sets can reject missing glyphs, leave blanks, or use a configured fallback design. CLI JSON manifests support complete variant configurations and manifest-relative input paths.

    See the Node reference, Rust reference, CLI reference, and template guide for details.

Features

  • webfont-generator: add multi-weight icon fonts (b345cf0)

Bug Fixes

  • deps: update rust crate write-fonts to 0.53.0 (#449) (d1178d0)

Performance Improvements

  • webfont-generator: disable unused usvg features (#398) (c628ce1)

0.6.1 (2026-08-24)

Performance Improvements

  • webfont-generator: batch rename callbacks (#368) (0046ddd)
  • webfont-generator: carry structured TTF geometry (#367) (cefee7b)
  • webfont-generator: cut SVG parse-stage time by 10-13% (#347) (497e5f1)
  • webfont-generator: cut SVG transient allocations by 64% (#344) (4f0f70e)
  • webfont-generator: defer cached SVG path clones (#365) (1ee87c2)
  • webfont-generator: preallocate SVG font output (#357) (d7a5868)
  • webfont-generator: reduce WOFF2 transient allocations (#349) (3bf52b1)
  • webfont-generator: remove two stored allocations per glyph (#346) (82c07b6)
  • webfont-generator: reuse optimized path geometry (#372) (fe0bae7)
  • webfont-generator: reuse structured path hashes (#369) (113b281)
  • webfont-generator: reuse WOFF2 glyph scratch buffers (#355) (3149c2e)
  • webfont-generator: share compiled TTF glyphs (#364) (b95abfe)
  • webfont-generator: share loaded SVG contents (#360) (6315d75)
  • webfont-generator: share parsed glyph cache entries (#358) (b41707f)
  • webfont-generator: share processed SVG paths (#362) (77ce975)
  • webfont-generator: skip single-contour winding work (#354) (4d7ed77)

0.6.0 (2026-08-09)

Features

  • webfont-generator: add async regeneration (#317) (a038107)

Bug Fixes

  • deps: update rust crate usvg to 0.48.0 (#320) (0165125)
  • deps: update rust crate write-fonts to 0.51.0 (#285) (193b1c9)

Performance Improvements

  • Move regeneration state instead of cloning glyph caches, making unchanged incremental rebuilds 2-3x faster with negligible async overhead. (a038107)
  • optimized font output is ~7% smaller and path optimization ~10% faster (thanks to oxvg_path 0.0.7) (6b38435)

0.5.1 (2026-07-23)

Bug Fixes

Performance Improvements

  • webfont-generator: make 300-glyph WOFF2-only generation approximately 44.5% faster (9800712)
  • webfont-generator: make incremental WOFF2 content edits approximately 38-41% faster (9800712)
  • webfont-generator: reduce cold WOFF2 transform preparation from 0.944 ms to 0.306 ms at 300 glyphs by decoding each glyph once (9800712)
  • webfont-generator: reduce integrated quality-11 generation from 14.082 ms to 7.248 ms at 100 glyphs, 61.065 ms to 24.830 ms at 300 glyphs, and 122.880 ms to 45.813 ms at 600 glyphs (9800712)
  • webfont-generator: speed up WOFF2 encoding with an internal transformed encoder (#272) (9800712)

0.5.0 (2026-07-09)

Features

  • webfont-generator: add incremental regenerate (222d929)
  • webfont-generator: configurable WOFF2 compression quality (3e5c250)
  • webfont-generator: reuse processed and compiled glyphs during recalc (#192) (a80aecf)
  • webfont-generator: reuse serialized font outputs (#202) (63b426f)
  • webfont-generator: support regenerate rediff (#158) (a74d120)

Bug Fixes

  • deps: update rust crate write-fonts to 0.50.0 (#223) (b2c6165)
  • webfont-generator: normalize nested contour winding (#155) (afcb1be)

Performance Improvements

  • webfont-generator: incremental TTF-table regenerate ~15-25% faster (unchanged table bytes reused) (63b426f)
  • webfont-generator: make no-op incremental rebuilds up to 1078x faster and changed rebuilds up to 1.17x faster (222d929)
  • webfont-generator: raw SFNT assembly ~6-9% faster (direct writer + table-order match) (63b426f)
  • webfont-generator: rename-only WOFF ~20% faster (WOFF1 payload compression cached) (63b426f)
  • webfont-generator: reuse renders by template dependencies (#161) (94abd39)
  • webfont-generator: simplify glyf contours to shrink TTF (#144) (ec0a919)
  • webfont-generator: SVG parse ~15% faster (skips UTF-8 revalidation) (63b426f)

0.4.0 (2026-05-28)

⚠ BREAKING CHANGES

  • webfont-generator: direct CJS consumers using require('@atlowchemi/webfont-generator') need to switch to await import(...) or rely on require(esm) (stable in Node 22.12+).

Features

  • webfont-generator: drop CJS entry points and ship ESM-only (#131) (702486e)

Bug Fixes

  • webfont-generator: set repository.directory so npm resolves README images (#133) (6f9b8c6)

0.3.1 (2026-05-25)

Bug Fixes

  • webfont-generator: preserve leading slash when cssFontsUrl trims to root (a82674b)

0.3.0 (2026-04-27)

Features

  • webfont-generator: type cssContext and htmlContext callback context (#113) (1be93fc)

Bug Fixes

  • webfont-generator: ship CJS entrypoints for require() consumers (#116) (0d217bd)

0.2.4 (2026-04-16)

Bug Fixes

  • ci: disable GitHub release creation in napi pre-publish (#108) (b30362a)

0.2.3 (2026-04-16)

Bug Fixes

  • ci: correct binding versions (24048ee)
  • ci: use heredoc for binding.js version sync, add README badges (#107) (b802b9d)
  • webfont-generator: add repository field and sync binding.js version on release (#105) (e70cef6)

0.2.2 (2026-04-15)

Bug Fixes

0.2.1 (2026-04-15)

Bug Fixes

0.2.0 (2026-04-15)

Features

  • publish webfont-generator crate with library API, CLI, and docs (#98) (c2c8c1b)

Released under the MIT License.