Drop a .ttf, .otf, .woff, or .woff2 file here, or click to choose one. Nothing runs until a font arrives, and the font stays in this tab.
The font parser, the subsetter, and the WOFF2 encoder all run inside this page, so your files and inputs never leave your device. A licensed font is never handed to a server. The size a font can reach is limited by the memory this tab has, not by an upload cap.
Related tools
- Document ConverterConvert DOCX, Markdown and HTML into PDF, and pull clean text back out again.
- Document ScannerTurn a phone photo of a page into a straightened, cropped, multi-page PDF.
- PDF ToolboxMerge, split, rotate, reorder, watermark, fill and sign PDFs in your browser.
- SVG OptimizerRun SVGO in your browser to shrink SVG files, with byte-level before and after stats.
- Discord CompressorTwo pass encode that lands a video just under a chosen upload cap, computed from its length.
- GIF ToolboxResize, crop, optimize, reverse, slow down, speed up or split GIFs.
What it does
Rebuilds a font from only the characters you name, then writes it as WOFF2, WOFF, or an uncompressed OpenType file. It reads .ttf, .otf, .woff, and .woff2 input, reports the family name, glyph count, units per em, sfnt tables, and which unicode blocks the font covers, then keeps the glyphs your text and presets ask for and drops the rest. You also get the compressed "unicode-range" list and a ready to paste @font-face rule for the subset. Characters the font has no glyph for are listed by code point instead of silently vanishing.
How to use it
Drop a font file on the panel, then say what to keep: paste the exact text in the characters field, pick a preset like Basic Latin or Cyrillic, or give unicode ranges such as U+2018-201F. Digits and common punctuation are added by default. Choose WOFF2 for the web, WOFF for very old browsers, or the uncompressed OpenType file for a desktop install, and copy the @font-face rule straight into your stylesheet.
Why this one
The usual routes are a Python install for pyftsubset or fonttools, a Node install for glyphhanger, or a font site that wants an account before it will hand back a web font. This one runs the parser and the WOFF2 encoder in the page, so your files and inputs never leave your device, which matters because a licensed font is not something to hand a stranger's server. There are no file size caps, no watermarks, and no upsell over the download button.
FAQ
- Which OpenType features are lost?
- GSUB, GPOS, GDEF, and the legacy kern table are not carried over, so ligatures, contextual alternates, small caps, and kerning pairs from the original are dropped. The subset is rebuilt from glyph outlines rather than edited in place, which is why. The output names the layout tables it discarded, so you know before you ship. For body text and UI text the difference is usually invisible, but a script face or a font that relies on ligatures will look wrong, and those are better subset with pyftsubset. Outlines are also re-emitted as CFF, so a .ttf input comes back as an .otf inside the WOFF2 or WOFF wrapper.
- How much smaller will my font get?
- It depends entirely on how much of the font you throw away. A large Latin family cut down to the 95 printable ASCII characters usually loses most of its weight, because the accented Latin, Greek, Cyrillic, and symbol glyphs are the bulk of the file. A font that already covers only basic Latin will barely shrink. Going the other way, a WOFF2 file rebuilt as an uncompressed OpenType file gets bigger, and the output row says so rather than reporting a fake saving.
- Is my font uploaded anywhere?
- No. The font is parsed, subset, and compressed inside your browser, so your files and inputs never leave your device. That is the point for a commercially licensed font, where a license usually forbids handing the file to a third party service. The page keeps working with the network switched off after the first load.
Keyboard shortcuts: press ? anywhere on this page to see them.