Convert fonts between TTF, OTF, WOFF, and WOFF2. Drop one or more font files, choose your
target formats, and download the results — or grab a ready-to-paste @font-face
rule for the web. This is lossless container conversion: the glyph data is repackaged, never
re-drawn. All processing happens locally in your browser — your fonts are never uploaded.
Font Converter
Convert fonts between TTF, OTF, WOFF, and WOFF2
Four formats, two kinds of font
Every format this tool handles wraps the same structure: an sfnt file, which is a
directory of tables (cmap for character mapping, name for the
family name, glyf or CFF for the outlines, and so on). TTF and OTF
are that structure stored raw. WOFF compresses each table separately with zlib. WOFF2 uses
Brotli plus transforms that rearrange glyph data so it compresses better. Converting between
the raw and compressed forms is lossless and needs no font design knowledge, and it is all this
tool does.
The one conversion that is not a repackaging is TrueType outlines to CFF outlines, or the reverse. That is why the TTF and OTF buttons depend on what you drop in: a target that would need outline conversion is disabled. If you drop a mix of both kinds, both buttons stay enabled and each font is only converted to the one that matches it.
For a longer walk through the tables, the two outline types, and when a conversion stops being lossless, read how font files actually work.
Example: Liberation Sans Regular
Dropping LiberationSans-Regular.ttf (139,512 bytes, shown as 136.2 KB) gives a
card that reads Family: Liberation Sans, Style: Regular, Version: Version 1.07.4, Glyphs: 681,
Flavor: TrueType. The OTF button is disabled. Converting with the default web pair produces:
LiberationSans-Regular.woff2: 72,024 bytes (70.3 KB), about 48% smallerLiberationSans-Regular.woff: 90,040 bytes (87.9 KB), about 35% smaller
Along with this rule, ready to copy:
@font-face {
font-family: 'Liberation Sans';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('LiberationSans-Regular.woff2') format('woff2'),
url('LiberationSans-Regular.woff') format('woff');
} Converting the WOFF back to TTF gives a 139,512-byte file again. That gap between WOFF and WOFF2 is typical: WOFF2 is the format to serve, and WOFF is only a fallback for very old browsers.
How the @font-face rule is built
- The family comes from the font's own name table (name ID 1). If there is none, the file name is used.
- Weight and style are guessed from the style name: Bold gives 700, SemiBold 600, Light 300, Italic or Oblique sets
font-style: italic, and anything unrecognised is 400 normal. The font's internal weight value is not read, so check the numbers on unusual style names. - WOFF2 is always listed before WOFF, so browsers pick the smaller file first.
- Only the first font you dropped gets a rule. For a family of several weights, copy the rule and repeat it per file.
- Variable fonts get a single fixed weight, not a weight range. Edit
font-weightto a range such as100 900yourself.
Limits and requirements
WOFF encoding and decoding use the browser's built-in compression streams, available in all current browsers. WOFF2 uses a WebAssembly build of Google's woff2 library, which is only loaded the first time a file needs WOFF2 encoding or decoding. Fonts are read from your disk into memory and never leave the tab. The tool does not subset, hint, rename, or instance variable fonts, and it does not convert collections. Previews use the browser's FontFace API, and a font that fails to load there gets a warning instead of a preview.
Once the font is on your site, the clamp calculator
builds fluid font-size values that scale with the viewport.
Frequently asked questions
Why is the OTF (or TTF) button greyed out?
TTF and OTF describe two kinds of glyph outlines, not just two file extensions. A TTF holds TrueType outlines (quadratic curves) and an OTF in the CFF sense holds PostScript-style outlines (cubic curves). Turning one into the other means redrawing every curve, which this tool does not do. So a TrueType font can become TTF, WOFF, or WOFF2, and a CFF font can become OTF, WOFF, or WOFF2.
My file ends in .otf but the tool says TrueType. Is it broken?
No. The tool reads the first four bytes of the file, not the extension. Some fonts are sold or shipped with a .otf extension but contain TrueType outlines, which is allowed by the OpenType spec. The Flavor line under each file shows what is really inside.
Does converting to WOFF2 reduce quality?
No. WOFF and WOFF2 are compressed wrappers around the same font tables. Every glyph, kerning pair, and OpenType feature survives. A WOFF2 round trip may not give back a byte-identical file, because WOFF2 normalizes some glyph data, but it renders the same. The tool notes this under the results whenever a WOFF2 file is among the outputs.
Can it make my font file smaller by removing characters?
No. That is subsetting, which removes glyphs you do not use, and this tool does not do it. All size savings here come from compression. If a font is still too large as WOFF2, a subsetting tool such as fonttools pyftsubset is the next step.
Can I convert a .ttc font collection, EOT, or SVG font?
No. TrueType Collections (.ttc) are rejected with a message asking for a single font. EOT and SVG fonts are not recognized at all. Only TTF, OTF, WOFF, and WOFF2 are supported, in either direction.
Am I allowed to convert a font I bought?
That depends on the font's licence, not on the tool. Many desktop licences do not cover web embedding, and some forbid modifying the file in any way. Changing the container is a technical step only. Check the licence before you put a converted font on a public website.
Get weekly dev tools and tips