I've been designing mechanisms in SolveSpace for about a year now, and love the application.
It's great for designing parts to be CNC milled, such as the robot arm in the image.
SolveSpace can natively export to G-Code with custom settings. I can confirm that this feature works (although picking the support nub location is not automatic).
It is totally free, and open-source.
SolveSpace is very simple, and can be feel limited at first. The entire program is light enough to run on a Raspberry Pi.
Actually, it is indeed limited compared to other CAD software, but the main advantage is the parametric constraint-based modelling, hence the name.
Parametric CAD allows the designer to focus on shape and function, while the software computes dimensions for you.
It takes a little time to get used to.
The following is not a substitute for intro tutorials, these are only the lesser-known things that I wish I knew while learning.
Things it Can't Do (as of v2.3 2020 Aug)
- Import 3D meshes (it can import .dwg, .dxf)
- Extrude along complex paths (only along line or arc)
- 3D operations like bevels or offset (these must be done at the 2D level)
- Included libraries of standard parts like fasteners or hardware
- Edit an assembly part in place without opening the part file (assembly parts are read-only unless opened)
- When first starting to draw a part, dimension one length ASAP to make sure your scale is within your intended range.
Unlike SolidWorks, SolveSpace doesn't automatically scale your entire model when you define the first dimension.
- Press the '9' key to rotate an imported group by 90* relative to the current view.
- To do operations on solids like mirrored copies or repeating all solid groups in a file together, you must create a new assembly and import the model once for each copy.
This allows you to scale each imported group, including by -1 to mirror it.
- When starting a new sketch on the surface of a solid, try rotating the view so that it's not exactly straight-on.
This way, you can see what other entities are actually in the workplane, and not obscured, so you can select the right ones for constraining.
- You can horizontally/vertically align 2 individual points- you don't need a line connecting them.
Although, you could put a construction line (green) between them if it makes sense.
- Be careful not to delete any entity that a later sketch workplane depends on. It gets deleted too, not unconstrained!
There is a warning popup- always make sure that groups deleted = 0. Of course, you can always undo, but you may not even realize that you deleted hidden groups.
If adding a constraint is unsolvable: (often happens. Not a bug, SolveSpace is just very particular)
- Bring objects closer manually, then try again. It can randomly fail in rare cases
- Allowing redundant constraints is always a quick fix, but reduces the model's ability to dynamically update
- Check that you are only constraining in the X / Y direction that is needed
- Hover over the list of offending constraints to point out the redundant ones (sometimes there's too many)
- Check that you have the correct group selected that you are wanting to modify
- Be sure you didn't select a normal (blue arrow) rather than a line by accident
- Be sure you didn't select an existing coincident constraint (purple square) rather than a point (green square) by accident
- If you get an error message "must select workplane..." go to menu: Sketch > In Workplane 
- When moving solid groups in an assembly, drag the group's origin point- this will guarantee the object does not rotate while dragging.
- If the solver messes-up the "chirality" (the handedness) of your geometry (due to another element changing by a large distance) you can sometimes "whip" it back into place by quickly dragging the bad point.
- If experiencing large lags, you must resolve them, otherwise the lag will propogate through assemblies. This is due to too many triangles being rendered in the solid model (not your sketch geometry).
Usually this occurs with lots of intersecting curves.
To fix: increase your chord tolerance (but not export tolerance, if possible).
In the Property Browser window, go to Configuration > Chord Tolerance. Try increasing it to 0.1%. Usually you don't need to go past 0.5%.
- Difference-extrudes with intersecting curves are almost always computationally intensive. Don't do a difference-extrude sideways across a face starting from the middle.
- Constraining geometry in a workplane that is later difference-extruded can improve performance. Constrain geometry to existing edges of the solid model if possible.
Solvespace does a good job merging to get the resultant 3D mesh, so there's no need to worry about Z fighting.
For example, for inset features, the inner and outer walls can be coincident, and SolveSpace will determine normals correctly and eliminate any zero-width solids.
- For difference-extrudes going to the other side (through-hole), the depth can be constrained to exactly the part thickness, sometimes improving performance.
Updated 2020 Aug 22