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 TTF to WOFF wraps the same font in the 2009 web container: identical outlines, zlib compression instead of Brotli, and roughly thirty per cent more bytes than the WOFF2 of the same TTF. Almost nobody chooses this today — they are told to, by a theme uploader or a build step that lists .woff and rejects the rest.
Up to 100 files at once. Mixed formats are fine.
They convert one after another and download together as a ZIP.
TTF to WOFF
Only when something downstream refuses the alternative. WordPress themes with a custom-font uploader, page builders with a font panel, older Sass and Gulp configurations, and internal style guides written when the fallback stack was still standard all name .woff explicitly and treat anything else as an invalid file.
That is a real constraint and it deserves a straight answer rather than a lecture. Convert, upload, move on. If you control the stylesheet and nothing is enforcing the choice, convert to WOFF2 instead and stop there — the older container has no advantage left to offer.
WOFF and WOFF2 are the same idea implemented eight years apart. WOFF wraps the font tables and deflates them with zlib. WOFF2 rearranges the tables first, in a way specific to how font data is structured, and then compresses with Brotli. The second approach lands roughly thirty per cent below the first on the same font.
On a single 25 KB subset that is seven kilobytes, which is not worth an argument. On an unsubsetted family of six weights served to every visitor it is real, and it compounds with the fact that fonts block text rendering while they download. The size difference is the only difference: neither container touches a glyph.
The upload fields almost always want one file per weight and style, with the weight declared beside it. A family uploaded as a single regular file and then used in bold produces synthesised bold — the browser smearing the regular outlines — which looks wrong in a way that is hard to name and easy to see side by side.
The other recurring trap is the family name. Many panels use the name you type rather than the name inside the font, and a mismatch between what the theme writes into the @font-face rule and what the CSS elsewhere references leaves the page silently on a system font. If the type did not change after upload, that is the first thing to check.
A WOFF listed after a WOFF2 in the same @font-face rule is downloaded by nobody. Every current browser takes the first source it understands, and every current browser understands WOFF2, so the second entry is a file that exists to be forgotten.
It is worse than harmless. When the typeface is updated the WOFF2 gets replaced and the WOFF does not, and the stale copy sits on the server ready to be served the moment somebody reorders the rule or a tool rewrites it. If WOFF is required, serve WOFF alone; if it is not, delete it.
Putting a font on a web server is web use, whether the file has a .woff, .woff2 or .ttf extension. A desktop licence typically covers a stated number of machines and the work produced on them, and stops there. Web licences are sold separately and are commonly priced by monthly page views, which is why converting quietly is such a common and such an expensive mistake.
The SIL Open Font License is the well-marked exception and covers most of what the free font sites hand out: conversion, subsetting and self-hosting are all permitted, provided the font is not sold on its own and reserved names are not reused. The licence file ships in the download and is usually one page.
Everything. The quadratic outlines in the glyf table, the character map, the horizontal metrics, the kerning and every OpenType feature the designer defined are copied across without inspection. WOFF is a compression envelope, not a filter.
That includes the parts you might have wanted to lose. Hinting instructions, unused language coverage and any metadata the foundry embedded all travel with the font, and the WOFF is correspondingly larger than it needs to be. Stripping those is a subsetting job, done before this conversion rather than by it.
Web fonts are served with long cache lifetimes because they change almost never. That is right until the day the typeface is updated, at which point a visitor with the old file cached keeps it — sometimes for a year — and sees a version of the site nobody is looking at.
The fix is the same one used for stylesheets: put a hash or a version in the filename and change it when the font changes. A theme uploader that manages filenames for you usually handles this; a hand-written @font-face rule pointing at fonts/brand.woff does not, and that is the file that will still be stale next spring.
WOFF arrived in 2009 as a W3C specification and did something the earlier attempts had failed at: it gave foundries a container that was clearly a web font rather than a redistributable desktop file, and gave browsers one format instead of four. That is why web typography stopped being a novelty around 2011.
WOFF 2.0 became a recommendation in 2018 and took over completely, and the first version is now marked legacy for good reason. The browsers that could read WOFF and not WOFF2 have been out of support for years, and the fallback stacks written for them survive mainly in copied snippets and theme documentation.
A family is rarely one file. Drop the whole folder and up to 100 fonts convert in one pass, returning as a ZIP with the names preserved, which is what makes the theme-upload job bearable — six weights is six uploads either way, but it is not six conversions.
The work is done by fontTools on our server rather than in your browser, so each file travels over an encrypted connection and the working directory is deleted when the job finishes. The free allowance is 100 server conversions a day and 25 MB per file; a font family uses a handful of the first and none of the second.
| TTF | WOFF | |
|---|---|---|
| Full name | TrueType Font | Web Open Font Format |
| File extension | .ttf | .woff |
| Media type | font/ttf | font/woff |
| First published | 1991 | 2009 |
| Published by | Apple | W3C |
| Specification | TrueType Reference Manual | WOFF 1.0 |
| Licensing | Open standard | Open standard |
| Standing today | Current | Legacy, still read everywhere |
| Opens in a browser | Every browser | Every browser |
| Considered instead | OTF, WOFF2 | WOFF2 |
Nothing is discarded. TTF and WOFF 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.
FontForge reads both TTF and WOFF, so there is a way to check the result against the original without a second tool.
The two are aimed at different work: TTF at typesetting, WOFF at the web. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.
TTF is Apple's format, published in 1991. The specification is TrueType Reference Manual, and it is worth reading if the file has to outlive the tool that wrote it.
WOFF comes from W3C and dates from 2009, specified as WOFF 1.0. FontForge and fonttools 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.
Almost always because something else insists. Theme uploaders, page-builder font panels and older build configurations frequently list .woff and reject anything else. On technical grounds WOFF2 wins, and if you have a free choice you should take it.
Around thirty per cent. WOFF compresses the font tables with zlib; WOFF2 uses Brotli with a preprocessing pass tuned for font data. Both are lossless wrappers around the same TTF, so the difference is bytes on the wire and nothing else.
No. Every current browser reads WOFF2, so a WOFF listed after it in the same @font-face rule is downloaded by nobody and updated by nobody — it becomes a stale copy of the typeface waiting to be served by mistake.
No. The outlines, the character map, the metrics, the kerning and the OpenType features are copied verbatim into a compressed container. Unwrapping the WOFF gives back the TTF that went in.
Yes. Up to 100 files go through in one batch and come back as a ZIP, which is the usual shape of this job — a family is four or six TTFs and a theme wants all of them.
Frequently not, and the container makes no difference. Desktop licences cover installing and designing with the font, not distributing it from a web server. Fonts under the SIL Open Font License permit it; commercial web use is normally a separate purchase.