Note that some CAD programs are able to directly export to G-code, and certain other special purpose CAD tools may serve for CAM functions. Also see Free software section in Wikipedia CAM. See also Interactive G-Code Generators.
A welcome feature would be automatically returning to the origin, say by adding G0 X0 Y0 Z0 at the end of files (prefaced by a G0 Z<safety height>).
Please note that commercial software, as well as otherwise free programs, which have significant licensing limitations have been moved to their own page.
Notes on file formats:
- dxf --- AutoCAD’s drawing exchange format. Older versions are limited to only straight lines, files are either in Imperial or metric mode
- stl --- stereo lithography triangle mesh. Often used for 3D printing stl is a general-purpose triangle mesh which may be processed by many CAM programs
- SVG --- scalable vector graphics are intended for use on screens, so scaling is done in terms of pixels and defining how many pixels there are in a unit of measure is an afterthought, if considered at all. When trying an SVG file from a new drawing program, if possible always include an object of known dimension for scaling purposes.
CAM programs can generate several sorts of tool paths, and some CAM/previewing programs are able to transform one sort of G-code tool path into another as an optimization step. Examples of this include high speed machining (HSM) and proprietary systems such as Volumill  Page discussing such: http://www.cnccookbook.com/CCCAMToolpaths.htm
Some CAM programs will require the selection of a post-processor. The creation/customization of one is described in: G-Code: Post Processors.
Open source computer aided manufacturing algorithms library: https://github.com/aewallin/opencamlib Explanations of the algorithmic details at: http://www.anderswallin.net/category/cnc/cam/  Used in stl2ngc.cpp listed below.
The ShapeOko 3 (and Nomad 883) include a license for Carbide Create a CAD/CAM program developed by Carbide3D (currently in beta).
- 1 G-Code
- 2 Post-processor
- 3 2D (Laser or plasma machines)
- 4 Multi-function
- 5 Images
- 6 Hole Tolerance
- 7 2.5D
- 8 3D
- 9 3D Slicing for Additive Manufacturing
- 10 Multiple Axis
- 11 Fonts
- 12 PCB
- 13 Thread Cutting
- 14 Drag Knife Support
- 15 Gears
- 16 Fret cutting
- 17 Conversion programs
- 18 Nesting
- 19 Other programs
- 20 Testing
|Hand Coded||gcode tutorial||Reference material to get you started writing gcode by hand. This is a great point of reference once you get into creating your own gcode, or if you need to modify generated gcode.
There is a list of editors for G-Code (some of which have syntax highlighting) on the Programming page.
|Graphical Editor||RapR3D Visual GCode Editor||Free (beta, donation-ware) graphical tool for Windows allowing point-click-drag editing of G-code files.|
One common need for many CAM applications is a post-processor to convert from and internal G-code representation to a particular variant. Effort to collect them here: https://www.mycampost.com/ (note that it may include some commercial post-processors)
2D (Laser or plasma machines)
The simplest use case, software for this may also allow the machine to function as a plotter. Note that Grbl 1.0 and later over-ride M4 to enable lasermode.
|2D Laser||laser-code||Part-cutting software which does a “travelling salesman” routine to determine optimal path.|
|2D Laser||JTech Photonic Inkscape plug-in|
|2D Laser||Raster 2 Laser GCode generator|
|2D Laser||SnapFracturePop's Laser GCode converter||Tool to modify G-code for use on a laser.|
|2D Laser||LaserWeb up to version 3: LaserWeb3||Node.js based, Windows/Linux/Mac/Raspberry Pi/Vagrant supported, host software for Lasercutters/Engravers running Marlin/Smoothieware/Grbl/LasaurGrbl with integrated parametric Gcode generators, Raster support, as well as Raster and Vector Engraving. SVG and DXF supported for cutting, PNG, BMP, JPEG support for raster engraving.|
|2D Laser (Windows)||Image2Gcode||Image to Gcode converter, it is designed for laser engravers based on GRBL.|
See also Font to G-Code CNC VB2005E which allows one to directly convert text using any Windows font into G-code which will cut to a specified depth.
See also the Windows tool G-code Optimizer lists on the G-Code Utilities
Note that some 2.5D programs listed in the next section are also able to import images for CAM.
Processing technique: Image_Engraving: The Gold Method
Another option is to start with a 3D model, and then render that into a grayscale pixel image: https://www.reddit.com/r/CNC/comments/63eayp/how_to_create_this_type_of_gray_scale_image_for/dfuac1m/
|2.5D Image engraving||Scan2 CNC||Convert image to G-Code.|
|2.5D Image engraving||Reactor and Halftoner||Windows programs (requiring DOT NET 3.5) to engrave pixel maps as either halftones or dot patterns.|
|2.5D Image engraving (opensource)||Dmap2gcode||Generates g-code to cut depth
based on a gray scale image darkness or lightness.
|2.5D Image engraving||LoboCNC LoboLitho.exe||Very basic Windows program for converting bitmap images (.bmp files) to G-Code for carving lithophanes. C++ source inlcuded|
- bmp2cnc --- command line program to convert bitmaps to g-code, that runs in Linux, DOS and Windows http://www.mr-soft.net/en/bmp2cnc.html 
- imagecarve --- takes a PGM image and outputs a G-code program that carves that image
- Image-to-gcode and Image-to-gcode modified --- mills "depth maps"
- DXF Halftone 2.1 --- GPL program to convert a halftone to a .dxf.
- OpenVoronoi --- conceptual code on GitHub
- Experiment with pointilism source code: CNCStipple.zip
- http://clonerbox.com/image_3D_converter.php  --- image to stl converter
- http://3dp.rocks/lithophane/ --- Lithophane : images (greyscale) to 3d print or CNC mill as low relief ("bas-relief") or lithophane 
- https://www.dropbox.com/sh/a7uknxazwlkekcp/AAC2kRnseymtWMLjjmDCzKfBa?dl=0 --- Matlab code to generate G-code from image.
|2.5D web based||MakerCAM||Open source and web based software in Flash based on PartKam. Hosted and maintained by Edward Ford.|
|2.5D||PathCAM||Open Source Toolpath generation software, available for Windows and Ubuntu. Supports .stl .obj .dae files. Sends GCode to GRBL v8.0c.|
|2.5D||jscut||Converts SVG files to CNC cutting paths. GPL, source available on github.|
|2.5D web based CAD + CAM||Easel||Browser-based CAD + CAM + Machine Control app made by Inventables that lets you design, generate toolpaths, preview in 3D and send the job to your machine from one web app. Online help. Able to run on Raspberry Pi.|
|2.5D pocketing and PCBs||BCAM - offline foss CAM||Open source and is written in python. Project at hackaday.io: https://hackaday.io/project/3985-bcam-2d-computer-aided-manufacturing packaged for ubuntu utopic https://launchpad.net/~snegovick/+archive/ubuntu/bcam-preview Uses https://pypi.python.org/pypi/dxfgrabber/|
|2.5D CAM/engraving (opensource)||Gcodetools||Inkscape plug-in.|
|2.5D engraving (opensource)||F-Engrave||Python program for generating G-code from outline fonts (w/ algebraic analysis of outlines to vary depth when using a v-shaped bit and the ability to place text on an arc), (some) dxf files, pbm graphics (using potrace).
Blog post w/ an Intro to V Carving @ buildlog.net
|2.5D engraving (Lithophanes)||Image to Lithophane||Online app to generate lithophanes as .stl files|
|2.5D engraving (Lithophanes)||CNC Lithophane Toolpath Generator Program||Lithophanes obtain their shading by having different thicknesses of translucent material to perform shading, and then are back lit.|
|2.5D engraving (Lithophanes)||http://hobbymaro.puhasoft.hu/Tweakie/Mach1Filter.exe||Free, stand-alone, Windows based application for producing Lithophanes and 3D Reliefs.|
- https://github.com/tmpvar/text2gcode --- command line tool under the MIT license to use a TrueType font to create the G-code to cut a given text w/ user-specified parameters
- DeskEngrave --- converts text set in TrueType fonts, saves as DXF or G-code. Also available from: http://yertiz.com/cnc/text2.htm
Note that LaserWeb now supports CNC milling and has extensive documentation: http://cncpro.co/index.php
Note that CamBam has an old version which is freely available as noted on the Commercial Software page.
Merging the boundaries between 2D and 3D, CAD and CAM, there's http://www.flatfab.com/ Fabrication Design Software that helps you design and fabricate 3D objects. Ideate and draw in 2D, fabricate in 3D.
|3D modeling||GSimple||Program to design 3D objects and generate the G-code for them. Made for Windows but runs on Linux with Wine. Not capable of true 3D, better suited for steel, G-code needs post-processing.|
|3D modeling||HeeksCNC||A CAD/CAM application for Windows or Linux that can help you produce NC code. How to use different operations in HeeksCNC. When importing DXF from Inkscape, only check "use ROBO-Master type of spline output" and set the base unit as mm.|
|3D modeling||PhlatScript||Google SketchUp plugin for generating G-code.|
|3D CAM||FreeMill||Free 3D Machining with very easy to use wizard. Accepts .stl files. Post-processor|
|3D CAM||PyCAM||A toolpath generator for 3-axis CNC machining. It loads 3D models in STL format or 2D contour models from DXF or SVG files. The stable release is working but extremely slow and uses a lot of RAM for complex models in 3D. The development release is much faster and should be prefered. MacOS install. PyCAM.|
|3D CAM||GCAM||GNU 3-Axis CAM with a simple interface for making bolt holes, drill holes, sketches, templates, and more.|
|3D CAM||cl-mill||BSD-licensed milling application generating G-Code, built in Common Lisp.|
|3D CAM||Blender CAM||Open source solution for artistic CAM, a g-code generation tool, an extension for the free open-source Blender 3D package.|
|3D CAM||OpenSCAD2CNC||Tool written in C# that generates toolpaths from OpenSCAD code instead of STL files.|
https://github.com/koppi/stl2ngc/blob/master/stl2ngc.cpp --- STL to G-Code converter in C++
Note that GrblGru v3.5 is able to slice an STL into layers so as to create a stair-stepped version of an STL.
https://grid.space/kiri --- combination CAM tool and slicer for FFF, lasercutting and rotary spindles.
3D Slicing for Additive Manufacturing
|4 and 5 Axis||simplemultiaxiscam||Very simple, yet well documented program to generate G-Code for 4 and 5 axis CNC machines.|
|4th axis||pyturn||Simple python code generator for CNC lathe programs|
|4th axis||CNC G Code Wrapper Program||Wraps an XY plane toolpath around the A Axis.|
|4th axis||G-Code Ripper||Map linear axis to rotary axis.|
|4th axis||GCodeMapper||Maps simple g-code programs (G0, G1, G2, G3 movements) from a plane to a cylinder.|
|4th axis||Spherical Turning Program||Use your parting tool to do spherical turning.|
|4th axis||Wrapper||Wrapper (wrap a toolpath around a cylinder for those who have a lathe as a 4th Axis).|
|multiple axis||The CNC Toolkit||Collection of utilities to help users produce, edit, import and export the machine control codes for general automation, mechatronic, hexapod, robotic and animatronic applications. Source code.|
|multiple axis||CAMVOX||Open source application designed for producing multi-axis toolpaths. Features: CSG (Constructive Solid Geometry), High resolution voxel space , Full 3D milling with 4 or 5-axis, Collision avoidance.|
See also Aptos on the Programmatic G-Code Generators page
StickFont v1.1 http://ncplot.com/freetools.htm --- converts text to G-Code (or DXF) using a single stroke font.
|PCB||Carbide Copper||Carbide 3D Blog. Docs.|
|PCB||cad.py||Python script for creating G-Code files for isolation milling and drilling. Tutorial http://web.media.mit.edu/~neilg/fab/dist/cam.py|
|PCB||FlatCAM||Open-source PCB CAM. Includes Viewer, Isolation Routing, support for Double-sided boards |
|PCB||Visolate||Application for calculating machining toolpaths (G-code) for manufacturing printed circuit boards (PCBs) by isolation milling. As an outstanding feature, this calculation is done on the computer's screen, using the features of 3D graphics drivers.|
|PCB||drl2ngc||Bash script to convert Excellon drill files (.drl) to g-code (.ngc) files.|
|PCB||PCB-Gcode||Script for generating G-code for milling a PCB out an Eagle PCB layout. See also Stencil-Gcode for generating an SMD stencil. Yahoo group(from this helpful post)|
|PCB||FreePCB||A free, open-source PCB editor for Microsoft Windows, released under the GNU General Public License.|
|PCB||Line Grinder||Gerber to GCode Isolation Milling. MIT. Windows.|
|PCB||pcb2gcode||Imports standard gerber RS274-X and Excellon files, and creates fully EMC2-compatible RS274-NGC files. Will not run on Windows, includes Voronoi region analysis.|
|PCB (Mac OS X 10.8 or later)||Otherplan||Imports Eagle (.brd), Gerber (.gtl and .grb), G-Code (.nc and .tap), PCBmodE (.svg) --- intended for use w/ the OtherMill, but outputs standard G-code.|
|PCB (online generator)||rapid-pcb.com||Online tool to generate G-Code from board design files.|
|PCB (online generator)||SimpleGCoder||Online tool to build circuit boards, which generates G-Code for CNC.|
|PCB (previewer)||gerbv||Free/Open Source Gerber Viewer.|
http://cirqwizard.org/ --- cross-platform open source software designed to control PCB prototyping machines. Gerber to GCode converter, also controls the machine and guides a user through the processes of PCB manufacture.
http://www.pentalogix.com/viewmate.php --- ViewMate Gerber Viewer
An interesting alternative to tramming or flattening one's workarea is instead to use special software to modify G-code to match one's bed: Autoleveller Hackaday: Mill Warped PCB Blanks On An Uneven Bed. Also: http://martin2250.blogspot.de/2014/12/grbl-height-probing-tutorial.html and https://github.com/synthetos/TinyG/wiki/ChiliPeppr-PCB-Auto-Level as well as bCNC.
bCNC also has a facility for this. https://github.com/vlachoudis/bCNC/wiki/AutoLevel
Note that this may require a special "threadmill" endmill.
|Right hand threads||CNC Thread Milling G Code Generator Program||Internal and external thread milling.|
See the forum discussion thread milling with shapeoko2?.
- http://www.varmintal.net/alath.htm --- includes gears calculating Visual BASIC programs.
Drag Knife Support
|Drag Knife Optimizer for G-Code||Donek Tools Swivel Program||Excel spreadsheet which will optimize G-Code for cutting with a drag knife.|
If a design will accommodate rounding all of the corners, one can cut it without the need for special cornering action moves. Without them, any CAM software should give you a workable result with a Drag Knife. Simply use an engraving style (follow) toolpath which follows the line in your design which you would wish to have cut.
There is an Excel spreadsheet for clockwork calculations: http://www.shapeoko.com/forum/viewtopic.php?f=7&t=5190&p=38066
|Gears||Involute Spur Gear Builder||Browser based utility for calculating and drawing involute spur gears, fully accounts for undercuts. Blog announcement.|
|Gears||GGGears ||Tool for creation and calculation of gear transmission finite element models. Consists of a geometry and mesh generator based on GMSH and a finite element model based on GETFEM++.|
|Gears||pyGear||Built on top of pythonOCC, OpenCascade, numpy and scipy, serves as an CAE/CAD-preprocessor generator of involute gears.|
|Sprockets||Sprocketeer (online) Windows and information||Generate gcode or a CAD (DXF) drawing for sprockets.|
|Gears||GearGCoderV1.0 (Windows)||Generate gcode for a gear based on inputting Diameter (150mm --- values in parentheses are samples suggested by the developer), teeth (20), width ratio (3), feed rate (1000), tooth height (13mm), depth (9mm), add mounting holes (Y), number of holes (5), distance from center (50mm).|
|Gears||GearMaker (Windows)||Program that will produce the tooth profile of a gear as a dxf drawing. Video tutorial on finishing.|
|Gears||GearDXF (Windows)||Outputs a DXF file containing a 2D outline of a spur gear using specified parameters. The tooth face is a true involute curve, but the base gaps between teeth are rough.|
|Gears||gears (Java)||Involute gear milling generator and G-code viewer|
|Gears||Gear Model For 3D Printer (OpenJSCad website)||Online gear generator includes support for rack and pinion, bevel and worm gears.|
Extensive tutorial at: http://www.cartertools.com/involute.html
|Guitar||LoboCNC Fretboard.exe||Free Windows application written by Jeff Kerr for cutting blind fret slots in guitar or other instrument fret boards using a small diameter end mill (~0.023"). C++ source included.|
See also dxf 1.1.1 a Python library to generate DXFs and DXF Halftone 2.1 mentioned above. Cf. Using AutoCAD file formats with open source libraries (IBM Developer Works article).
|DXF to DXF||DXF File Z Axis Deletion Program||Takes DXF file and collapses all Z dimensions to zero.|
|HPGL to DXF||HPGL to DXF Translation Program||Accomodates the basic set of HPGL-1 commands and translates them into a DXF file.|
|DXF to G-Code||Ace Converter||Open-source freeware (GPL) utility to convert two dimensional DXF files to g-code.|
|DXF to G-Code||flatcam||Ruby command-line tool to generate gcode from a dxf-file.|
|DXF to G-Code||CNC Code Generator||Open-source software to generate NC code for machining operations like end-milling, drilling, turning, etc. generates the NC code by extracting features from a 2D DXF file.|
|DXF to G-Code||dxf2gcode||Graphical Python program to convert a 2D dxf drawing to CNC machine compatible G-Code, including preview window. Now includes drag knife support. (Formerly hosted on Google Code)|
|DXF to G-Code||Gcode2000||for Windows 95/98/2000/XP/Vista /Windows 7, reads Lines,Arcs,Rect,Circle,PolyLines,LWPolylines, Ellipse, Sorts object by size. Reads and writes DXF files.|
|DXF and Gerber files to G-Code||gCncCam GNU Cam Processor||Graphical program to convert DXF-Files and GERBER NC-Files (Drill-Files) to G-Code (RS-274) NC-Files for the Linux EMC2 cnc. Features include:
|PCB to G-Code||Convert Excellon Drill File to G-Code|
|SVG to G-Code||svg2gcode||A command line utility for converting SVG to G-Code using Gcanvas and canvg.|
|HPGL to G-Code||hp2xx||Opensource tool to convert vector-oriented graphics data given in Hewlett-Packard's HP-GL plotter language to a variety of formats including G-code.|
https://github.com/arpruss/gcodeplot --- Generate 3-axis plotter gcode (or HPGL) from HPGL or an SVG subset. See http://www.instructables.com/id/Use-3D-Printer-As-a-Plottercutter/
http://kokompe.cba.mit.edu/ --- set of software tools for personal fabrication, intended for use with machines common to fab labs, includes Tools to design 2D and 3D objects, Functions to generate 2D and 3D toolpaths, GUIs workflow from design files to machine commands