A few weeks ago I had a boring task: read some old .xls files (the Excel 97–2003 kind) and pull the numbers out. I figured this was a solved problem in 2026. It wasn't, quite.

ExcelJS, which most people reach for, only reads .xlsx. The old .xls binary format isn't in scope. Fair enough.

So I went for SheetJS, the library everyone points to for .xls. That's when I hit the real surprise: it's not on npm anymore. The last version on the registry is 0.18.5, it's frozen, and it has known advisories. The fixed builds live on their own CDN. Installing from a CDN is fine until you realize npm audit and Dependabot can't see it, so you quietly lose your vulnerability alerts for a library that parses untrusted binary files. That felt wrong for something going into a work project.

I looked around for a small, npm-published option that just reads the cells outof an .xls. Didn't find one I was happy with. So I wrote it.

It's called xls-reader: