WOFF to OTF

A WOFF 1.0 file is a desktop font with each table zlib-compressed, and unwrapping it gives back that font exactly. Whether the result is an .otf depends on what was wrapped. If the font inside has CFF (PostScript) outlines, you get a genuine OpenType .otf, table for table identical to the original. If it has TrueType (glyf) outlines, as most web fonts do, the honest file is a .ttf, and that is what you get, with a notice saying so. This page does the unwrapping in your browser and re-reads the result before offering the download.

Drop WOFF 1.0 files or folders here, or choose them.

Everything runs in this tab. Detecting device capabilities…

Files are read and processed in this browser tab. Nothing is uploaded — the page’s Content-Security-Policy blocks connections to any other origin.

Why a TrueType font comes out as .ttf, not .otf

The extension is a promise about the outlines inside. ".otf" tells installers, design tools and font validators to expect a "CFF " table of cubic PostScript curves. A WOFF built from a TrueType font holds a "glyf" table of quadratic curves instead, and nothing about unwrapping it can change that. Converters that hand back such a file named .otf are renaming it, and some tools reject or misreport the result.

Producing real CFF outlines from TrueType would mean writing CFF charstrings, which Glyph Batch does not do; the TTF to OTF page explains what that conversion involves. In practice it is rarely needed: a .ttf installs on macOS, Windows and Linux exactly as an .otf does, and every app that asks for "an OTF" accepts it.

How to tell which one you have before converting

Open the file in the font inspector. Its Overview panel names the outline model: "CFF / PostScript" means this page will give you an .otf, and "TrueType" means a .ttf. Underneath, the WOFF header records the original sfnt version ("OTTO" for CFF, 0x00010000 for TrueType), and the table list shows a "CFF " table or "glyf" and "loca".

You can also just convert. When the result row shows a "ttf not otf" badge, the font was TrueType, and the Details panel explains it.

What unwrapping does and does not change

Every table is inflated back to its original length and compared with the checksum the WOFF recorded, and any mismatch is reported. Outlines, hinting, kerning, ligatures, variation axes, colour tables, the name records and the embedding bits come through unchanged, and only the sfnt table directory is rebuilt.

The WOFF's optional extended-metadata block has no place in an .otf or .ttf, so it is not part of the output. The inspector shows its contents if you want to keep a copy of the licence or credits it records.

What survives this conversion

Every row below is checked automatically against your own file after conversion. If any check fails the output is discarded rather than offered for download.

Conversion compatibility for WOFF to OTF
PropertyOutcome
Output file type partialA WOFF holding CFF (PostScript) outlines comes out as a real .otf. One holding TrueType (glyf) outlines comes out as .ttf, with a notice saying why. A TrueType font is never renamed to .otf.
Glyph outlines keptByte-identical. The outline tables are copied, not redrawn.
Character map (cmap) keptEvery code point keeps the same glyph id. Verified after every conversion.
Family, version, copyright and licence strings keptPreserved exactly and re-checked against the input.
OS/2 embedding permissions (fsType) keptPreserved. Glyph Batch never clears a vendor restriction bit.
OpenType layout (GSUB, GPOS, GDEF, kern) keptPreserved unchanged, so ligatures and kerning behave identically.
Outline hinting (PostScript hints in CFF, or TrueType bytecode) keptPreserved unchanged. CFF outlines are not converted to TrueType, so their hints stay with them.
Variable font tables (fvar, gvar, avar, HVAR, STAT) keptPreserved unchanged; the output stays variable.
Colour tables (COLR, CPAL, sbix, CBDT, SVG) keptPreserved unchanged.
DSIG digital signature partialKept in the file but no longer valid: the signature covers the original byte layout, and the decoded sfnt is a different layout.

When it does not work

You asked for .otf and got a .ttf.

Why: The WOFF wrapped a TrueType (glyf) font. Unwrapping returns that font as it is, and a TrueType font is a .ttf.

Fix: Use the .ttf: it installs and loads wherever an .otf does. If you need PostScript outlines specifically, you need the font's original OpenType/CFF release from its publisher.

"Unrecognised file" for a file named .woff.

Why: The first bytes are not a font signature at all. Usually an HTML error or login page was saved under the font's name by a download that failed.

Fix: Download the font again from its source. A real WOFF2 file with the wrong extension is not this problem: the container is detected from its signature and decodes normally.

An error says a WOFF table "could not be decompressed".

Why: That table's stored bytes are not valid zlib data, usually because the file was cut short in transit.

Fix: Download the font again. If the same table fails again, the copy on the server is damaged.

Your design app will not install the .otf.

Why: Web fonts are often subsetted to a few hundred characters, or carry an OS/2 embedding setting that tells installers not to install them.

Fix: Check the coverage and the embedding panel in the inspector. A web subset is not a replacement for the licensed desktop font.

Related

  • WOFF to TTF

    Unwrap WOFF 1.0 web fonts back to TTF/OTF in your browser. WOFF 1 is a pure container, so the result is table-for-table identical. Nothing is uploaded.

    Open: WOFF to TTF
  • WOFF2 to OTF

    Decode WOFF2 web fonts to OpenType .otf in your browser with the reference Google decoder. CFF fonts become a real .otf; TrueType fonts become .ttf, never a renamed file.

    Open: WOFF2 to OTF
  • Inspector

    Read everything inside a font file in your browser: family and PostScript names, version, copyright and licence text, OS/2 embedding permissions, variation axes, colour tables and the full table directory.

    Open: Inspector
  • Formats

    A precise guide to the four font formats: what a container is, what an outline model is, why OTF to TTF is a real conversion and TTF to WOFF2 is not, and which format to ship.

    Open: Formats