Skip to main content

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.

Runs in this tabNo uploadR12 or R2000Free and unlimited

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

Key facts about SVG to DXF converter
Elements readpath, line, polyline, polygon, rect (including rx/ry rounded corners), circle, ellipse, and g / a / switch containers
Transforms resolvedmatrix, translate, scale, rotate (with an optional centre), skewX and skewY, accumulated through every level of nesting
Elliptical arcsthe SVG A command is converted to cubic Béziers before flattening, so a rounded rectangle keeps its true corner radius
Curve toleranceadjustable from 0.005 to 1 drawing unit — the maximum distance a straight segment may sit from the curve it replaces
Circles preserveda circle element under a uniform transform becomes a DXF CIRCLE, not a polygon, so drilling and pocketing toolpaths stay exact
Layerstaken from each group's inkscape:label or id; turn the option off to put everything on layer 0
Unitsderived 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 versionsR12 (AC1009) with POLYLINE/VERTEX runs, or R2000 (AC1015) with one LWPOLYLINE per contour
$INSUNITS writtenmillimetres, centimetres, inches or unitless, chosen by you and recorded in the file header
Not convertedtext (glyph shapes live in the font, not the SVG), use references, embedded images, gradients, fills, opacity, clip paths, masks and filters
Input cap10 MB of SVG source
Measured examplea 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. 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. 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. 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. 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. 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. 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.

Specs & compatibility
Inputplain .svg up to 10 MB — SVGZ must be unzipped first, and text must already be converted to paths
OutputASCII DXF R12 or R2000 with an LTYPE table, a LAYER table and $INSUNITS set
Size modeskeep the SVG's declared physical size, or set an output width from 1 to 1000 units and scale to it
Layer namessanitised — the characters that DXF forbids in a layer name are replaced with underscores, and an empty name becomes 0
Coordinate precision4 decimal places in the written file
Compatibility targetR12 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 contourswritten with the polyline closed flag set, which is what a cutter needs to recognise a shape rather than a path
Browser supportcurrent Chrome, Edge, Firefox, Safari and Opera
Offlineworks 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.
Because the letter shapes are not in the SVG. An SVG text element stores the characters and the name of a typeface, and the shapes come from a font file on whatever machine renders it. There is nothing to convert into geometry. The page counts the text elements it skipped and tells you. The fix is one menu item in your design app: Inkscape's Path → Object to Path, or Illustrator's Type → Create Outlines, both of which replace the text with real paths that convert perfectly.
As accurate as you ask for. The tolerance control is the maximum distance, in your chosen drawing unit, that a straight segment may deviate from the curve it replaces, and the flattener subdivides recursively until every segment is inside it. There is no lossless setting and there cannot be one: a DXF polyline holds straight segments and circular bulges, not cubic Béziers. At 0.05 mm the flats are below what a laser kerf or a router bit resolves; at 0.005 mm you are into micron territory and a large file.
It will if the SVG declares a physical size, such as width="100mm", and you leave the size control on "Keep the SVG's size". Then the millimetres-per-user-unit ratio comes straight from the file. If the SVG only has pixel numbers, the CSS convention of 96 user units per inch is applied and the page warns you — in that case switch to "Set width" and type the finished width you actually want. Either way the chosen unit is written into $INSUNITS so the receiving program does not have to guess.
R12 unless you have a reason not to. It is the 1990 format and is the widest-supported thing in CAM: old machine controllers, plasma tables, plotter drivers and cheap laser software all read it. Its polylines are POLYLINE entities with a VERTEX per point and a SEQEND, which makes the file larger — the same drawing came out at 8.8 KB in R12 against 4.3 KB in R2000 in testing. Choose R2000 when the target is modern CAD and you care about file size.
They are dropped, because DXF has nowhere to put them. A DXF stores centrelines and layers, not appearance: there is no fill, no gradient, no opacity and no stroke width on a polyline. A shape that was filled in the SVG becomes its outline. A thick stroked line becomes a single line down its middle, not the two edges of the stroke — if you need the outline of a stroke, use your design app's "stroke to path" command before exporting.
No. It is read from disk by the File API and parsed with the browser's own DOMParser into a document that is never attached to this page, which is why nothing inside the SVG can run a script, load a font or fetch a URL. All the work after that is arithmetic on numbers in tab memory. There is no server behind this tool, and no request is made that contains any part of your file.
View all

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy