Console --plan-cutting and MCP plan_cutting/apply_cutting_plan run the desktop's CuttingPlanBatch: capture, plan, then an all-or-nothing apply. Settings come from an explicit JSON file or the plates' identical saved settings, never defaults. Unverified plans need per-call acceptance, which is not posting consent. Console --no-fill plans a loaded nest as is; a blocked plan exits 2 and saves nothing. Scrap cut-offs stay desktop-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OpenNest
A Windows desktop application for CNC nesting — imports DXF drawings, arranges parts on material plates, and exports layouts as DXF or G-code for cutting.
Features
- Import / export — DXF & DWG parts (ACadSharp), Excel BOMs, bend-line detection, built-in parametric shapes; export DXF or post-processed G-code.
- Nesting — automatic multi-plate/multi-material jobs, interlocking pair evaluation, and built-in or plug-in engines. Choose an engine.
- Plate operations — manual sheet cut-offs, plate- or nest-wide automatic scrap cutoffs with a minimum tail-to-keep setting, oversized-part splitting (straight, weld-gap tabs, spike-groove), interactive editing, and spacing-aware pushes that can slide along or away from touching parts.
- Visual overlap check — highlight shared material on the active plate, rechecked automatically after edits, including containment and cutouts, with area shading, pair markers, and hover details through View > Overlap Check. Usage and limitations.
- Cut simulator — Plate > Simulate Cutting replays the active plate in cut order: the torch traces each cut, rapid and pierce at adjustable feed, rapid and pierce settings, with play/pause, scrubbing, 1×–250× speed and previous/next part (Page Up/Down) and cutout (Ctrl+Left/Right) jumps. Parts the torch has not reached stay greyed. It and Calculate Cut Time use separate outside and hole feeds, skip etch-only contours like the CI Fiber post, and apply the chosen machine's acceleration and corner limits from Machine Configuration (placeholder values until you enter the controller's). Timing model.
- CNC output — configurable lead-ins/outs and tabs, contour editing, user-defined G-code variables (
$name→#200+machine variables), plugin post-processors (Cincinnati CL-707/800/900/940/CLX included). Pre-post verification checks overlaps, missing lead-ins, and rapid crossings, with explicit risk acknowledgment required to bypass warnings.
Requirements
- Windows 10+ for the desktop app; the console, API, and most test projects build on Linux/macOS too.
- .NET 8 SDK to build from source.
Windows release ZIPs are self-contained: extract the entire archive into a new folder and run OpenNest.exe; no separate .NET installation is needed. To update, close OpenNest and extract the new release into a new folder; ZIP releases do not auto-update (optional installer-based updates need a separately hosted Velopack feed). All nesting engines (Default, Rectangles, Irregular, Circles, FlatBar and the fill strategies) are built in; see nesting engines. Use the ZIP and SHA-256 checksum from GitHub Releases, not the source-code archives.
Build, Test, Run
git clone https://github.com/ajisaacs/OpenNest.git
cd OpenNest
dotnet build OpenNest.sln # full solution (Windows)
dotnet test OpenNest.Engine.Tests/OpenNest.Engine.Tests.csproj # cross-platform engine tests
dotnet test OpenNest.Tests/OpenNest.Tests.csproj # core/engine/IO/API tests
dotnet test OpenNest.FrontEnd.Tests/OpenNest.FrontEnd.Tests.csproj # console/MCP/API integration
dotnet run --project OpenNest/OpenNest.csproj # desktop app (Windows)
OpenNest.WinForms.Tests (desktop-assembly tests) runs on Windows only; CI runs it and OpenNest.FrontEnd.Tests on a GitHub-hosted Windows runner for every master push and pull request.
Quick start
- File > New
- Import DXFs via the CAD Converter (layer/color filtering, per-entity exclude and cut/etch/display-only roles, bend detection, G-code preview) or create built-in shapes
- Define plate size, material, quadrant, spacing
- Fill — the engine arranges parts
- Optionally add cut-off lines, apply Part Sequencing to order crossing cut-offs before their parts, then save
.nest, export DXF, or post-process to G-code
Review part spacing before cutting, especially for interlocking pairs. See pair-spacing checks and current limitations.
Command-Line Interface
dotnet run --project OpenNest.Console -- part.dxf --size 60x120 # fill one plate
dotnet run --project OpenNest.Console -- part1.dxf part2.dxf --size 60x120 --autonest
dotnet run --project OpenNest.Console -- project.zip # re-fill a nest file
dotnet run --project OpenNest.Console -- job.nest --no-fill --plan-cutting --all-plates
| Option | What it does |
|---|---|
--size WxL |
Set the plate size; required for DXF-only input. |
--autonest |
Run validated whole-job nesting; one sheet unless --max-sheets <n> allows more. |
--engine <name> |
Choose a whole-job engine with --autonest, or a fill strategy without it. |
--quantity <n> |
Limit parts placed (0 means unlimited). |
--spacing <value> |
Override part spacing. |
--template <path> |
Read plate defaults from a nest file. |
--output <path> |
Set the output nest path. |
--check-overlaps |
Check the result for overlaps. |
--no-fill |
Keep a loaded nest as it is, for example to plan cutting or post it. |
--plan-cutting |
Plan and apply cutting (part order, contours, entries, lead-ins); see cut planning. |
--cutting-params <path> |
Cutting settings JSON for --plan-cutting; otherwise the plates' saved settings are used. |
--post <name> |
Run a post-processor after nesting. |
--no-save |
Skip saving the nest. |
--allow-invalid |
Explicitly keep a representable invalid --autonest result; otherwise it is rejected. |
Run dotnet run --project OpenNest.Console -- --help for the complete options and their defaults.
Project Structure
| Project | Purpose |
|---|---|
| OpenNest | WinForms desktop app |
| OpenNest.Core | Domain model, geometry, CNC primitives; material-overlap diagnostics |
| OpenNest.Engine | Nesting algorithms and whole-job contracts |
| OpenNest.IO | DXF/DWG, .nest, G-code, BOM I/O; CAD import |
| OpenNest.Console | Headless batch nesting |
| OpenNest.Api / .Data | Programmatic pipeline; machine & cutting-parameter data |
| OpenNest.Gpu | GPU-accelerated pair evaluation (ILGPU) |
| OpenNest.Benchmark | Head-to-head engine comparison |
| OpenNest.Mcp | MCP server for AI tool integration |
| Posts/ | Post-processor plugins (Cincinnati CL / CI Fiber lasers, Gravograph IS8000) |
| *.Tests | Cross-platform suites; WinForms tests are Windows-only |
Nesting Engines
Default compares the built-in Irregular, Rectangles and Circles engines and keeps the best valid whole-job layout. Other engines and plug-ins suit particular jobs; see which engine to use. Desktop Auto Nest, console autonest, MCP autonest, and the API share an independent validation pipeline, including for plug-ins. Automatic nesting and validation explains how callers handle invalid results.
File Format
.nest files are ZIP archives containing drawing programs, metadata, plates, and placements. Saved nests retain each part's lead-ins, lead-outs, tab gaps, and locks, plus the plate's cutting settings. Changing a drawing's geometry removes obsolete cutting paths from its parts; name, quantity, and color edits preserve them. See the file-format reference for compatibility and recovery behavior.
Supported Formats
| Format | Import | Export |
|---|---|---|
| DXF | Yes | Yes |
| DWG | Yes | No |
| Excel BOM | Yes | No |
| G-code | No | Yes (post-processors) |
.nest |
Yes | Yes |
Keyboard Shortcuts
Ctrl+F fill area · F zoom to fit · Shift+wheel / middle-click rotate · X/Y push · arrows nudge · Shift+arrow push.
Status & License
Actively developed; core workflows run end-to-end from DXF import to G-code. Contributions welcome. MIT licensed — see LICENSE.

