Text to SVG: Type Becomes Editable Paths

Type a line, pick a font you already own, and get back an SVG made of outlines instead of a <text> element. Nothing is uploaded, no webfont is fetched, and the file opens the same way on a machine that has never seen that font.

Any installed fontTTF / OTF / TTCPath outputNo upload

1. Text & font

the font stays in this tab
Family
No font loaded yet — use the buttons above.

2. Typography

applies on change
Sizepx
Trackingpx between letters
Line height× size
Align
Box widthpx — 0 fits the box to the ink
Colour
Decimalspath precision
Options

3. Preview & export

—
Load a font to outline this text
The downloaded file has no <text> element, no font reference and no external asset.

Converting text to an SVG path means replacing the characters with the outlines they would have been drawn from, so the letterforms survive as geometry. That is the whole difference: a <text> element asks the viewer's machine for a font, while a <path> carries the shape itself. Everything below runs in your browser tab, reading a font you already have and writing the outlines out as path data.

What happens between typing and a path

Five steps, and you can watch three of them move as you change a control. First the character is looked up in the font's cmap table to get a glyph id. Then the glyph's outline is read from the font — either a glyf entry of straight lines and quadratic curves, or a CFF charstring of cubics. That outline is scaled by size ÷ unitsPerEm, flipped on the Y axis because fonts grow upwards while SVG grows downwards, and finally written out as one d string. Each glyph is placed at the running advance width plus your tracking, and the kerning adjustment the font itself asks for.

Because the arithmetic happens in the tab, the numbers you see are the numbers in the file: an AV pair tightens by the same amount here as it does in InDesign, as long as the font ships kerning for it.

The string Text to SVG at 96 pixels shown as live text on the left and as outlined path data on the right, with the path snippet and the 72 byte versus 4 KB file size comparison
Same string, two files: 72 bytes of <text> that needs the font, or about 4 KB of <path> that does not. · swipe to see it all

Why outlining fixes the font problem

A <text> element is a request, not a drawing. If the font is missing the browser substitutes something else, and if the font is a webfont the request fails in email clients, in PDF exports, inside <img> tags and in offline documents. Outlined text cannot fail that way, which is why four separate industries insist on it:

Where the font comes from

There are two routes, and they produce identical output.

RouteHow it worksBrowsersBest for
Installed fontsThe Local Font Access API lists the faces already on the machine, then hands the tab the bytes of the one you pickChrome and Edge 103+; permission prompt once per siteQuick jobs with a font you already use daily
Font fileYou drop a .ttf, .otf or .ttc; the file is read with FileReader and never leaves the tabEvery current browserClient fonts, licensed faces, Safari and Firefox

Either way the font file is parsed here. A collection such as Songti.ttc or Helvetica.ttc holds several faces in one file; the face picker switches between them without re-reading the file.

Tracking, kerning and the space between letters

Three different numbers decide where the next glyph starts, and they are easy to confuse:

Because tracking is applied in output pixels, it does not scale with the font size the way a kerning value does — at 24 px and at 240 px the same tracking number gives the same absolute gap. When you scale a design later, re-export rather than scaling the SVG, or rebuild the file at the new size with tracking adjusted proportionally.

Multi-line text, alignment and the bounding box

Each line becomes its own path and sits on its own baseline, spaced by line height × size. The box is then measured from the ink: the rendered paths are asked for their real bounding box, and the viewBox is fitted to it plus a margin of 8% of the font size. That is why the export has no em-square air above the capitals and no descender band below a word that has no descenders — and why a swash, an accent or a negative side bearing cannot be clipped at the edge.

Alignment only has something to move when the box is wider than the line. With Box width at 0 the frame hugs the widest line, so a single line looks identical in all three positions and only the short lines of a paragraph shift. Type a pixel width into Box width and the frame is pinned: Left, Centre and Right then move every line inside it, which is what you want for a label, a badge or a title that has to sit at a fixed position. The margin stays 8% of the size on all four sides either way, so the ink never touches the edge.

Chinese, Japanese and Korean

CJK text works exactly like Latin text: the font maps a code point to a glyph and the glyph is outlined. Two practical notes. CJK faces are large — a full Songti or Hiragino collection runs from 20,000 to 60,000 glyphs, so the first parse takes a moment while the table directory is read, and the browser needs the memory for it. And CJK outlines are dense: four han characters at 96 px come to roughly 4.6 KB of path data, where the same four characters as a text node are under 90 bytes. Both are still small files; just do not expect the outlined version to be the lighter one.

What this tool does not do is shape complex scripts. Arabic, Devanagari and other scripts that need contextual joining and reordering will come out in isolated letterforms, because that requires a shaping engine such as HarfBuzz rather than a glyph lookup. For Latin, Greek, Cyrillic, CJK, kana and hangul the mapping is one-to-one and the output is correct.

When a simpler route is better

If the SVG already exists and only has text inside it, you do not need to retype anything: SVG Editor lets you edit the markup, and the SVG Validator tells you why a file that contains text renders blank after an export. If you want the reverse trip — a file full of paths turned into embeddable markup — use SVG to Code. And if you need a PNG of the outlined artwork rather than an SVG, SVG to PNG takes the exported file directly.

For the other half of this pair — pulling a single glyph out of a font, with its metrics, instead of setting a paragraph — see Font to SVG. And if you would rather see the manual routes side by side — Illustrator's Create Outlines, Inkscape's Object to Path, or tracing a rendered bitmap — the text to SVG converter guide compares them with a browser tool and says where each one breaks down.

Frequently asked questions

Does the exported SVG still need the font installed?

No. Every character is replaced by the outline the font would have drawn, so the file contains only <path> data. It renders identically on a machine that has never had that font — which is exactly why cutters, laser software and app icons ask for outlined text.

Can I convert Chinese or Japanese text to paths?

Yes, if the font you load covers those characters. A CJK face such as Hiragino Sans GB, Songti, PingFang or Noto Sans CJK maps every han character to a glyph, and this tool outlines whatever the font contains. Characters the font does not cover are counted as missing instead of being drawn as empty boxes.

Why is the outlined file so much bigger than the text tag?

Because a text tag is a pointer and a path is the drawing. Text to SVG at 96 px is 72 bytes of markup as a text element and about 4 KB as outlines in Arial; four han characters in a CJK face land near 4.6 KB. That is the price of not needing the font, and gzip cuts it by roughly 60–70%.

Is my text or font uploaded anywhere?

No. The font is read with FileReader (or the local font list, with your permission), parsed in the tab and turned into path data there. There is no upload endpoint on this page and no external script — disconnect the network and it keeps working.

Which browsers can list the fonts already on my computer?

Chrome and Edge 103 or later, through the Local Font Access API, which asks for permission once per site. Safari and Firefox do not implement it, so load a TTF or OTF file there instead; the outlining path is identical.

Related SVG workflows

More free SVG tools