Turn a WOFF web font into an OTF font file in a few clicks—upload your WOFF, convert to OTF, then download.
.woff files from your device. Batch upload is supported — drop a whole @font-face stack and convert each in one pass. Parsing runs entirely in your browser via a lazy-loaded build of opentype.js; nothing leaves your machine.OTTO (CFF) or 0x00010000 (TrueType-flavored) sfnt header preserved from the source..otf file individually. No sign-up, no watermark, no upload to any server — the file you download is generated in your browser session.WOFF is a transport wrapper, not a font format in its own right. The W3C published WOFF 1.0 as a Recommendation on December 13, 2012 specifically so designers could ship existing TrueType (sfnt 0x00010000) or CFF/OpenType (sfnt 'OTTO') tables over HTTP with zlib compression — typically 40-50% smaller than the raw sfnt for TTF-flavored fonts, and a smaller gain for CFF-flavored fonts since CFF is already compact. When you need the font on the desktop, in a print layout, or inside a design tool, you have to unwrap the WOFF back to a flat OpenType file. Typical reasons to do that:
.otf from /Library/Fonts (macOS) or C:\Windows\Fonts (Windows). They don't read .woff directly. Convert the WOFF you downloaded from a brand's CDN, then double-click the OTF and macOS Font Book or Windows Font Viewer installs it.@font-face and you're rebuilding the marketing site or a printed brochure, converting the same WOFF to OTF guarantees metric and glyph parity (the underlying glyf or CFF table is identical — only the container changes)..otf and .ttf cleanly; WOFF is not part of the embeddable font list, and fsType permissions are read from the OS/2 table, which survives the unwrap intact.Need a different format? See WOFF to TTF for TrueType installs, WOFF to WOFF2 to upgrade an old WOFF to WOFF2's Brotli compression, or OTF to WOFF for the reverse direction.
| Property | WOFF | OTF |
|---|---|---|
| Standard / publication | W3C Recommendation, Dec 13, 2012 | ISO/IEC 14496-22 (first published 2007; current 2019 edition) |
| Purpose | Web font container for HTTP delivery via @font-face |
Desktop font format for OS installation and design tools |
| Compression | Per-table zlib (compress2) |
None — raw sfnt tables |
| Typical size vs source | ~40-50% smaller than TTF source; smaller gain for CFF | Baseline — original sfnt tables |
| Outline data carried | Wraps TrueType (glyf) or CFF/CFF2 |
Native: TrueType outlines OR CFF/CFF2 outlines |
| File extension | .woff |
.otf (CFF-flavored) or .ttf (TrueType-flavored, sometimes called .otf colloquially) |
| Browser support | Chrome 5+, Firefox 3.6+, Safari 5.1+, Edge, IE 9-11 (~96% global) | Loadable via @font-face but not recommended — no compression |
| OS install (Win/macOS/Linux) | Not directly installable | Double-click installs in Font Book / Windows Font Viewer |
| Metadata extras | Adds vendor and license metadata fields (extMetadata) |
Uses native name and OS/2 tables |
| When to use | Shipping fonts to browsers in 2012-2019 sites (replaced by WOFF2 in modern sites) | Desktop installation, print, design tools, PDF embedding |
| Component | Where it lives in WOFF | Where it lives in OTF | Survives the unwrap? |
|---|---|---|---|
Glyph outlines (glyf for TrueType, CFF/CFF2 for PostScript) |
Compressed table inside WOFF container | Native table in sfnt | Yes — bit-for-bit identical after decompression |
Hinting (fpgm, prep, cvt, gasp) |
Compressed tables in WOFF | Native tables in sfnt | Yes |
| OpenType layout features (GSUB ligatures, GPOS kerning, contextual alternates) | Compressed in WOFF | Native in OTF | Yes — every feature defined in GSUB/GPOS/GDEF is preserved |
Naming (name), OS/2 metrics, cmap |
Compressed in WOFF | Native in OTF | Yes |
WOFF-specific metadata (extMetadata, vendor info) |
Present | Not part of OpenType spec | Dropped during unwrap — only the OpenType-spec tables survive |
| Compression headers | WOFF directory + per-table zlib | None | Removed; tables emitted raw |
The headline implication: converting WOFF to OTF is lossless for the font itself. The only data that doesn't survive is the WOFF-specific metadata wrapper around the font (which is just descriptive XML/key-value, not glyph data).
Yes. The OpenType layout tables — GSUB (substitutions including ligatures and stylistic alternates), GPOS (kerning and mark positioning), GDEF (glyph definitions), and BASE/JSTF — are stored inside the WOFF container as ordinary sfnt tables, just zlib-compressed. Unwrapping decompresses them back to their raw form. The resulting OTF behaves identically to the OTF the foundry originally compiled before they wrapped it for the web.
.otf or .ttf? They both came out before.It depends on the outline format inside your WOFF. If the source font uses CFF/CFF2 (PostScript outlines, common for Adobe and contemporary type-foundry releases), the sfnt header is OTTO and the right extension is .otf. If it uses TrueType outlines (glyf table, sfnt header 0x00010000), the technically-correct extension is .ttf even though "OTF" colloquially covers both. This converter writes .otf for the file extension since that's what you asked for, but if your design tool complains about the format, try the WOFF to TTF route — it's the same unwrap, different extension label.
Only if the license allows it. Most commercial webfont licenses (Adobe Fonts, Monotype, MyFonts) restrict the WOFF to browser use on a specific domain. Self-hosted open-source fonts (SIL Open Font License — fonts from Google Fonts, Fontsource, Font Squirrel) are explicitly licensed for desktop use too. Check the foundry's EULA before installing a webfont you pulled from someone else's CSS. xconvert does the technical conversion; you're responsible for the licensing.
Because WOFF 1.0 applies zlib compression to every font table, the resulting WOFF is typically 40-50% smaller than the raw TrueType-flavored sfnt. CFF-flavored fonts (already-compact PostScript outlines) shrink less under WOFF, but you should still expect the OTF to be 20-40% larger than the WOFF it came from. The OTF you download is a faithful, uncompressed copy of the OpenType data — that's by design, because operating systems can't read zlib-wrapped tables.
WOFF2 swaps zlib for Brotli compression plus a glyph-data preprocessor, so WOFF2 files are typically 20–30% smaller than equivalent WOFF 1.0 files (median ~24% for TTF-flavored fonts). The unwrap is the same idea — decompress the tables, write a flat sfnt — but the algorithm and the parser are different. If you have a WOFF2, use WOFF2 to OTF instead; this page only accepts WOFF 1.0.
Once the page has loaded, yes. opentype.js is lazy-loaded into the page and runs entirely in your browser. After the initial page load you can disconnect and continue converting — your files never go to a server.
No. Those live in the name table (name IDs 0, 7, 8, 9, 10, 13, 14, 16, 17), which is preserved during the unwrap. Open the resulting OTF in macOS Font Book or use a tool like ttx to dump the name table — you'll see the same copyright, designer, vendor URL, and license URL strings that the foundry shipped.
Yes, with caveats. OpenType Font Variations are defined by the fvar, avar, gvar (for TrueType outlines), HVAR, MVAR, and STAT tables — all standard OpenType tables that ride inside the WOFF container unchanged. The resulting OTF is a valid variable font and modern apps (Illustrator 24+, Photoshop 22+, Figma, recent InDesign) honor the axes. Older apps that predate variable-font support will fall back to the default instance.
Not from this page — xconvert is purely a container-level converter. To rename the family or rebuild the name table, open the resulting OTF in FontForge or Glyphs and edit the name fields, then re-export. Renaming is a licensed activity in most foundry EULAs, so confirm you have rights before redistributing a renamed font.