https://github.com/jes/meshmill
The world's greatest open source 3D CAM software. (Maybe one day.)
https://github.com/jes/meshmill
Last synced: 11 months ago
JSON representation
The world's greatest open source 3D CAM software. (Maybe one day.)
- Host: GitHub
- URL: https://github.com/jes/meshmill
- Owner: jes
- Created: 2022-04-12T15:34:51.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-09-30T19:01:47.000Z (almost 3 years ago)
- Last Synced: 2025-07-13T23:38:22.900Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 38.3 MB
- Stars: 45
- Watchers: 5
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README


Meshmill is open source 3D CAM software for Linux. It turns STL models into G-code for CNC machines.
***This is beta-quality software. Use it at your own peril.***
You can [Download the latest AppImage](https://github.com/jes/meshmill/releases) to get started.
Currently it is only available for x86_64.
Meshmill focuses on:
* ease of installation
* ease of use
* true 3D toolpaths, not 2.5D
At the expense of:
* power
* performance
* high-quality toolpaths
I created Meshmill because I was frustrated with how difficult it was to get other open source
3D CAM software to work.
* If you spot bugs and you want to help out, please
create a Github Issue, or send me an email if you're not on Github: james@incoherency.co.uk.
* Be careful with the generated G-code. Before running it, check that it's not going to crash your machine, break your tool, or
do anything else stupid. In particular, check the generated G-code in another application to satisfy yourself that the
paths are something close to what Meshmill rendered.
* If you use it to create some parts, please share pictures of your CAD and your final result :)
## How to use it
1. Download a release from the [Releases](https://github.com/jes/meshmill/releases) page.
2. `chmod +x meshmill-0.1.1.AppImage`
3. `./meshmill-0.1.1.AppImage`
4. Load your STL file in the "MODEL" tab.
5. Click "Process surface". You'll see that the model turns from your smooth triangle mesh into the blocky pixelated heightmap.
This is expected. If you reduce the "resolution" value you'll get a higher-quality heightmap, at the expense of CPU time.
You need to judge for yourself what level of precision is required for your particular part with your particular machine
and cutting tools.
6. Create a job with the "+ ADD JOB" button.
7. Set your cutting parameters and click "Generate toolpath". Once it is generated it will be displayed on
top of the model in purple.
8. Once you're happy with how your toolpath looks, use the "Save G-code" button to save it somewhere.
## Development
The GUI is made using Electron. The backend is Go.
I recommend using [nvm](https://github.com/nvm-sh/nvm) to manage nodejs.
$ nvm install --lts
$ nvm use --lts
With nvm happy, clone the Meshmill repository and install its npm dependencies.
$ git clone https://github.com/jes/meshmill
$ npm install
And run the application.
$ npm start
The backend for heightmap rendering and toolpath generation is [Pngcam](https://github.com/jes/pngcam).
There is a bundled version under `bin/`.
`main.js` is the Electron main process. `index.html` is the HTML loaded in the renderer process.
## Useful things to work on
If you want to improve Meshmill but don't know where to start, you could look at:
* make Pngcam generate spiral toolpaths (or any others you find useful)
* make Pngcam multi-threaded, or otherwise improve performance
* an interesting example part to load up before the user opens their own model
* some way to generate more than just top and bottom sides (maybe copy the part rotation UI that PrusaSlicer has?)
* support for other tool shapes: tapered ball-nose end mills, bull-nose end mills, v-carving bits with arbitrary included angles
* include roughing calculations in the ETA of the processing time, because it's sometimes significant
* fix the thing where the camera moves to a new position when a new model is rendered (I think it re-positions so
that it always looks at the centre of the model, don't know why)
* orthographic view
* adaptive toolpaths (start with just adaptive clearing during roughing)
* build Pngcam and Meshmill for other platforms of interest (Windows? Raspberry Pi?)
* reduce feed rate during full-width slotting
* separate step down for roughing passes vs finishing pass
* better sorting of cut segments to reduce time wasted on travel moves
* lift up by safe Z height during all travel moves
* don't ramp entry on travel moves
* should CutPath() consult writeStock to make sure it's not gouging? (but note writeStock is not really valid until
it's written out at the end)
* larger epsilon for Simplified() to avoid blocking Grbl lookahead with tiny moves
* animated simulation
## Contact me
Meshmill is created by James Stanley. You can email me at james@incoherency.co.uk or read my blog at
https://incoherency.co.uk/