Cutlist Workbench (About)


I wrote a quick tool some years back (2013, as far as I can tell) to generate a list of cuts for a set of shelves I was building. At the end of that weekend, I threw it up on my website and basically forgot about it. After awhile, search engines indexed it and it started finding a regular audience. In the years since, I've made a handful of enhancements to the original tool and made several attempts at a from-scratch rewrite that would address some glaring flaws in the original design. None of those attempts were successful until now (2020).


In keeping with the spirit of the initial release all those years ago, my intention is to keep this tool free for anyone to use forever. However, some features that people have requested sound interesting to make but to justify the cost they'll end up as for-pay extra features for those who are interested. This could be more effective algorithms, specialized user interface features, or custom integrations for other applications.

There will also be advertising in the free tool. In a user survey I conducted a few years back, the majority of respondents indicated that they found this acceptable. If you want to block that advertisement, you can. When you create an account, you'll have the option for whether to see the ads or not. I don't want the ads to ever get in the way of your use of the tool and I would rather you not see them if you aren't interested.

The Legacy Algorithm

The algorithm from the original tool has been ported into this new architecture (as the "Legacy" algorithm) but it still operates the same way.

It starts with a couple of sanity checks, ensuring that at least one available stock is provided, at least one component is requested, and the longest requested component is shorter than the longest piece of available stock. If any of those fails, the algorithm bails out immediately.

The rest of the algorithm is cyclical — it performs a set of actions in a loop until it is complete. Each iteration starts by creating a new instance of the longest stock, then places as many pieces into it as will fit. That stock is then reduced to the smallest stock that all of the selected pieces still fit into. This is all repeated until no pieces remain.

This algorithm makes some assumptions that don't always hold up. It assumes that longer stock lengths are more desirable (they are often more cost effective but this is not universally true).


While I haven't released this under any sort of open source license and legally retain ownership of my work, I have no intention of defending any of this against any reasonable reuse, commercial or otherwise. I plan to release it under some form of the creative commons license eventually, but in the interim you can feel free to adapt it however you want. I enjoy the emails I get from people who have modified it to some other purpose but you don't even have to do that. The code is all there on the page for you to have and I'm happy it's doing so much good for so many people.

If you want explicit legal permission to make derivative work based on my code or something else along those lines, you can email me at and I'll oblige.