The real history of Dotnetcore.NPOI

Tony Qu
3 min readNov 25, 2021


It’s a bit confusing that there are 2 popular NPOI packages in nuget list while you searching NPOI. They are NPOI (14M downloads) and Dotnetcore.NPOI(3M downloads).

It’s not just you but me (as the PMC of NPOI) also feel confused about this nuget package. I would have thought this package is different from NPOI package and there should be a lot of new features and bug fixes added as a separated branch.

However, after half-year complete investigation on Dotnetcore.NPOI, I conclude that the PMC of Dotnetcore.NPOI yang-xiaodong (Savorboard) is cheating to the public during the past 4 years.

Why Xiaodong Yang is not the real PMC

The real PMC is not Xiaodong Yang. He totally hid the contribution from the real hero, who migrates NPOI from .NET to .NET core.

The real PMC of this branch is this guy - The initial code of dotnetcore.NPOI originally from However, Xiaodong requested Github to detach the fork link between NPOI.core and dotnetcore.NPOI. After that, he becomes the PMC of the branch.

The clues is in the git history of dotnetcore.NPOI as below

Git history of dotnetcore.NPOI

I guess the fork detach time was in Dec, 2016.

Code Insights of dotnetcore.NPOI

Someone may believe that yang-xiaodong is the real PMC of this project because he added more code than joshcomley does according to the insights. At the beginning of this investigation, I also think this makes sense. However, after a few random checking of his commits, I found his commits were very tricky.

There are huge numbers of code commits (excludes modification), which only modify the formats of comments. Ah, Interesting, right? Let’s look at the following commit:

format code · dotnetcore/NPOI@de493da (

Contribution from Xiaodong for Dotnetcore.NPOI branch

I summarized the whole git history of Dotnetcore.NPOI. Here is my conclusion of Xiaodong’s contribution.

a. Merge PR

b. Update (Frequent contribution)

c. clean up code (571 additions and 122 deletions)

d. replace string with String (Big contribution, 534 files changed)

e. remove files

That’s all. Big change, right :D

Final and last contribution from NCC group

final commits from alexinea and zlzforever

There is a big contribution from NCC group before this repo was archived. It’s good to see that they are working together on a project finally. However, the commits is not in C# but in plaintext. It’s a readme update. The purpose is to destroy the fame of me.

I have to admit that this readme did work in a short period. I even got some threats from NPOI users in China. They threaten me that they will not use NPOI anymore. But who cares? Do you pay for this free component? Where is the thanksgiving? Anyway, it’s China. I always teach myself ‘don’t expect too much’.



Tony Qu

.NET Veteran, Buddhist, Maintainer of NPOI, Father and Husband