Skip to content
AZ Tools

Font File Inspector

Reads the tables inside a font file and tells you what the file actually claims about itself, which is regularly not what its filename says. You get the family and style names as an operating system reads them, the PostScript name a CSS or PDF workflow will ask for, the version string, the number of glyphs, the number of Unicode code points the font really maps, units per em, weight and width class, the vendor ID, and whatever the designer wrote into the copyright, licence and licence-URL fields. It also reads fsType, the two-byte field in the OS/2 table that records what the vendor permits: installable, preview-and-print only, editable embedding, no subsetting, or embedding forbidden outright. That field is the one that decides whether you may ship the font inside an app or a PDF, and almost nobody looks at it. Two numbers here are easy to confuse and are reported separately on purpose: glyph count is how many shapes the file holds, while mapped characters is how many code points the cmap actually resolves to a real glyph. They differ for every font, because a cmap range can contain holes and because ligatures, small caps and alternates are glyphs no code point points at. Every table's checksum is verified, so a file edited or damaged after it was built is flagged rather than read as if it were intact. TrueType, OpenType/CFF and WOFF are supported; WOFF2 is Brotli-compressed and is refused with an explanation rather than misread. Nothing is uploaded — the file is parsed in your browser.

How to use

  1. Drop a .ttf, .otf or .woff onto the box, or click it to pick a file. WOFF is unwrapped in the browser before parsing.
  2. Read the family and style names to find out what the font calls itself, which is what a font menu will show — filenames are frequently wrong.
  3. Check the embedding line before you ship the font with an app, a PDF or a web page; that is the vendor's own statement of what is allowed.
  4. Compare the glyph count with the mapped-character count to judge coverage: a large font with few mapped characters is mostly alternates.
  5. Open the table list to see which tables the file carries; anything highlighted failed its checksum.

Frequently asked questions

Why does the family name here differ from the filename?
Because they are unrelated. The filename is whatever whoever handed you the file typed; the family name lives in the font's name table and is what your operating system, your font menu and your CSS actually match on. Renaming a file changes nothing about the font. This is why a folder full of tidily named files can still install as one confusing family, or why a webfont that looks right on disk fails to match your font-family rule — the name inside is what counts, and this tool shows you that name.
What is fsType and why should I care?
fsType is a two-byte field in the OS/2 table where the vendor records what may be done with the font when it is embedded — in a PDF, an app bundle, a game, or a webfont. Zero means installable with no restriction. Bit 1 means embedding is forbidden. Bit 2 means preview and print only, so a PDF can display it but nobody can edit the text. Bit 3 allows editable embedding. Two further bits forbid subsetting and restrict embedding to bitmaps. It is a machine-readable statement of intent rather than a lock, and it does not replace reading the licence, but a font marked restricted is a clear signal to check before shipping.
Why is the character count lower than the glyph count?
They measure different things. Glyphs are the shapes in the file; mapped characters are the Unicode code points the cmap table resolves to a glyph that is not .notdef. Almost every font has more glyphs than characters, because ligatures, small capitals, oldstyle figures, positional Arabic forms and stylistic alternates are all glyphs that no code point maps to directly — the layout engine reaches them through OpenType features instead. Counting the span of cmap ranges rather than the glyphs they resolve to overstates coverage, since a range can legally contain unmapped holes.
Can it open WOFF2, or a font collection?
Not yet, and it says so rather than guessing. A WOFF2 is Brotli-compressed and would need a decompressor far larger than the rest of this page to open, so it is refused with a message; woff2_decompress from the Google woff2 tools converts one to a plain file in a second. A .ttc font collection holds several fonts behind one header, and this tool reads a single font, so a collection is refused too. Plain WOFF is supported: its tables are zlib-compressed and are unwrapped here before parsing.
What does units per em tell me?
It is the size of the design grid the font's coordinates are expressed in — the number of internal units that make up one em. TrueType fonts almost always use 1000 or 2048; CFF/OpenType fonts usually 1000. It matters when you are comparing metrics between fonts or converting a value from a font editor: an ascender of 1600 units means nothing until you know whether the em is 1000 or 2048. It also has to be a power of two for TrueType hinting to behave, which is why 2048 is so common.
Is my font uploaded anywhere?
No. The file is read by the browser's own file API, parsed in JavaScript on this page, and never sent anywhere. You can check the direct way: load the page, disconnect from the network, and drop a font in — it still works. This matters more than usual for fonts, since a licensed commercial font is exactly the kind of file you should not be uploading to a stranger's server to answer a question about its licence.

Related tools