How to opentype name table record ids: complete reference
- Step 1Identify the core identity IDs (0–6) — 0 Copyright, 1 Family, 2 Subfamily, 3 Unique ID, 4 Full name, 5 Version, 6 PostScript name. These define the font. The cleaner keeps 1, 2, 4, 5, 6 and removes 0 (Copyright) and 3 (Unique ID).
- Step 2Identify the descriptive / legal IDs (7–14) — 7 Trademark, 8 Manufacturer, 9 Designer, 10 Description, 11 Vendor URL, 12 Designer URL, 13 Licence description, 14 Licence URL. The cleaner keeps 13 and 14 only; 7–12 are removed.
- Step 3Identify the typographic and extended IDs (16–25) — 16 Typographic family, 17 Typographic subfamily, 18 Compatible full (Mac), 19 Sample text, 20 PostScript CID, 21 WWS family, 22 WWS subfamily, 23 Light/Dark palette, 24 Variations PostScript prefix. The cleaner removes all of these.
- Step 4Identify the variable-font IDs (256+) — 256 and above hold variable-font axis names and named-instance labels, referenced by `fvar`/`STAT`. The cleaner removes them — the `fvar` axes keep working, but the labels disappear.
- Step 5Check what your font actually has — Run [font-metadata-extractor](/font-tools/font-metadata-extractor) to decode the present nameIDs read-only. It surfaces copyright, family, subfamily, full name, version, PostScript, manufacturer, designer, description, URLs, licence, and sample text.
- Step 6Decide before cleaning — If your font carries a copyright string your licence requires, or variable-font axis names a design tool needs, do not run the cleaner on it (or use a fontTools port with a custom keep-list). Otherwise the seven-record output is safe for web delivery — compress it afterwards with [ttf-to-woff2](/font-tools/ttf-to-woff2), since the cleaner outputs uncompressed TTF.
Complete name ID reference with cleaner outcome
Standard nameIDs 0–25 plus the variable-font 256+ range. 'Cleaner' shows what the JAD name-table-cleaner does. 'Browser' shows whether a layout engine reads it for matching.
| nameID | Meaning | Browser reads? | Cleaner outcome |
|---|---|---|---|
| 0 | Copyright notice | No | Removed — check EULA before cleaning |
| 1 | Font Family name | Yes (matching) | Kept |
| 2 | Font Subfamily name | Yes (matching) | Kept |
| 3 | Unique font identifier | No | Removed |
| 4 | Full font name | Yes (matching) | Kept |
| 5 | Version string | No | Kept |
| 6 | PostScript name | No (PDF/print do) | Kept |
| 7 | Trademark | No | Removed |
| 8 | Manufacturer name | No | Removed |
| 9 | Designer name | No | Removed |
| 10 | Description | No | Removed |
| 11 | Vendor URL | No | Removed |
| 12 | Designer URL | No | Removed |
| 13 | License description | No | Kept |
| 14 | License URL | No | Kept |
| 16 / 17 | Typographic (Preferred) family / subfamily | Sometimes | Removed — falls back to 1/2 |
| 18 | Compatible full (Macintosh) | No | Removed |
| 19 | Sample text | No | Removed |
| 20 | PostScript CID findfont name | No | Removed |
| 21 / 22 | WWS family / subfamily | No | Removed |
| 23 / 24 / 25 | Light/Dark palette, Variations PS prefix, etc. | No | Removed |
| 256+ | Variable-font axis / instance names | No (design tools do) | Removed — axes still work, labels disappear |
The seven records the cleaner keeps
All at platformID 3, encodingID 1, languageID 0x409. This is the complete output — nothing else survives.
| nameID | Field | Why it's kept |
|---|---|---|
| 1 | Family | Primary @font-face match key |
| 2 | Subfamily | Style (Regular/Bold/Italic) match |
| 4 | Full name | Used in matching and display |
| 5 | Version | Build identification / cache-busting |
| 6 | PostScript name | Required by PDF embedding and PostScript workflows |
| 13 | Licence description | Compliance |
| 14 | Licence URL | Compliance |
Cookbook
Lookups for the questions people actually ask about specific nameIDs, with the cleaner's real behaviour for each. Where a record's removal carries risk, the entry says so plainly.
What survives a clean — the whole list
ExampleThe complete output of the cleaner, every time: seven records, one address.
After name-table-cleaner, the name table contains ONLY: (3,1,0x409) nameID 1 Family (3,1,0x409) nameID 2 Subfamily (3,1,0x409) nameID 4 Full name (3,1,0x409) nameID 5 Version (3,1,0x409) nameID 6 PostScript name (3,1,0x409) nameID 13 Licence description (3,1,0x409) nameID 14 Licence URL Everything else is gone.
Copyright (nameID 0) — the myth corrected
ExampleA common assumption is that the cleaner keeps copyright. It does not. If your licence needs it, don't clean that font with this tool.
Before: nameID 0 = "(c) 2024 Some Foundry. All rights reserved." After name-table-cleaner: nameID 0 is ABSENT. The licence text (13) and URL (14) are kept, but the copyright notice (0) and trademark (7) are removed. Review the EULA before cleaning a licensed font.
Version (nameID 5) for cache-busting
ExamplenameID 5 survives cleaning, so build-version checks still work. Browsers don't read it, but it's handy for debugging which build shipped.
nameID 5 = "Version 2.103; ttfautohint (v1.8.4)" Kept by the cleaner. Read it with font-metadata-extractor to confirm which build is deployed without diffing binaries.
Variable-font axis names (256+) — removed
ExampleCleaning a variable font drops the axis/instance labels. The axes still animate; only the human-readable names go.
Before (variable font): nameID 256 = "Weight" nameID 257 = "Optical Size" named instances: "Thin", "Regular", "Black" After name-table-cleaner: 256, 257 and instance names ABSENT. fvar axes (wght, opsz) still work; design-tool labels blank. -> exempt editable variable fonts from cleaning.
Typographic family (16/17) on a superfamily
Example16/17 group many weights under one family in some apps. The cleaner removes them; browsers fall back to 1/2 fine, desktop grouping may change.
Before: nameID 1 = "Brand Sans Thin"
nameID 16 = "Brand Sans" (groups all weights)
After: nameID 16 ABSENT; nameID 1 = "Brand Sans Thin"
Browsers: unaffected (match on 1/2).
Some desktop apps: weights may list separately.
-> exempt if the same files feed a desktop app.Edge cases and what actually happens
Every row below was probed against the live API. Some documented requirements (alphabetical axis order, numerical tuple order) are not actually enforced in practice — useful to know if you've been blaming the wrong thing for a 400.
Copyright (nameID 0) is removed, not kept
Removed by designThe most common misconception about this tool: it does not preserve copyright. nameID 0 is absent from the keep-list {1, 2, 4, 5, 6, 13, 14}, so the copyright notice is removed on every clean. Licence description (13) and URL (14) are kept, but copyright (0) and trademark (7) are not. If a EULA requires the embedded copyright string, don't clean that font with this tool — use a custom fontTools port that keeps nameID 0.
Variable-font axis names (256+) are removed, not preserved
Removed by designAnother common myth: that the cleaner preserves variable-font names when fvar is present. It does not — nameIDs 256+ are outside the keep-list and are dropped. The fvar table is untouched so the axes still work, but design tools that read axis/instance labels show blanks. Exempt variable fonts you intend to expose with named instances.
Unique ID (nameID 3) is removed
Removed by designnameID 3 (Unique font identifier) is not kept. Some font-management and licensing systems key off nameID 3 to identify a specific build. Browsers ignore it, so web delivery is unaffected, but if you rely on nameID 3 for asset tracking, capture it (via font-metadata-extractor) before cleaning.
PostScript name (nameID 6) kept — why it matters
Kept by designAlthough browsers don't read nameID 6 for @font-face matching, it's kept because PDF embedding and PostScript/print workflows require it, and some tools key on it. Keeping it costs a few bytes and avoids breaking non-browser consumers — a deliberate choice, not an oversight.
Sample text (nameID 19) removed
Removed by designnameID 19 (Sample text) holds a pangram or specimen string a foundry suggests for previews. It's removed by the cleaner. No consumer needs it at render time; the only loss is a foundry-suggested specimen, which font-preview tools generate on their own anyway.
WWS family/subfamily (21/22) removed
Removed by designnameIDs 21/22 (Weight-Width-Slope family/subfamily) help applications that only understand the WWS model group fonts. The cleaner removes them. Browsers don't use WWS records; the effect is limited to certain desktop application menus, and only for fonts that populated 21/22 in the first place (uncommon).
Records under the wrong address are removed even for kept IDs
Removed by designA kept nameID is only kept at the (3, 1, 0x409) address. A family name (nameID 1) stored solely under Mac (1, 0, 0) or French (3, 1, 0x40C) is removed, because it doesn't match the address filter. For nearly all fonts the same string also exists at (3, 1, 0x409), so nothing is actually lost — but a font that put nameID 1 only under a non-English locale would fail the clean entirely.
Non-standard or vendor-specific nameIDs
RemovedSome authoring tools write nameIDs in the 25–255 range or vendor-specific entries. None are in the keep-list, so all are removed. These are never read by browsers; the cleaner's whitelist approach means anything it doesn't explicitly keep is dropped, which is the safe default for web delivery.
Frequently asked questions
Which name IDs does the cleaner keep?
Exactly seven: nameID 1 (Family), 2 (Subfamily), 4 (Full name), 5 (Version), 6 (PostScript name), 13 (Licence description), and 14 (Licence URL) — all at the Windows-Unicode-English address (platform 3, encoding 1, language 0x409). Every other nameID is removed. The keep-list is fixed; there is no option to change it.
Does the cleaner keep the copyright string (nameID 0)?
No — this is the most common misconception. nameID 0 (Copyright) is not in the keep-list and is removed on every clean, along with trademark (nameID 7). The licence description (13) and URL (14) are kept, but copyright is not. If your font's EULA requires the embedded copyright, don't clean it with this tool, or use a fontTools port that adds nameID 0 to the keep-list.
Are variable-font axis names preserved?
No. nameIDs 256+ (axis and named-instance labels) are removed. The fvar table is left intact so the axes still function, but design tools that read the labels show blanks. For a variable font you plan to edit or expose with named instances, exempt it from cleaning.
Which name IDs do browsers actually read?
For @font-face matching: nameID 1 (Family), 2 (Subfamily), and 4 (Full name), at the Windows-English address. Browsers may consider typographic family/subfamily (16/17) when present, but the cleaner removes those and browsers fall back to 1/2. Browsers ignore 0, 3, 5, 6, 7–14, 18–25, and 256+.
Can I strip nameID 0 safely?
Technically the file works without it — browsers don't read it. Legally it depends on the licence: many foundry EULAs require the copyright string to remain embedded. The cleaner removes nameID 0 unconditionally, so review the licence before cleaning a commercial font. Open-source fonts (OFL, Apache) generally don't require the embedded notice, but check.
Why keep nameID 6 (PostScript name) if browsers ignore it?
Because PDF embedding and PostScript/print workflows require the PostScript name, and some tools key on it. It costs only a few bytes and keeping it avoids breaking non-browser consumers of the same file. The cleaner retains it deliberately even though @font-face matching doesn't use it.
What's the difference between nameID 1 and nameID 16?
nameID 1 (Family) is the basic family name; nameID 16 (Typographic / Preferred family) is an optional refinement that groups many weights under one family in applications that support it. Browsers match on 1/2 and fall back fine when 16/17 are absent. The cleaner removes 16/17, which is safe for the web but can change weight grouping in some desktop apps.
What is nameID 3 (Unique ID) used for?
A vendor-defined string meant to uniquely identify a specific font build, often combining version, vendor, and family. Browsers ignore it. Some font-management and DRM systems use it for tracking. The cleaner removes it — capture it with font-metadata-extractor first if you rely on it for asset tracking, or use font-fingerprinter for a content-derived identity hash that doesn't depend on nameID 3.
Are there name IDs above 25?
Yes. The 256+ range is reserved for variable-font axis names and named-instance labels, referenced by fvar and STAT. The cleaner removes them (the axes still work, the labels don't). IDs 26–255 are reserved/unused in the standard; if an authoring tool wrote anything there, the cleaner removes it too, since only the seven keep-list IDs survive.
How do I see which name IDs my font has?
Use font-metadata-extractor. It decodes the name table read-only and reports the populated IDs — copyright, family, subfamily, full name, version, PostScript, manufacturer, designer, description, vendor/designer URLs, licence, and sample text. Run it before cleaning so you know exactly what will be removed.
Does removing descriptive IDs (8–12) affect anything?
Not for rendering or installation — manufacturer (8), designer (9), description (10), and the vendor/designer URLs (11/12) are pure metadata that no layout engine reads. Font managers may display them, so removing them strips attribution from the file's About panel. If attribution matters to you (or a licence), keep those IDs via a custom port; otherwise they're safe to drop for the web.
If a kept ID exists only in French, does it survive?
No. Kept nameIDs are only kept at the (3, 1, 0x409) English-US address. A family name stored solely under a non-English locale is removed because it fails the address filter — and if the font has no English-US family record at all, the clean errors out (No Windows English name records to keep) rather than ship a nameless font. Nearly all fonts carry the English-US record, so this is rare.
Privacy first
Every JAD Font tool runs entirely in your browser using opentype.js and the wawoff2 WASM Brotli encoder. Your fonts never leave your device — verified by zero outbound network requests during processing.