Convert OTF to WOFF

Converting OTF to WOFF produces the file a brief or a platform specification asks for: the same PostScript outlines, wrapped in the 2009 web container and compressed with zlib. The conversion is the easy half of the job. The harder half is what belongs in the package around it, and whether the licence lets you hand the font over at all.

  • Where it runs On our server, because a browser cannot run the software this needs.
  • Lossless Nothing is discarded. The WOFF holds exactly what the OTF held.
  • File size limit Up to 25 MB per file, free, without an account.
  • Worth knowing The outlines decide what an unwrapped font is: a WOFF holding PostScript curves becomes an OTF, one holding TrueType curves becomes a TTF. Asking for the other is refused rather than answered with a mislabelled file.

Up to 100 files at once. Mixed formats are fine.

Why an OTF to WOFF deliverable still gets requested

Specification sheets outlive the reasons they were written. A brand guidelines document from 2015, a platform’s asset requirements page, or a developer’s checklist copied from a tutorial will list .woff because that was the sensible answer when it was written, and nobody has revisited it since.

Arguing is rarely worth the hour. Produce the WOFF, produce the WOFF2 alongside it, and note in the handover that the second is the one browsers will actually use. That satisfies the specification and leaves the recipient better off than the specification would have.

What ends up inside the WOFF when the source is an OTF

A container swap and nothing else. The CFF table holding the cubic outlines, the character map, the metrics, the kerning and every OpenType feature the designer defined are copied verbatim and compressed. No glyph is redrawn, no feature is dropped, and the file can be unwrapped later to recover the OTF.

That last point has a consequence worth knowing before a handover: a WOFF is not a protective wrapper. It is a compressed copy of the font, and anyone who receives it can convert it back to an installable desktop file in seconds. Whatever restraint applies to the OTF applies to the WOFF.

Packaging web fonts as a handover to a developer

A good package is small and unambiguous: one file per weight and style, named so the weight is legible without opening anything, and a text file or snippet containing the @font-face rules that go with them. The developer should not have to guess which file is the semibold italic.

Include only the weights the design uses. Handing over a folder of eighteen cuts because the family has eighteen is how a site ends up loading four of them by accident, and it makes the licence exposure larger than the project needs it to be.

You cannot pass on a licence by passing on a file

Most commercial font licences name the licensee and do not allow transfer. A studio that bought a desktop licence and hands the converted files to a client has generally not made the client a licensee — it has made two parties using one licence, and the exposure usually lands on whoever signed.

The workable routes are the ordinary ones: the client buys the web licence in their own name and you produce or receive the files, or the project uses an open-licensed family. Fonts under the SIL Open Font License may be converted, subset, redistributed and self-hosted, provided they are not sold on their own and reserved names are not reused, which is why so much client work quietly settles on them.

One WOFF per weight, and the naming that stops arguments

The browser picks a file using the weight and style declared in the @font-face rule, not the filename. But the filename is what a human reads three months later, so the two should agree — brand-600-italic.woff beside a rule declaring font-weight 600 and font-style italic leaves nothing to interpret.

The failure this prevents is synthetic type. A family delivered with only a regular file, then used in bold, produces a browser-smeared bold that is visibly worse than the real cut. It is the most common defect in a delivered font package and it is entirely a packaging mistake rather than a conversion one.

The WOFF2 the recipient will need anyway

WOFF2 is read by every current browser and is around thirty per cent smaller than the WOFF of the same font. Whatever the specification says, that is the file the site should serve, and producing it costs one more conversion.

Do not stack them in the same @font-face rule as a fallback pair. The browser takes the first source it understands, which will always be the WOFF2, so the WOFF becomes a file nobody downloads and nobody updates — a stale copy of the typeface sitting on the server waiting for a tool to reorder the rule. Deliver both, and say which is for use.

What the numbers usually look like for a CFF font

A single-weight OTF with a full Latin Extended character set commonly starts somewhere in the low hundreds of kilobytes. Wrapping it as WOFF removes a useful fraction of that; wrapping it as WOFF2 removes roughly a third again.

Neither figure is where the saving actually is. Subsetting the font to the characters the site will set beats both by a wide margin — a 300 KB desktop font reduced to basic Latin and converted to WOFF2 routinely lands around 25 KB. If page weight is in the brief, subsetting belongs in the deliverable, and it should be done before the conversion rather than after.

Test the package on a machine without the font installed

This is the trap that catches studios specifically. Your machine has the OTF installed, so when a browser cannot load the WOFF it falls back to the locally installed family of the same name and the page looks perfect. The client, who has no such font, sees Arial.

A private browsing window does not help — the font is installed at the operating system level, not in the browser. Check on a second machine, on a phone, or by temporarily giving the @font-face family a name no installed font uses. Ten seconds of that removes the single most embarrassing way a font handover fails.

Converting a family in one batch, and where the files go

Drop the whole folder rather than one file at a time. Up to 100 fonts convert in a single pass and come back as a ZIP with names preserved, which is the shape a delivery wants anyway. Repeat once for WOFF2 and the package is done.

The work runs on our server, because fontTools has no browser build. Each file travels over an encrypted connection, is converted in an isolated environment, and the working directory is removed when the job finishes. The free allowance is 100 server conversions a day with a 25 MB ceiling per file — a full family and its second format fit inside a fraction of that.

How to produce a WOFF from an OTF

  1. Drop the OTF onto this page, or the whole family folder.
  2. Choose WOFF as the target and start the conversion.
  3. Download the files, then repeat for WOFF2 and hand over both.

OTF and WOFF: desktop font, web deliverable

OTF compared with WOFF
OTFWOFF
Full nameOpenType FontWeb Open Font Format
File extension.otf.woff
Media typefont/otffont/woff
First published19962009
Published byAdobeW3C
SpecificationISO/IEC 14496-22WOFF 1.0
LicensingOpen standardOpen standard
Standing todayCurrentLegacy, still read everywhere
Opens in a browserEvery browserEvery browser
Considered insteadTTF, WOFF2WOFF2, TTF

What survives

Nothing is discarded. OTF 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.

Opening the result

FontForge reads both OTF and WOFF, so there is a way to check the result against the original without a second tool.

What each format is for

The two are aimed at different work: OTF at typesetting and print, WOFF at the web. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.

OTF is Adobe's format, published in 1996. The specification is ISO/IEC 14496-22, 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.

OTF to WOFF: deliverables, licences and weights

Are my OTF files uploaded anywhere?

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.

What files should a web font handover contain?

One WOFF2 per weight and style actually used, the @font-face rules that reference them, and the licence document. Add WOFF only if the recipient’s platform or specification demands it — no current browser needs it.

Can I give a client the font files I licensed?

Usually not without their own licence. Most desktop and web licences name the licensee and do not permit transfer, so the correct handover is often files the client has bought, or an open-licensed family. This is a contract question, not a technical one.

Does converting to WOFF change how the typeface looks?

No. The cubic PostScript outlines and every feature table are copied into a compressed container without inspection. A WOFF made from an OTF renders exactly what the OTF renders.

How big is a WOFF compared with the OTF it came from?

Smaller, and by less than a WOFF2 would be. WOFF uses zlib; WOFF2 uses Brotli with font-specific preprocessing and lands roughly thirty per cent below WOFF on the same source file.

The page looks right on my machine but wrong on the client’s. Why?

Because the font is installed on yours. A browser falls back to a locally installed family with the same name, so a broken @font-face path is invisible to the person who owns the desktop font. Test on a machine that does not have it.

Can I convert a whole family at once?

Yes — up to 100 files per batch, returned as a ZIP with the filenames preserved, which matches how a family is normally delivered.

More about these formats