Convert WOFF to TTF and install it
A .woff is a web font in a wrapper no font manager reads. Unwrapping it gives back the TrueType font inside, ready to install. Before you do: check the folder it came from, because a .ttf of the same face is often sitting right next to it.
or browse your device. Everything is processed on this device
No WOFF to hand?
The .woff is still loaded in this tab. If it is going back onto a site rather than onto your desktop, subsetting it to the characters your pages render takes far more off than any container change will.
Subset the WOFF insteadHow to convert a WOFF to TTF
Themes and templates from the WOFF era usually ship .eot, .ttf, .woff and .woff2 side by side. If the .ttf is there, it is the better file and you are already done.
Every table is inflated and the sfnt rebuilt in this tab. Nothing is uploaded, so a client font stays on your machine.
The panel names the family the font declares, and says whether it came back as a .ttf or, for PostScript outlines, as the .otf it really is.
Double click on Windows or macOS, or drop it into ~/.fonts on Linux. Then set an accent, a curly quote and a pound sign, which are the three a web subset most often lacks.
What comes out of a WOFF, and what does not
WOFF is a wrapper around an ordinary font. Each table from the original sfnt is zlib compressed on its own, listed in a 20 byte directory entry, and written after a 44 byte header; tables that do not compress are stored as they are. Unwrapping is the exact inverse: inflate each table, rebuild the table directory, recompute the checksums. No outline is touched and no metric recalculated, so what you install is the font the site was serving, not an approximation of it.
What that also means is that you inherit whatever the web build did. Fonts prepared for the web are commonly subsetted to the characters the site renders, stripped of hinting, and split into one file per weight and style, so an installed web font can turn out to have no bold, no italic, no Cyrillic and no typographic punctuation. None of it can be restored from the file, because it was removed before the .woff was written. This is the strongest argument for looking in the folder first: the .ttf shipped alongside it is often the unsubsetted original.
One thing does not survive, and no other converter will mention it. WOFF has an optional XML metadata block that sits outside the font tables, where a foundry can record vendor, description and licence text. It is not a font table, an sfnt has nowhere to put one, and this tool drops it rather than inventing a home for it. If the terms you are relying on live in that block, keep the original .woff: the licence records inside the name table are carried across, but the WOFF metadata block is not.
Then there is what the wrapper was holding. Most web fonts are TrueType inside and unwrap into a .ttf. A minority hold PostScript CFF outlines, and those unwrap into an OpenType font, which is a .otf: complete, installable and simply not a TrueType file. This tool reads the table directory and names the download after what it found, rather than writing .ttf on a CFF font and letting your font manager be the one to object.
WOFF to TTF FAQ
Why will my font manager not open a WOFF?
Because a WOFF is not a font as far as your operating system is concerned. It is a web delivery wrapper: the same tables a TTF holds, each zlib compressed, behind a header written for browsers. Font managers on Windows, macOS and Linux read sfnt files directly and were never given a reason to unwrap one, so they see a container they do not recognise rather than a broken font.
Should I convert the WOFF or look for the TTF?
Look first. Web font kits of the WOFF era almost always shipped four formats from the same source, so a theme or template that contains a .woff usually contains a .ttf in the same folder, and that file is the better one: it is the build the others were generated from, often with characters and hinting the web versions had removed. Convert when the .woff is genuinely all you have.
Is anything lost converting WOFF to TTF?
Nothing from the font itself. Every table is inflated and rebuilt exactly as it was, so the outlines, metrics, kerning and character map are the ones the WOFF held. The one thing left behind is the optional WOFF metadata block, an XML section outside the font tables that some foundries use for vendor and licence text, because a TTF has nowhere to keep it. Keep the .woff if that block matters to you.
Why did I get a .otf rather than a .ttf?
Because the font in your .woff draws with PostScript CFF outlines instead of TrueType ones, which makes it an OpenType font rather than a TrueType file. Calling it .ttf would put a false name on it, and installers differ in how politely they refuse that. The .otf you have installs identically on Windows, macOS and Linux. Genuinely converting CFF curves to TrueType ones is a redraw rather than a repack, and FontForge or fonttools is where that happens.
Can I install a web font I found in a theme I bought?
It depends on the font licence, which is separate from the theme licence, and the theme author may not have held redistribution rights in the first place. Web font licences typically cover serving the file from named domains rather than installing it locally to design with. The family name in the result panel is what to check against, and for open families such as anything under the SIL OFL the answer is yes and the complete original is a free download.
Why is the TTF twice the size of the WOFF?
Because you have removed the compression, which was the whole purpose of the wrapper. The sample here goes from 386KB as a WOFF to 760KB as a TTF, and that is the correct result rather than something going wrong. An installed font is read off your disk instead of downloaded, so the size stops being interesting the moment it is on your machine.
Are my WOFF files uploaded to convert them?
No. The WOFF is decoded and the TTF is written by your own browser, in this tab. There is no upload endpoint in the site for a file to go to, which you can check in your network tools: convert something and watch that no request carries it. Disconnect from the network after the page loads and it still works.
Related
Same format joins the queue. Anything else re-routes to its own tool.