[This article was first published on R Archives - Sam Lovick Consulting, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here) Want to share your content on R-bloggers? click here if you have a blog, or here if you don't. Two small R packages of mine have gone to CRAN. coinclp binds the COIN-OR Clp linear programming solver and was accepted on 15 September 2026; ROI.plugin.coinclp registers it with the R Optimization Infrastructure and is in the submission queue behind it. Between them they put back something R lost at the end of 2021, and this post is a short account of what that was, what the new packages do, and — because it would be dishonest to leave it out — when you should reach for a different solver altogether.

Where this comes from Clp is one of the original COIN-OR codes. COIN-OR started inside IBM Research in 2000 as an open-source home for operations research software, and Clp — John Forrest’s simplex code, with a barrier method alongside — has been its linear programming workhorse ever since. It is mature, free under the Eclipse Public License, and good at the thing simplex codes are for: solving a model, changing it a little, and solving it again from the basis you already have.

R had a binding to it for a decade. Gabriel Gelius-Dietrich’s clpAPI, written at Heinrich Heine University Düsseldorf for the sybil metabolic-modelling toolkit, was on CRAN from 2011. In 2017 Benoit Thieurmel built ROI.plugin.clp on top of it, so that anyone using ROI could pick Clp with one argument.

Then clpAPI’s CRAN checks started failing, nobody fixed them, and it was archived on 30 November 2021. ROI.plugin.clp had done nothing wrong, but it depended on an archived package, so it followed six weeks later. I had been using clpAPI in my own models since 2018 and noticed the way everyone does: a fresh R install, a script that would not load.

The particular annoyance is that on Windows the Clp library is already on the machine — Rtools has shipped it since version 4.3 — so the only thing missing was a few hundred lines of C++ to get at it. What coinclp does The bindings are written from scratch against the current Clp callable library, with registered entry points and external pointers that clean up after themselves, and they build on R 4.5 and 4.6. There are three ways in.

The first is one call. Give it an objective, a constraint matrix, directions and a right-hand side, and get back the solution, the objective, the shadow prices and the reduced costs together: library(coinclp) A