SVG to DXF converter
Convert SVG paths, rectangles, polygons and circles into DXF polylines at a curve tolerance you choose, with SVG groups kept as DXF layers and the drawing unit written into the file.
SVG stores curves; DXF polylines do not. That single fact decides everything about this conversion, and this page puts it in front of you instead of behind a progress bar. Every path, rectangle, polygon, line and ellipse in the SVG is resolved through its nested transform attributes, converted to a path, and flattened into straight segments at a tolerance you choose in real drawing units — 0.05 mm is invisible, 0.5 mm shows as flats on a small radius. Circles drawn with the circle element escape that entirely: when the transform is uniform they are written as true DXF CIRCLE entities, which matters if the hole is going to be drilled. SVG groups become DXF layers, and the drawing unit goes into $INSUNITS so the part opens at the size you meant.
Key facts about SVG to DXF converter
| Elements read | path, line, polyline, polygon, rect (including rx/ry rounded corners), circle, ellipse, and g / a / switch containers |
|---|---|
| Transforms resolved | matrix, translate, scale, rotate (with an optional centre), skewX and skewY, accumulated through every level of nesting |
| Elliptical arcs | the SVG A command is converted to cubic Béziers before flattening, so a rounded rectangle keeps its true corner radius |
| Curve tolerance | adjustable from 0.005 to 1 drawing unit — the maximum distance a straight segment may sit from the curve it replaces |
| Circles preserved | a circle element under a uniform transform becomes a DXF CIRCLE, not a polygon, so drilling and pocketing toolpaths stay exact |
| Layers | taken from each group's inkscape:label or id; turn the option off to put everything on layer 0 |
| Units | derived from the SVG's declared width divided by its viewBox span; with no declared size, the CSS default of 96 user units per inch is used and the page says so |
| Output versions | R12 (AC1009) with POLYLINE/VERTEX runs, or R2000 (AC1015) with one LWPOLYLINE per contour |
| $INSUNITS written | millimetres, centimetres, inches or unitless, chosen by you and recorded in the file header |
| Not converted | text (glyph shapes live in the font, not the SVG), use references, embedded images, gradients, fills, opacity, clip paths, masks and filters |
| Input cap | 10 MB of SVG source |
| Measured example | a 676-byte SVG of five shapes produces four polylines of 147 vertices plus one true circle at a 0.05 mm tolerance |
What happens to your file
The SVG is read as text by the File API and parsed with the browser's own DOMParser into a detached document — one that is never inserted into this page, so nothing inside the file can execute, style or fetch anything. From there it is pure arithmetic in tab memory: transforms multiplied out, curves subdivided, coordinates flipped from SVG's downward Y to DXF's upward Y. The DXF is assembled as a string and saved through a blob URL. There is no upload and no server in this path; the only network request is the page's own JavaScript chunk from toolchamp.app, fetched when the page loads and carrying nothing of yours. Reload and everything is gone.
About this tool
- 1
Convert text to paths first
Do this in the design app before you export: Inkscape's Path → Object to Path, or Illustrator's Type → Create Outlines. An SVG names a font instead of storing letter shapes, so text cannot be converted here.
- 2
Drop the SVG
The shape count and the declared size appear immediately, and a preview shows the contours exactly as they will be written — not a rendering of the input.
- 3
Choose the drawing unit
mm, cm, in or unitless. Whatever you pick is written into $INSUNITS, which is how CAM software knows the scale of the part.
- 4
Set the size
Keep the SVG's size uses its declared width, which is right when the file came from a CAD-aware tool. Set width scales the whole drawing so the part comes out at exactly the width you type.
- 5
Tune the curve tolerance
Drag it down for smoother curves and more vertices, up for a smaller file with visible flats. The stats row shows the vertex count change as you move it.
- 6
Pick R12 or R2000 and download
R12 is the universal floor that every old post-processor reads. R2000 uses LWPOLYLINE and makes noticeably smaller files. The banner reports polylines, vertices, circles and layers written.
| Input | plain .svg up to 10 MB — SVGZ must be unzipped first, and text must already be converted to paths |
|---|---|
| Output | ASCII DXF R12 or R2000 with an LTYPE table, a LAYER table and $INSUNITS set |
| Size modes | keep the SVG's declared physical size, or set an output width from 1 to 1000 units and scale to it |
| Layer names | sanitised — the characters that DXF forbids in a layer name are replaced with underscores, and an empty name becomes 0 |
| Coordinate precision | 4 decimal places in the written file |
| Compatibility target | R12 is the oldest and most widely implemented DXF version, which is why it is the default here — machine controllers and CAM post-processors that reject newer files generally still read it |
| Closed contours | written with the polyline closed flag set, which is what a cutter needs to recognise a shape rather than a path |
| Browser support | current Chrome, Edge, Firefox, Safari and Opera |
| Offline | works with no network once the page has loaded |
- Set the tolerance in the unit you are cutting in. 0.05 mm on a 10 mm radius is invisible; the same number on a 500 mm sweep is overkill and triples the vertex count for nothing.
- Leave "write circles as CIRCLE" on when holes will be drilled. A CAM program can centre a drill on a CIRCLE entity; it has to guess at a 60-sided polygon.
- Name your groups in Inkscape before exporting — the group label becomes the DXF layer name, which is far easier than renaming layers in CAD afterwards.
- If a cutter rejects the file, try R12. It is the oldest and most widely implemented version, and some machine controllers have never supported LWPOLYLINE.
- Strokes have no width in DXF. An SVG drawn as a thick stroked line becomes a single centreline, not a two-sided outline — offset it in the design app if you need the outline of the stroke.
- Check the output size in the stats row against what you expected before downloading. It is the fastest way to catch an SVG whose declared size and viewBox disagree.
- Nested transforms resolved into one matrix per element
- Curve tolerance you set in real drawing units, with the vertex count updating live
- Circles kept as true DXF CIRCLE entities
- SVG groups carried through as DXF layers
- $INSUNITS written so the part opens at the right size
- R12 and R2000 output from the same geometry
- Taking a logo drawn in Inkscape or Illustrator to a laser cutter that only accepts DXF.
- Turning an SVG icon into a CNC profile at an exact finished width.
- Getting web-drawn artwork into CAD as editable geometry rather than a traced image.
- Preparing a vinyl-cutting or plasma path from a design that started as vector art.
- Converting a plotted chart or diagram into a drawing you can dimension in CAD.
- Making a DXF template for a panel cut-out from a design mock-up.
Related tools
View allWorks well with this5
Other SVG tools4
More in Data & Dev12
Updated