Cookies for analytics and advertising
We use cookies for analytics and advertising, both sent to Google. Refusing changes nothing you can see.Read the privacy page
Converting WOFF to TTF unwraps a web font back into an installable desktop file with the outlines and metrics untouched. Before you do, look in the folder the WOFF came from: font kits of that era shipped the TTF alongside it, and the original is always a better file than an unwrapped copy of it.
Up to 100 files at once. Mixed formats are fine.
They convert one after another and download together as a ZIP.
WOFF to TTF
The first WOFF specification was announced in 2009 and became a W3C Recommendation in December 2012, and for the following few years the standard way to put type on a website was to run a font through a generator and paste in the @font-face block it produced. Those kits are what almost every stray .woff comes from — an inherited theme, a template bought once, a repository last touched in 2015.
Knowing the era is useful because it predicts the contents. Kits of that period were overwhelmingly built from TrueType sources, subset to a single language, renamed by the generator, and shipped as a set of four files rather than one. Every one of those facts changes what you should do next.
A generated kit typically contains the same typeface four times: an .eot for Internet Explorer, a .woff, a .ttf, and an .svg. If the .ttf is present, that is the file to install, and there is nothing to convert at all.
It is also the better file. The TTF in a kit is what the generator started from, so it has not been through a compression round trip and it carries whatever the source had. An unwrapped WOFF is equivalent in practice, but reaching for the original when it is two lines further down a directory listing costs nothing.
EOT was Microsoft’s font container, introduced for Internet Explorer and never implemented by anyone else. SVG fonts were a stopgap for early iOS versions that could not read anything better. Both were in every kit because the fallback stack of the time demanded them, and both are now completely obsolete.
Neither is worth converting or keeping. Nothing in our toolchain reads or writes EOT — fontTools has no notion of the format and Debian packages no tool that does — which is a fair reflection of how relevant it is. Delete them along with the four-source @font-face rule they belonged to.
If the folder really has only the web file, the conversion is straightforward and lossless. The WOFF is decompressed back to the sfnt tables it was built from and written out as a bare TTF: same outlines, same character map, same metrics, same kerning, same feature definitions.
The one thing that can stop it is the kind of curve inside. A font holding cubic PostScript outlines unwraps to an OTF, not a TTF, and the converter refuses the wrong target rather than writing a file whose extension misdescribes it. Kits of this era were usually TrueType-based, so it is uncommon — and when it happens, OTF is the answer and installs identically.
Generators rewrote the name table, which is why old stylesheets are full of families called things like "opensans-regular-webfont". Applications show that internal name, so the unwrapped font arrives in your font menu under a name that means nothing.
It matters beyond cosmetics if you are maintaining the site rather than harvesting the font. The CSS references the generator’s name, so replacing the kit with a modern WOFF2 built from the real font changes the family name and silently drops the whole site back to a system typeface. Change both, in the same commit, and check a page that is not the home page.
Aggressively, and usually to one language. Bandwidth mattered more then and generators offered character-set options that most people accepted without reading — basic Latin, sometimes with a punctuation extension, and nothing else.
So the unwrapped TTF may well have no accented vowels, no proper dashes, no curly quotation marks and no currency symbol beyond the dollar. You find out by typing rather than by inspecting, which means you find out at the worst moment. If the font is going to be used for real work, check the coverage before it becomes a house style.
On Windows, double-click and choose Install, or drag the file into the Fonts panel in Settings. On macOS, double-click and let Font Book take it. On Linux, put it in a fonts directory inside your home folder and refresh the cache.
Then restart whatever was already open. Applications read the font list at launch, so a font installed while a word processor or design tool is running will not appear until it is started again — and if a font of the same internal name is already installed, the system may keep the old one silently. Remove the old one first when a version is being replaced rather than added.
The licence you have is for the template, and templates have historically bundled type with varying degrees of care. A font sitting in an assets directory is not evidence that the bundle’s author had the right to include it, still less that you have the right to install it on your machine and use it elsewhere.
Identify the typeface and check its own terms. The name table usually retains a designer, foundry or manufacturer URL even when the family name was rewritten, and kits frequently shipped a licence text file alongside the fonts. A great many web fonts of that period are under the SIL Open Font License, which permits conversion, installation and redistribution provided the font is not sold on its own and reserved names are not reused — in which case you are clear, and it took a minute to establish.
The work is done by fontTools on our server, since there is no browser build of it. Each file travels over an encrypted connection, is converted in an isolated environment, and the working directory is removed as soon as the job finishes. The free tier allows 100 server conversions a day, 25 MB per file, and up to 100 files in one batch returned as a ZIP — which suits a whole legacy asset folder.
It declines two things. It will not convert PostScript outlines into TrueType ones, because that redraws every glyph rather than repacking a container and a half-correct result spaces wrongly. And it will not pretend a non-font is a font: an HTML error page saved with a .woff extension, which is a common way a broken download ends up on disk, is reported as unreadable.
| WOFF | TTF | |
|---|---|---|
| Full name | Web Open Font Format | TrueType Font |
| File extension | .woff | .ttf |
| Media type | font/woff | font/ttf |
| First published | 2009 | 1991 |
| Published by | W3C | Apple |
| Specification | WOFF 1.0 | TrueType Reference Manual |
| Licensing | Open standard | Open standard |
| Standing today | Legacy, still read everywhere | Current |
| Opens in a browser | Every browser | Every browser |
| Considered instead | WOFF2 | OTF, WOFF2 |
Nothing is discarded. WOFF and TTF both store their content losslessly, so the conversion is a change of packaging rather than a change of quality, and it can be repeated without accumulating damage.
TTF is a working format and WOFF is a finished one. What comes back is editable text and objects rather than a picture of a page, which is usually the reason for the conversion and also where its limits are.
WOFF dates from 2009 and is largely superseded. TTF is what current software writes, so the conversion is as much about staying readable as about the file itself.
FontForge reads both WOFF and TTF, so there is a way to check the result against the original without a second tool.
The two are aimed at different work: WOFF at the web, TTF at typesetting. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.
WOFF is W3C's format, published in 2009. The specification is WOFF 1.0, and it is worth reading if the file has to outlive the tool that wrote it.
TTF comes from Apple and dates from 1991, specified as TrueType Reference Manual. FontForge, Glyphs and FontLab all read it.
TTF was published in 1991 and WOFF in 2009. The older one is generally the safer file to hand to somebody; the newer one usually does the job in fewer bytes.
Yes — this conversion needs software that cannot run in a browser, so the file is uploaded over an encrypted connection. It is deleted as soon as the job finishes, and the result is sent straight back to you without being stored. The work is done by fontTools, the font manipulation library used to build web fonts.
Very often. Font kits from the WOFF era shipped .eot, .woff, .ttf and .svg versions of the same typeface in one folder. If the .ttf is there, use it — it is the original rather than an unwrapped copy, and no conversion is needed.
Dead formats. EOT was Internet Explorer’s font container and SVG fonts were an early iOS workaround; both are obsolete and neither is worth converting or keeping. Nothing in our toolchain reads or writes EOT, and nothing needs to.
Kit generators rewrote the family name inside the file — names like "opensans-regular-webfont" are typical. Applications display that internal name rather than the filename. It is cosmetic and editable in a font editor.
The kit was subset to what the site needed. Characters removed then are not in the file now, and unwrapping the container cannot regenerate them. The complete character set exists only in the original release.
The theme’s licence rarely covers the fonts inside it. Identify the typeface from the font’s name table or the kit’s licence file, then check that family’s own terms — many are under the SIL Open Font License and are genuinely free to use.
Then it unwraps to an OTF rather than a TTF, and the converter says so rather than producing a mislabelled file. Convert it to OTF instead; it installs and behaves the same way.