EPPlus needs a paid licence for commercial use, and it has since version 5 in 2020. Most of the internet has not caught up. The tutorials, the Stack Overflow threads, and the blog posts still describe the LGPL library it used to be, so a team copies four lines, ships them, and meets the licence in a legal review three weeks before release. The code is fine. The licence is the thing that bites.
This one is not about a missing feature. It is about a belief that most of the internet still repeats, and where IronXL leaves no room for the same surprise.
Full disclosure. We build IronXL at Iron Software, and this read looks at what EPPlus's licence change costs a team and where IronXL sits.
Why Do the Old Tutorials Still Mislead?
Six years of blog posts, Stack Overflow answers, and internal wiki pages describe EPPlus as the LGPL library it used to be, and nothing in the package corrects them. The install succeeds, the build succeeds, and the code runs, so a commercial team can ship EPPlus in a product it sells with no signal at all that anything is owed. The failure mode is a compliance finding by a lawyer, not a compiler error, and it lands late. IronXL has been a commercial licence from day one, so there is no earlier state a tutorial could be describing and no quiet change to miss.
The Change, Row by Row
The whole decision fits in one table, and the licence row at the top is the one the tutorials never mention.
| Aspect | EPPlus 8 | IronXL |
|---|---|---|
| Commercial licence | Polyform Noncommercial, a paid licence required, changed from LGPL at v5 | Commercial and unchanged, perpetual per developer or deployment |
| Route around the paid licence | EPPlus 4.x only, deprecated and unmaintained since 2019 | None needed, always on the latest maintained release |
| File formats | XLSX and XLSM only | XLS, XLSX, XLSM, CSV, TSV, JSON, and XML |
| Legacy binary .xls | Not supported | Supported, WorkBook.Load
|
| Formula calculation | Supported | Supported, WorkBook.EvaluateAll with 150+ functions |
Table 1. EPPlus 8 and IronXL across the licence and format questions, from each project's own licence pages and documentation.
The top rows are the licence trap, and the lower rows are the format gap underneath it. IronXL holds the same answer down every row, and the sections below take the EPPlus column in turn.
What Does Polyform Noncommercial Actually Mean?
From version 5, released in early 2020, EPPlus is Polyform Noncommercial 1.0.0. Noncommercial use qualifies, but a commercial business does not, whether it sells the product or only uses EPPlus internally, and there is no revenue threshold below which a commercial team is exempt from the paid licence. That last part is what catches teams who assume it works like the community tiers of other tools, and as of 2026 the current EPPlus 8 line still ships under it. IronXL prices commercial use openly and the same way for everyone, so the number is known before the code is written, not discovered after it ships.
Can You Just Stay on EPPlus 4?
There is a way to stay LGPL, and it is a trap of its own. EPPlus 4 remains under the old licence, remains installable from NuGet, and the maintainers say it always will be. They also mark it deprecated and no longer maintain it, so the only route that keeps commercial use off a paid licence is a package with no fixes, no security patches, and no new .NET target framework support since 2019. That is not a fallback, it is a dead end with a NuGet page. IronXL ships on a monthly cadence against current .NET, so staying supported and staying licensed are the same choice rather than opposite ones.
The Format Gap Underneath the Licence
Even a team that settles the licence can hit a second wall. EPPlus does not open a legacy binary .xls at all, since it stays inside the Open XML formats and treats the older binary container as out of scope, so a file an older ERP still emits needs a different library entirely. IronXL reads and writes that legacy format alongside the modern ones from a single API.
using IronXL;
// Legacy binary .xls, which the Open XML-only libraries cannot open
WorkBook workBook = WorkBook.Load("quarterly-export.xls");
WorkSheet workSheet = workBook.DefaultWorkSheet;
workSheet["D2"].Formula = "=SUM(B2:B500)";
workBook.EvaluateAll();
// Same API, different container on the way out
workBook.SaveAs("quarterly-export.xlsx");
That opens a legacy .xls, recalculates its formulas, and writes it back as .xlsx from one object model with commercial support included. You can pull IronXL from NuGet and run this in a couple of minutes.
Where IronXL Publishes the Price Up Front
The one case for EPPlus is a noncommercial project, where the paid licence never applies.
Everywhere else there is not much to check. If EPPlus is in a commercial product, the paid licence is already owed, and the surprise is the problem, not the price. The real choice is to keep paying for a licence you never planned for, or move to IronXL, where the cost is published up front and one API covers the legacy and modern formats, with the licensing model laid out in full.
Have you had the licence conversation about EPPlus at your company yet, or is this the first you are hearing it changed? Tell us in the comments, we would like to know how widespread this still is.
IronXL has a free trial if you want to run your own workbooks through it before deciding.
EPPlus is a product of EPPlus Software AB, with which we have no affiliation. The details above are drawn from EPPlus's public licence pages, documentation, and NuGet metadata as they stood at the time of writing. If something has changed since, correct us in the comments.
Top comments (0)