Turn TrueType (TTF) fonts into OpenType (OTF) files quickly—upload your .ttf, convert, then download the .otf result.
.ttf files. Batch conversion is supported — drop an entire family (Regular, Bold, Italic, Bold Italic, plus weight variants) in a single pass. Files stay in your browser session; nothing is uploaded to a server.glyf, cmap, GSUB, GPOS, kern, name, etc.) are preserved byte-for-byte, and the extension changes from .ttf to .otf. Existing OpenType layout features, kerning pairs, hinting bytecode, and variable-font axes carry over unchanged.fonttools is the standard CLI) before converting — that strips unused glyphs and keeps the .otf smaller..otf downloads individually, or grab the whole batch as a ZIP. No sign-up, no watermark, no email required. Parsing happens locally via a lazy-loaded opentype.js worker.TTF (TrueType Font) and OTF (OpenType Font) are both SFNT-based font containers — at the binary level, they share the same table-directory structure. TTF was developed by Apple in the late 1980s and licensed to Microsoft; OpenType was a 1996 joint Microsoft/Adobe extension that added support for Adobe's PostScript (CFF) outlines and richer OpenType layout features. In practice the .otf extension is associated with PostScript-flavored OpenType, but the spec explicitly allows a .otf file to contain TrueType (glyf) outlines — and that is exactly what most TTF-to-OTF conversions produce.
.ttf and .otf, but some templates, brand guidelines, and corporate font-management systems (Universal Type Server, FontExplorer X, Suitcase Fusion) are configured to expect .otf exclusively for OpenType-typed assets. Converting avoids "wrong format" rejections in those pipelines..ttf and another as .otf; a single family with mixed extensions is awkward to manage. Converting every weight to .otf (or .ttf — see OTF to TTF for the reverse) gives one tidy extension across the whole family directory.liga, dlig, ss01, cv01, smcp, c2sc, kern, frac, tnum, onum), and every variable-font axis (wght, wdth, opsz, slnt, ital) carries over unchanged because the underlying SFNT tables are copied verbatim..otf files the same way they install .ttf (double-click or drop into ~/Library/Fonts, C:\Windows\Fonts, or ~/.fonts). There is no rendering difference at install time; the OS reads the outline format from the SFNT directory, not the extension..otf extension when classifying assets. Standardizing on .otf smooths integration with those tools without altering the font itself..otf container is the expected hand-off format.| Property | TTF | OTF |
|---|---|---|
| Full name | TrueType Font | OpenType Font |
| Year released | 1991 (Apple/Microsoft) | 1996 (Microsoft/Adobe) |
| Container | SFNT | SFNT (same wire format) |
| Outline format | TrueType (glyf, quadratic Bezier) |
TrueType (glyf) OR PostScript CFF (CFF/CFF2, cubic Bezier) |
| Hinting | TrueType bytecode (very granular, instruction-based) | TrueType bytecode if glyf; declarative hint values if CFF |
| Variable fonts | Yes (TrueType variations: fvar, gvar) |
Yes (fvar + gvar for glyf, CFF2 for PostScript) |
| OpenType layout features | Yes (GSUB, GPOS, GDEF, BASE) |
Yes (same tables) |
| Color emoji (COLRv1, sbix, CBDT) | Yes | Yes |
| Typical file size | Baseline | Same if container-only rewrap; 10–30% smaller if re-encoded to CFF |
| MIME type | font/ttf |
font/otf |
@font-face format() token |
format("truetype") |
format("opentype") |
| Primary association | Operating-system fonts, Microsoft Office, Google Fonts | Adobe/print design, foundry-licensed retail fonts |
There are two ways a TTF-to-OTF converter can produce its output, and the distinction matters when you're comparing tools.
| Approach | What happens | Hinting | File size | Used by |
|---|---|---|---|---|
| Container rewrap (this tool) | Extension changes .ttf → .otf; all SFNT tables, including glyf outlines, are copied byte-for-byte |
TrueType bytecode preserved | Essentially unchanged | xconvert, most browser-based converters |
| CFF re-encoding | Quadratic glyf outlines are mathematically reconverted to cubic Bezier curves in a new CFF table |
TrueType bytecode is discarded; CFF declarative hints are generated fresh (usually weaker than the original TT hinting) | Often 10–20% smaller for glyph-heavy fonts | FontForge "Generate Fonts… → OpenType (CFF)", AFDKO makeotf |
If you specifically need a CFF-flavored OpenType file (e.g., for a print workflow that requires PostScript outlines), use FontForge or Adobe's AFDKO makeotf after converting. The rewrap approach is the right default because it's lossless, fast, and preserves the original designer's hinting work.
Yes — when the conversion is a container rewrap, every byte of every SFNT table (glyf, cmap, head, hhea, hmtx, name, post, OS/2, GSUB, GPOS, GDEF, kern, fvar, gvar, etc.) is preserved exactly. The only thing that changes is the file extension and, depending on the tool, the sfntVersion field in the table directory header. xconvert's converter uses opentype.js, which round-trips the table data; you should not see any rendering, kerning, or feature-behavior changes between the source .ttf and the resulting .otf.
No. This converter does not re-encode TrueType (glyf) outlines into PostScript CFF. The output .otf contains the same quadratic Bezier glyf table the input had — it's TrueType-flavored OpenType, which the OpenType spec explicitly allows. If you need true CFF outlines, run the font through FontForge ("Generate Fonts… → OpenType (CFF)") or Adobe's AFDKO makeotf tool, both of which mathematically convert quadratic to cubic curves and emit a new CFF table.
For a container rewrap (this tool), the file size is essentially identical — within a few bytes, accounting for any minor table padding differences. Tools that re-encode to CFF can produce 10–20% smaller files for glyph-heavy fonts because CFF supports subroutinization (shared path segments), but you trade that for the loss of TrueType hinting bytecode. For most modern displays (HiDPI/Retina, where hinting matters less), the size savings can be worth it; for small-size on-screen rendering on older Windows displays, the original TrueType hinting is usually better.
Yes — all OpenType layout tables (GSUB, GPOS, GDEF, BASE, JSTF, MATH) are copied unchanged. If your TTF supports discretionary ligatures (dlig), stylistic sets (ss01–ss20), small caps (smcp/c2sc), old-style figures (onum), tabular figures (tnum), fractions (frac), or contextual alternates (calt), every one of those features works in the resulting OTF via CSS font-feature-settings or InDesign's OpenType panel. Important caveat: if a feature wasn't present in the source TTF, conversion cannot add it — features come from the foundry's font data, not the container format.
Yes. The variation tables (fvar, gvar, STAT, HVAR, MVAR, VVAR) are copied byte-for-byte. A TrueType variable font with wght 100–900 and slnt -10–0 axes converts to an OTF with the identical axis definitions, named instances, and default values. CSS font-variation-settings: "wght" 650, "slnt" -7 continues to work as expected.
Because it isn't. Font validators like fontbakery and font-info tools like otfinfo distinguish between TrueType-flavored OpenType (contains glyf) and PostScript-flavored OpenType (contains CFF or CFF2). After a container rewrap your .otf is technically TrueType-flavored OpenType — the sfntVersion may even still report 0x00010000 (TrueType) rather than OTTO (CFF). This is valid per the OpenType specification; foundries like Google Fonts ship many of their .otf releases as TrueType-flavored. If a downstream tool specifically requires a CFF table, you'll need a re-encoding converter (FontForge or AFDKO makeotf).
No. The conversion runs entirely in your browser via a lazy-loaded JavaScript worker (opentype.js). Your .ttf file never leaves the browser session, which matters for unreleased fonts under NDA, commercial fonts with restrictive EULAs, and corporate brand assets. There is no upload, no server log, and no account required.
Yes — use the OTF to TTF converter. The reverse direction is more involved when the source OTF has CFF (PostScript) outlines, because cubic Beziers must be approximated as quadratic Beziers for the glyf table. xconvert handles that conversion automatically. If your source OTF is already TrueType-flavored (contains glyf), the reverse is also a clean container rewrap.
format("opentype") and format("truetype") in @font-face?In modern browsers (Chrome 4+, Firefox 3.5+, Safari 3.1+, Edge 12+), both tokens are accepted hints to the browser about how to parse the file. The browser ultimately inspects the file's binary structure (the sfntVersion and table presence) to determine the outline format, so a mislabeled token will still work in current browsers. For maximum forward compatibility, match the token to the file: use format("truetype") for .ttf, format("opentype") for .otf. Better still, switch web delivery to WOFF2 and use format("woff2") — that's the standard for @font-face in 2026.