Convert a font to OTF
Re-encode a TTF, OTF or WOFF font as OpenType/CFF (.otf). This build of opentype.js only writes CFF outlines (verified by execution: it always emits the OTTO sfnt tag, never TrueType glyf, regardless of the source format), so OTF is the one honest direction: a real outline-format change coming from a TrueType source, a clean re-serialize coming from an OTF one. Nothing is uploaded.
Runs on your device. The file is never uploaded.
Convert a font to OTF re-serialises a TTF, OTF or WOFF through opentype.js, which only ever writes CFF outlines under the OTTO tag, so the file is named .otf. The report names the glyph count, the outline format it came from, and how the byte size changed. A WOFF2 is turned away by the parser before any of that.
Questions
Which formats can I convert between?
You can put in a TTF, an OTF or a WOFF, and you always get an OTF out. That is the honest limit of the engine: opentype.js parses all three but its writer only ever produces CFF-flavoured OpenType, stamping the OTTO tag no matter what went in. Coming from a TrueType file that is a real outline format change; coming from an OTF it is a clean re-serialize.
Can it make a WOFF2 for my website?
No. This tool writes .otf only, and it cannot read WOFF2 either, so a .woff2 input is refused with "not a font opentype.js can read". Compress the OTF into WOFF2 with a build tool if web delivery is the goal. Subset a font to specific characters is the tool to reach for when the aim is a smaller web font.
Does kerning and my OpenType features survive?
Do not assume so. The output is rebuilt from what opentype.js parsed, and the tool verifies exactly two things: that the result parses back, and that the glyph count is unchanged. Anything the library does not model might not be carried across. Run Inspect a font file on the result and check the summary, which reports whether a kerning GPOS table is present.
What does the result tell me?
One line naming the source outline format, the glyph count and the byte sizes, for example a note that a TrueType font became OTF/CFF with its glyph count and its old and new sizes. The file is your name with the .otf extension. A CFF re-encode of a TrueType font can come out larger or smaller; both are normal.
Why did it say the result does not parse back?
Because a safety check failed. After writing the OTF the tool parses it again and compares the glyph count, and if either step fails it refuses to hand you the file, saying this is a bug rather than a bad input. That is deliberate: a font file that looks fine and silently fails to load is worse than an error.
Is my font uploaded anywhere?
No. opentype.js runs in a Web Worker in this browser tab, so the font file is read on your own machine. That matters for licensed fonts in particular: nothing leaves your device, there is no account, and the site works with the network off after the first visit.