Skip to content

npm Adapter Changelog ​

This page records changes to @atlowchemi/webfont-generator, the Node.js adapter. For font-generation and Rust CLI changes, see the Rust Engine Changelog. Versions are synchronized: an npm entry that only synchronizes versions can include engine improvements documented on that page.

Looking for the plugin changelog?

For the vite-svg-2-webfont Vite plugin changelog, see Plugin Changelog.

0.11.0 (2026-10-28) ​

Features ​

  • expose TypeScript metadata through Node and Vite (#642) (679fee4)
  • webfont-generator: add a threads option (#633) (a1264c3)
  • webfont-generator: add fixed TypeScript output to the engine and CLI (#640) (689530e)
  • webfont-generator: add persistent generation cache (#609) (17837c2)
  • webfont-generator: cache color glyphs (#618) (565d9f1)
  • webfont-generator: cache variant families (#614) (8b813a2)

Bug Fixes ​

  • tests: scope native coverage timeout to output-size setup (#630) (05a6c41)

Performance Improvements ​

  • webfont-generator: reduce optimized glyph finalization time by 15-21% in CI benchmarks (edf8a5f)
  • webfont-generator: use zlib-rs for WOFF compression (#639) (e1c5046)

0.10.0 (2026-10-18) ​

Features ​

  • webfont-generator: add browser WASM generator (#568) (50450c6)
  • webfont-generator: add incremental source helpers (#573) (040e808)
  • webfont-generator: add named color slots for theme palettes (#591) (75faee6)
  • webfont-generator: split engine API features (#565) (4a0fc76)

0.9.0 (2026-10-09) ​

Features ​

  • webfont-generator: add internal color glyph paint pipeline (#530) (17a99de)
  • webfont-generator: emit COLR v1 fonts with paint-aware glyph identity (#542) (d85448f)
  • webfont-generator: expose selective color glyph generation (#546) (e311528)

0.8.0 (2026-10-03) ​

⚠ BREAKING CHANGES ​

  • webfont-generator: the webfont-generator crate no longer has the napi feature or the Node-specific generate_webfonts entry point. The npm package API, exports, binary names, and platform packages are unchanged.

Bug Fixes ​

  • deps: update rust crate brotli to v9 (#420) (418bd52)
  • enable NAPI and docs build caching and upgrade tooling (#516) (a5f1bb0)
  • resolve adapter packaging and strengthen workflow coverage (#520) (d49ffcb)

Code Refactoring ​

  • webfont-generator: extract Rust engine from NAPI adapter (#503) (9d305b6)

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.