What @awacloud/fonts is measured against: public suites, external validators, wild inputs and published benchmarks.

Reading the leaderboard figure

text-rendering-tests-outline draws the glyphs of the 63 static outline cases of the Unicode text-rendering-tests from the package's read APIs (no shaping: the suite's shaping and variation cases are not run) and compares them with the expected outlines. The cases that do not pass all fall on features the package does not implement yet: CID-keyed CFF fonts (their FDSelect / FDArray), CFF accented glyphs built with seac, CFF charset glyph names, and Macintosh cmap subtables, which are read as if they were Unicode.

Measured coverage

Generated from coverage/scorecard.json (format office-scorecard/v1) in the repository, written by the unpublished tool tools/office-scorecard. Each figure names its suite and version, the UTC day and the commit measured, and the command that replays it; a figure is what was measured on that suite, not a claim of conformance to a standard. Low results are published as measured.

Code coverage

Suite Result What is measured Measured Replay
bun-coverage-src bun 1.3.13 lines 94.53 %, functions 95.76 % (mean of 136 source files) the coverage gate's model over the declared basis (src/**) 2026-10-17, cf58af11f bun cli.ts office-scorecard axis-a --pkg fonts

Conformance suites

Suite Result What is measured Measured Replay
fonttools-fonts fonttools@4.66.1 229 / 235 per binary font file of Tests/ (.otf, .ttf, .ttc, .woff, .woff2): the container decodes, fonts.read returns on every font it holds (each font of a TTC), every table the package has a parser for (core and extras) returns, every glyf glyph resolves and every CharString of a name-keyed CFF font decodes (CID-keyed: not checked); a WOFF2 with a transformed glyf is judged on its untransformed tables, without fonts.read (the transform is not reversed, a documented limit); Type 1 and Mac resource-fork files, and raw table files, are listed in skipped; the package wired as its README does (fw_require, modules and extras in one ModuleRuntime), the Brotli static dictionary loaded as fw documents it; containers told by their magic bytes; the measure is the fonts package test's helper tests/_helpers/fonttools.js; 9 cases not run, each with its reason in the scorecard 2026-10-13, f18f86bdc bun cli.ts office-scorecard axis-b --suite fonttools-fonts
fonttools-tables fonttools@4.66.1 2560 / 2560 per table instance (file, font of a TTC, tag) the package has a parser for, over every binary file of Tests/ including raw table files: the parser returns; tags no parser reads (one skipped case per tag, with its count) and WOFF2-transformed tables are listed in skipped; the package wired as its README does (fw_require, modules and extras in one ModuleRuntime), the Brotli static dictionary loaded as fw documents it; containers told by their magic bytes; the measure is the fonts package test's helper tests/_helpers/fonttools.js; 14 cases not run, each with its reason in the scorecard 2026-10-13, f18f86bdc bun cli.ts office-scorecard axis-b --suite fonttools-tables
ofl-faces liberation@2.1.5+source-sans@3.052R+google-fonts@66928797f 7 / 7 per face (liberation-sans-regular: static TrueType (hinted); source-sans-3-regular: static CFF; source-sans-3-vf-upright: variable CFF2; kalnia-glaze: COLR v1 colour, variable TrueType — pinned sources in the fixture PROVENANCE.md): parse — the fonttools per-file check (container, fonts.read, every table parser, every glyf glyph, every name-keyed CFF CharString) and, for a CFF or CFF2 face, the CharStrings count equal to maxp.numGlyphs; colr-v1 paints — every COLR v1 paint graph from the BaseGlyphList and the LayerList decodes without an error, a cycle or a depth truncation; subset round-trip — for a glyf face, subsetForPdf over every mapped code point, then fonts.read of the subset: every code point still maps with the same advance width and outline (a CFF or CFF2 face is skipped: subsetForPdf subsets glyf outlines only); the measure is the fonts package test's helper tests/_helpers/ofl-faces.js; 2 cases not run, each with its reason in the scorecard 2026-10-13, 94fb28171 bun cli.ts office-scorecard axis-b --suite ofl-faces

Output validity, judged by an external validator

Suite Result What is measured Measured Replay
ots ots@9.3.0 26 / 26 OTS 9.3.0 (ots-sanitize, the default table actions) exits 0 and reports no ERROR message for the subset (WARNING messages are recorded, not failing); a subset counts only when OTS accepts its source face too — a face it refuses, or one subsetForPdf refuses with a typed error, is skipped with the reason; documents: 26 (0 written, 26 round trips); 4 cases not run, each with its reason in the scorecard 2026-10-15, f3b8d60e7 bun cli.ts office-scorecard axis-c --suite ots

Robustness on wild and pathological inputs

Suite Result What is measured Measured Replay
ots-fonts ots@v9.3.0 312 / 312 ok per file, the container decoded (SFNT, TTC, WOFF, WOFF2), then every table the package parses, fonts.read, every glyph and every CharString of a name-keyed CFF table, all steps run even after a typed refusal of another; ok when it returns or throws an error of the package's own hierarchy (FontError) within the budget; a failure is an untyped throw, a hang, memory past the cap or a crash of the child; budget: 10 s per case for an input up to 10 MB, plus 1 s per further MB (hard cap twice the budget); 1 GiB peak memory 2026-10-16, 8f2489052 bun cli.ts office-scorecard axis-d --suite ots-fonts --container
harfbuzz-fuzz-fonts harfbuzz@14.6.0 524 / 524 ok per file, the container decoded (SFNT, TTC, WOFF, WOFF2), then every table the package parses, fonts.read, every glyph and every CharString of a name-keyed CFF table, all steps run even after a typed refusal of another; ok when it returns or throws an error of the package's own hierarchy (FontError) within the budget; a failure is an untyped throw, a hang, memory past the cap or a crash of the child; budget: 10 s per case for an input up to 10 MB, plus 1 s per further MB (hard cap twice the budget); 1 GiB peak memory 2026-10-16, 8f2489052 bun cli.ts office-scorecard axis-d --suite harfbuzz-fuzz-fonts --container

Leaderboards

Suite Result What is measured Measured Replay
text-rendering-tests-outline text-rendering-tests@26cfb96d0 0.4127 share of the 63 static outline cases (CFF-1..3, CMAP-1..4, GLYF-1, SFNT-1..2) whose rendering matches the expected SVG under the suite's is_similar (same tokens, numbers within 1.0), 0–1; rendered from the fonts package's read APIs, no shaping 2026-10-17, 687b9b1ee bun cli.ts office-scorecard axis-e --suite text-rendering-tests-outline

Other projects on the same suites

Figures other projects publish (or that their own test data fixes, marked derived), on the same suite and version as an entry above, with where and when they were read.

Suite Project Result Source Read on
text-rendering-tests-outline text-rendering-tests@26cfb96d0 Allsorts 0.15.0 (derived: its report of June 30, 2025, 49 of the 63 cases passed) 0.7778 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 macOS 14.0.0 and CoreText 0xd0000 (derived: its report of November 23, 2023, 46 of the 63 cases passed) 0.7302 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 HarfBuzz 2.8.2, FreeType 2.11.0, FriBidi 1.0.1 and Raqm 0.10.1 (derived: its report of November 23, 2023, 41 of the 63 cases passed) 0.6508 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 OpenType.js 1.3.4, NPM 10.2.0 and Node 21.1.0 (derived: its report of November 23, 2023, 16 of the 63 cases passed) 0.2540 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 Swash 0.2.1 (derived: its report of March 16, 2025, 31 of the 63 cases passed) 0.4921 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 FreeType 2.11.0, SheenBidi 2.0 and SheenFigure 1.5 (derived: its report of November 23, 2023, 37 of the 63 cases passed) 0.5873 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 daegun 1.1.6 (derived: its report of August 22, 2026, 63 of the 63 cases passed) 1.0000 source 2026-10-17
text-rendering-tests-outline text-rendering-tests@26cfb96d0 fontkit 2.0.2, NPM 10.2.0 and Node 21.1.0 (derived: its report of November 23, 2023, 59 of the 63 cases passed) 0.9365 source 2026-10-17