Subset a font to specific characters
Drop every glyph except the characters you list. A smaller file that still renders exactly the text you use. Nothing is uploaded.
Runs on your device. The file is never uploaded.
Subset a font to specific characters keeps the code points you list plus .notdef at index 0, writing a fresh CFF font named with a -subset.otf suffix. The report counts how many of the characters you asked for survived and quotes any the font never had. The rebuilt font carries no layout tables, so ligatures and kerning pairs go.
Questions
How do I choose which characters to keep?
List them in the chars setting, for example abcABC123, with no separators. Duplicates are ignored and the list is read by code point, so emoji and other characters outside the basic range count as one character each. There is no default: leaving it empty is refused with a message telling you to list at least one character.
Why is my subset a .otf when I put in a .ttf?
Because opentype.js writes CFF-flavoured OpenType and nothing else. Naming the output .ttf would be a lie about what is inside it, so the file comes back as your name with -subset.otf. Browsers and operating systems load OTF perfectly well; only a toolchain that specifically demands TrueType outlines will mind.
Do ligatures and kerning survive the subset?
No. The new font is built from a list of glyphs with their names, code points, advance widths and outlines, plus the family and style names, units per em, ascender, descender, italic angle and weight class. OpenType layout tables are not part of that list, so ligatures, kerning pairs and contextual substitutions do not come across. Plan for flat text rendering.
What happens to characters that are not in the font?
They are skipped and named in the result, which reports how many of the requested characters were kept out of how many you asked for, and lists the ones missing from the font in quotes. If none of them exist the subset is refused, and the message tells you how many glyphs the font has and points at Inspect a font file to see them.
How do I know the subset works?
The tool checks before handing it to you. It parses the written font back, compares the glyph count against the characters you kept plus the .notdef glyph, and confirms every kept character is reachable in the result. If any check fails it refuses the file and calls it a bug rather than a bad input, because a smaller font that silently fails to render is the worst outcome here.
How much smaller will the file be?
It depends on how many glyphs you dropped, and the result line gives you the exact before and after byte counts. The saving comes from discarding outlines, so a text font cut to a few dozen Latin characters shrinks a lot, while a font that was already small will not. Nothing is uploaded during any of it.