# How to nest laser-cut parts for free in your browser

> Source: <https://dev.to/rivskiy_skulitom_af400ad1/how-to-nest-laser-cut-parts-for-free-in-your-browser-1epc>
> Published: 2026-10-20 13:13:59+00:00

*Written with AI help (Claude), checked against the project's docs. Disclosure: this account belongs to the small project that makes Nestbolt.*

Nesting means arranging the parts of a drawing on your sheet before you cut, so they use less material. [Nestbolt](https://github.com/skulitom/Nestbolt) is a free, MIT-licensed nesting tool for fixed sheets (laser, CNC, plasma, waterjet, fabric). Its [browser app](https://skulitom.github.io/Nestbolt/) runs the nesting engine on your own computer in WebAssembly, and the page says it plainly: "Everything runs in this browser; files are never uploaded."

Below is one real run, step by step, with the numbers the app showed. I ran it on 20 October 2026 in desktop Chrome on the hosted app.

Go to [skulitom.github.io/Nestbolt](https://skulitom.github.io/Nestbolt/). There is nothing to install and no account. If you just want to see how it behaves, it has five one-click examples: finger-jointed boxes, letters inside letters, a mechanical kit, a sewing pattern and interlocking gears.

Click **Import SVG, DXF or LightBurn** (or drop files on it). The importer treats each closed outline as a part and any outline inside it as a hole, so small parts can later sit inside larger ones.

My file was a 420 x 70 mm SVG with six outlines: a cat ornament, a star, a coaster, a gear, a heart keyring and a name tag. The app listed them as six parts with their areas (26.1, 8.4, 17.8, 14.1, 14.1 and 16.9 cm²) and showed what its cleanup did:

```
laser-parts.svg: cleanup removed 0 exact duplicate segment(s), 1 zero-length segment(s); merged 0 overlapping collinear segment(s)
```

Gaps up to 0.005 mm are joined automatically; larger repairs are listed with their positions. The import panel also shows which layers and colours it picked as cut lines, which is worth a look if your drawing has engraving or guide layers.

Each part gets a **Qty** box, a **Rotation** choice and a **Mirror** tick box. Rotation options are 0/90/180/270° (the default), 0/180° (grain), Fixed 0°, Every 15° and Free. Use 0/180° when the grain or pattern direction matters.

I typed 12 cats, 20 stars, 8 coasters, 16 gears, 20 hearts and 15 tags: 91 parts, default rotations, no mirroring.

The default sheet is 600 x 400 mm with a 5 mm margin, and the preset list has Diode laser 300×200, CO2 bed 600×400, Plywood 1220×2440, two sheet-metal sizes and a 1500 mm fabric roll. You can add more sheet sizes, a count limit per size, a remnant outline (an odd-shaped leftover piece) and defects to avoid.

Under **Settings**: part spacing and edge spacing (1 mm each by default), the goal (** Place every part**, **Fill the sheets (most area)** or **Fill by priority**) and the time budget (** Time**, 30 s by default). I left all of these at their defaults.

The best layout found so far is drawn while the search runs. After the 30 seconds, my result read:

| Sheets | Utilisation | Placed | Check | 
|---|---|---|---|
| 1 | 64.6% | 91/91 | valid | 

All 91 parts fit on one sheet, and the unused material was left as one clear strip, labelled **offcut 600 × 49 mm**, along the top. The project's README says the last sheet is compressed towards one end so that the offcut stays usable.

**Check: valid** comes from an independent validator (Clipper2) that tests overlap, spacing, containment, rotations and quantities. According to the README, invalid layouts are never returned.

The search is time-based, so results vary a little between runs: the same file and quantities gave 65.0% on 17 October, on an older build of the app.

Each sheet has **SVG** and **DXF** buttons, and **Download all sheets (ZIP)** gets them all at once. My `sheet-0.svg` was 600 mm x 400 mm with all 91 parts as paths in one `CUT` group. The name tags' rounded corners were still SVG arcs (`A 6 6 ...`), not chains of short lines: the README says export is "transformed from the original curves rather than re-polygonised".

Open the file in your laser or CAM software and check it there before cutting. **Save** keeps the project in the browser, and **Project ZIP** saves it as a file.

`main` branch. The stable release (v0.1.0) is a `.lbrn2` and `.lbrn`) and lead-in allowances are preview features.
The same engine also comes as command-line tools for Windows, Linux and macOS (Apple silicon), and as an MCP server, so an AI agent can import, nest, validate and export a job ([agent interface](https://github.com/skulitom/Nestbolt/blob/main/docs/AGENT_INTERFACE.md)). The engine builds on [jagua-rs](https://github.com/JeroenGar/jagua-rs) and [sparrow](https://github.com/JeroenGar/sparrow) by Jeroen Gardeyn and collaborators.

More guides on the project site: [free nesting for laser cutting](https://skulitom.github.io/Nestbolt/free-nesting-software-laser-cutting/), [nesting SVG and DXF in the browser](https://skulitom.github.io/Nestbolt/nest-svg-dxf-in-browser/), [the five examples](https://skulitom.github.io/Nestbolt/nesting-examples/) and [the benchmark results](https://skulitom.github.io/Nestbolt/results/).
