What @awacloud/fonts is measured against: public suites, external validators, wild inputs and published benchmarks.
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 |
| 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 |
| 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 |