Skip to the tool

Convert fonts.

TTF, OTF, WOFF & WOFF2 — converted right in your browser.

No uploads — 100% local No ads Free & open source

Drop font files here

or browse your files

Files never leave your device. Everything runs in your browser, nothing touches a server — tools you've used even work offline.

Convert fonts between TTF, OTF, WOFF, WOFF2 and even legacy EOT — entirely in your browser. These formats are different wrappers around the same font tables, so the conversion is true repackaging: glyphs, kerning and hinting come through untouched, and your font file never touches a server.

Before / after

WOFF2 — 60.5 KB — rendering this specimen

Sphinx of black quartz, judge my vow.

0123456789 — “fjord” & ligatures.

Original

176.3 KB

Compressed

60.5 KB

Saved

−66%

Real result, not a mock-up: the typeface this site is set in — Plus Jakarta Sans — went through the Font Converter tool as a desktop TTF and came out as WOFF2, packed by Google's woff2 encoder with Brotli inside: 176.3 KB down to 60.5 KB. The specimen below is rendered live by that exact output file. Same letterforms, byte for byte — just a much tighter wrapper for the web.

Typeface by Tokotype — SIL Open Font License.

How it works

  1. Drop TTF, OTF, WOFF, WOFF2 or EOT files anywhere on the page — or click to browse.
  2. Pick the output format — the font tables are repackaged losslessly, never re-drawn.
  3. Convert, then download each font on its own or the whole batch as a ZIP.

Which format goes where

All four formats carry the same glyphs — they differ in compression and in who can read them. For websites, TTF to WOFF2 is the conversion that matters; for installing a downloaded web font, WOFF2 to TTF goes the other way.

FormatUse it forNotes
WOFF2Websites (@font-face)Smallest — Brotli; all modern browsers
WOFFVery old browserszlib — larger than WOFF2
TTF / OTFInstalling on desktopWhat Font Book & Windows expect
EOTInternet Explorer 6–8Legacy only — skip it today

Why fonts deserve local conversion

Fonts are licensed software, and many licenses forbid passing the files to third parties — which is exactly what uploading to a converter site does. Here the conversion runs in your browser: the font never leaves your machine, and there is nothing on a server to leak, cache or crawl.

Under the hood

WOFF2 files are written by Google’s own woff2 encoder — the reference implementation, with Brotli compression built in — compiled to WebAssembly and running in your browser; WOFF uses classic zlib. Neither touches the letterforms: conversion is a lossless repack of the same glyph tables into a different wrapper, which is why glyphs, kerning and hinting survive every trip byte for byte.

Frequently asked questions

Is the conversion really lossless?

Yes. TTF/OTF, WOFF, WOFF2 and EOT are containers around the same font tables — converting unwraps one and wraps another, so glyphs, spacing, kerning and hinting are preserved. The only exception the WOFF2 spec itself demands: digital signatures (DSIG) are dropped, and you will see a note when that happens.

Can it turn TTF outlines into OTF outlines (or back)?

No, deliberately. TTF and OTF store letterforms with different curve math, and converting between them degrades hinting and can distort shapes — so if you ask for TTF but the font contains OTF-style (CFF) outlines, it is saved as .otf, with a note. Same font, honest extension, zero quality loss.

Am I allowed to convert this font?

Converting a font never changes its license. Many desktop licenses do not cover web embedding (and vice versa), so check yours before publishing a converted font. Fonts under the OFL or Apache licenses and fonts you made yourself are fine. Your file also never leaves your device — nothing is uploaded anywhere.

Is it private?

Yes. The font is repackaged entirely in your browser — it is never uploaded, and the server does nothing but deliver this page. For licensed fonts that matters twice over: nothing is redistributed to any third party, and no copy lingers on a server afterwards. Want proof? Run one file through, switch your connection off, and run another — it still works.