CNC Software Toolchain Using Only Open Source Software

For hobbyists, there are two types of machines that can make parts at home. The first type is matter-adding machines (3D printers) and the other is matter-subtracting machines (like CNC milling machines).  [Mario] recently tipped us about an article he made detailing which free software can be used to design and produce parts on CNC machines.

The first step of the process is obviously designing the part you want to make using a Computer-Aided Design (CAD) application. [Mario] suggests Heeks or Freecad for which you can find plenty of tutorials on YouTube. The next step consists in converting the part you just designed to machine tool paths using a Computer-Aided Manufacturing (CAM) application. Fortunately, Heeks can do both so it may be the best option for beginners. [Mario] also mentions the pcb2gcode  application, which allows you to manufacture printed circuit boards at home for the prototypes you may want to produce. Finally, the well known LinuxCNC (previously Linux EMC2) software is used to control the CNC machine using the GCode that the CAM software produced.

At Hackaday, we’d really like knowing what our readers currently use for their CNCs so don’t hesitate to leave us a comment below.


  1. Anool says:

    I use pretty much the same tool chain that Mario uses, for my ShapeOko CNC. Except, instead of Linux EMC2, I use GRBL (using a Raspberry-Pi + AlaMode + GRBLShield).
    G-Code viewer from here is pretty useful too :
    Also, looks promising once it develops further.

  2. birdmun says:

    OT: The CNC driving software is now called LinuxCNC. There were some legal issues with EMC/EMC2. That is why the name has been changed.

  3. Ant says:

    I may be wrong, but I think that CNC covers more than just matter removing machines. By definition, “computer numerical control” applies to any machine which is controlled by a computer, so 3D printing would come under that.

  4. six677 says:

    CNC stands for computer numerical control. It simply means some sort of machine is being controlled with a computer, your 3d printer, regular inkjet printer and several other devices are all CNC. A milling machine is what you guys should have been referring to which in this case is being CNC’ed.

  5. Protoneer says:

    OpenSCad is a nice tool for creating dynamic 3d models that can be changed via via variables.

  6. matt venn says:

    Openscad -> pycam -> linuxcnc on a CNC router and mill
    Works well for 2.5 and full 3d

  7. Zee says:

    Designspark Mechanical is much easier to use than the two recommended here.

  8. Tumblebeer says:

    My recently finished cnc router is controlled by GRBL on an arduino.
    Since I haven’t got a dedicated cnc computer, installing linux or downgrading to 32bit windows for mach3 (and getting a parallel port) wasn’t really an option.
    However, GRBL is incredibly easy to use, and works very well with any gcode sending software. I personally use Universal GcodeSender. The CNC is jogged and controlled by an oldschool xbox controller, interfacing with gcodesender by an autohotkey script (and xpadder).

    For the parts-creation, I mostly use cambam (with illustrator/photoshop for image tracing if I’m doing engraving), the easiest to use for a beginner imho, though heeks is better for 3d parts.

    • Mgingerich says:

      I’m trying to implement something similar with a microcontrolled CNC, but I don’t know much about the software end of things. How did you get GRBL to run on an arduino? Is it possible on other microcontroller brands?

  9. hemalchevli says:

    For simple jobs, I use LibreCad for designing with dxf2gcode for tool path generation.

  10. hemalchevli says:

    Reblogged this on Teen Patti Rules.

  11. tjb1 says:

    I use Draftsight for CAD, SheetCAM for the code and run it on LinuxCNC. That’s the best/cheapest I have found for my plasma table.

  12. birdmun says:

    If all you are doing is 2.5D, you could probably get away with a vector image and pstoedit, or, a bitmap image, potrace, then pstoedit.
    potrace converts bitmaps to vector images, and, pstoedit can convert vector images to dxf or even output LinuxCNC formatted gcode.

    • Kevin says:

      I am very interested in this toolchain, can you possibly post an example set of the commands to go from bitmap to gcode? Can you specify different parameters for different layers? Like if one layer is pockets, and another is cut outs?

  13. Dave says:

    Autocad for drawing outlines of shapes and aspire for 3d cad and cam. Not cheap but very easy to use

  14. Chirpinchuckthehumanduck says:
    while its not free its cheap and its pretty easy to use.
    again not free but cheap and he has a demo version that has tons of features. I bought it because his demo version is so strong. You know how sometimes you just want to support the good people that bring good products? Far and few between now days. Well with both of those purchases that was the case.

  15. Chris says:

    I recommend HSMexpress for Solidworks. It’s not open source but it is a free download and great for 2.5D milling. You must also have Solidworks which is not free or open source, but there is a student option. For motion control I use LinuxCNC which is okay – my current setup suffers from latency issues every 30 mins or so which is dangerous, so I will probably get one of those cheap boards that buffers the step signal between the computer and motor drivers.

  16. Does anyone have any experience on the speed between something like pycam and Heeks vs. a paid package like VCarve? I’ve used VCarve and pycam and the speed difference is astounding. VCarve spits out the gcode in a fraction of the time. I’m not talking about simple 2D or 2.5D parts. I mean a complex curved surface, not a simple hole drilling problem. Maybe I’m doing something wrong, but the difference is very large in my experience.

    The CAM part of the equation is the weak link, IMHO. It’s easy to find software to design the part. It’s easy to set up something to run the gcode. Generating the tool path code is the difficult part.

  17. Anool says:

    to send G-Code from my Raspberry-Pi to the AlaMode (Arduino), I use Zapmakers GRBL Controller :
    I tried Universal G-Code sender but its Java dependence slowed down the Ras-Pi to a crawl. Zapmaker’s GRBL controller works like a charm.

  18. biqut2 says:

    I use Solidworks -> SolidCam -> LinuxCNC -> Gecko G540 -> nema23 stepper motors.

    I haven’t found any solution as fast and easy as solidworks/solidcam.

  19. Owen White says:

    for my metal cutting laser ( I use Rhino -> LinuxCNC. But the tough part is making the tool path. For that I use a VB-based dump of the file out of rhino which specifies the parts and the cuts inside of those parts. I dont think I could give up Rhino, the software has too many features that I need for design.

    Then I wrote python code:

    that does a traveling-salesman-esque attempt at choosing the parts to be cut, and the path through the cuts for each part. I havent heard of any open source options for people doing plasma or laser cutting.

    It might sounds complicated but the advantage of this is the dump from Rhino is down with mouse click, and the conversion by my python code is a call done in linuxcnc. So to go from CAD to loaded in linuxcnc is two mouse clicks. This is very helpful when doing rapid part design at my laser.

  20. david says:

    tormach pcnc770, student version of inventor, cambam, (also free version of eagle, pcb-gcode)

  21. lmn says:

    Does anyone mentioned “Only Open Source Software” toolchains?

    I use Kicad->Cyclone PCB Factory scripts->Printrun->Teacup firmware (-> and Gen7 hardware) to manufacture PB’s.

  22. eck says:

    So far I’ve been using Draftsight for design (though Inkscape is great for turning pdf’s into dwg’s to then open and edit in Draftsight),
    then dxf2gcode for conversion (though I can never get it to cut alongside the toolpath rather than on it).
    The ngc. file is put into a network folder, then I fire up an old motherboard running LinuxCNC which I control on my Android tablet using AndroidVNC. (While LinuxCNC’s Ubuntu has remote desktop out of the box, it does still require some extra work to get it to start without a monitor actually plugged in.) LinuxCNC finds the .ngc and sends the G-code to the mill.

    I’d be really interested in hearing from anyone what their open source toolchain would be for DLP 3d printing, as I am looking into retrofitting my old Sable CNC to this task.

  23. mxd says:

    2.5D gcnccam is worth checking out. I use librecad to make DXF and obviously linuxcnc.
    Gcnccam is fairly well made, but has some lead in move bug, which the following fixes and can be compiled on a ubuntu 8.04 and run on 10.04

  24. 42loop says:

    I toyed with blendercam ( ) for a while and it seems to be reasonably fast and accurate – and open source. make sure you download the samples file as well to understand the different toolpath strategies.

  25. jim says:

    Really? No one here using MasterCAM or ArtCAM? Geeze! These together are so powerfull. I know they’re expensive but since when does a guy making personal non profit projects need to buy em?

  26. Terry says:

    Is there a software package than can do both 3D Printing as well as milling/routing? I was thinking about a machine build that would accommodate both functions, addition and removal. Obviously at different times. Such a creature could use the same gantry/stepper framework, but would driver boards and other electronics work for both applications?

  27. Bill says:

    I realize I’m late to the party buy I’m looking for a FOSS toolchain that lets me take a 3D model => slice => lathe.

  28. Mark Rich says:

    In my garage resides a SX1 Mill , 4axis , ballscrews ,TTS style power drawbar , 3.5 dc motor, G0704 CNC , Im in the middle of converting my G4000 and G3102 6×26 knee mill. I use Solidworks and solidcam for cad cam and Mach 3 to run it all. When the CNC bug bites watch out!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s