Skip to content

nodejs_excel_library_landscape.md

Pieter Sheth-Voss edited this page Nov 10, 2025 · 3 revisions

Node.js Excel Library Landscape (2025)

An analysis of available Excel libraries for Node.js and the rationale for maintaining this ExcelJS fork.

Major Players

1. SheetJS (xlsx)

Status: MOVED OFF NPM & GITHUB (Breaking change!)

  • Last npm version: 0.18.5 (outdated)
  • New location: https://cdn.sheetjs.com (self-hosted)
  • Weekly downloads: ~4M (but deprecated on npm)
  • License: Apache 2.0 (free for commercial)
  • Maintenance: Active, but migrated away from standard npm/GitHub ecosystem
  • Concern: Intentionally moved off public infrastructure - red flag for supply chain

Pros:

  • Most popular historically
  • Very fast for reading
  • Pro version available with advanced features

Cons:

  • No longer on npm (must use CDN)
  • No longer on GitHub (moved to git.sheetjs.com)
  • Basic styling requires Pro license ($$$)
  • Community fragmentation due to migration

2. ExcelJS

Status: EFFECTIVELY ABANDONED (as of 2025)

  • Last release: v4.4.0 (January 2024)
  • Last commit: January 12, 2024
  • Weekly downloads: ~2.9M
  • Open issues: 637 (86% unlabeled, poorly triaged)
  • Open PRs: 100+
  • License: MIT (truly free)

Pros:

  • Full-featured (programmatic pivot tables, images, conditional formatting, etc.)
  • Rich styling without paid license
  • Large existing codebase and community
  • MIT license - truly open source
  • Supports features that alternatives require templates or paid licenses for

Cons:

  • Original maintainer abandoned it
  • No commits in 11 months (as of Nov 2025)
  • Mounting security vulnerabilities
  • 637 unmanaged open issues
  • Community asking "Is this dead?" (Issues #2969, #2907)

3. xlsx-populate

Status: Actively maintained

  • Last activity: Issues through April 2025
  • Weekly downloads: ~100k (much smaller)
  • License: MIT
  • Maintenance: Yes, ongoing activity

Pros:

  • Actually maintained!
  • Focus on keeping existing workbook features intact
  • Fluent API
  • Good documentation

Cons:

  • Smaller community
  • Less full-featured than ExcelJS
  • Lower adoption
  • Cannot create pivot tables programmatically (can preserve existing ones from templates)

4. excel4node

Status: Maintained, but less clear

  • Weekly downloads: ~200k
  • Built from official specification
  • License: MIT

Pros:

  • Spec-compliant implementation
  • Native builder (not parser/modifier)

Cons:

  • Less activity than xlsx-populate
  • Smaller feature set
  • Limited community

Comparison Summary

Each library has trade-offs:

  • SheetJS: Fast and popular, but moved off standard npm/GitHub; styling requires paid Pro license
  • ExcelJS: Most full-featured with no paid license, but upstream abandoned (11+ months without updates)
  • xlsx-populate: Actively maintained with good documentation, but less feature-complete
  • excel4node: Spec-compliant and maintained, but limited feature set

No single option is clearly superior across all use cases. Selection depends on specific requirements (features needed, maintenance concerns, licensing preferences).

About This Fork (protobi/exceljs)

This fork represents an effort to maintain and improve ExcelJS following upstream abandonment.

What Has Been Done

Merged Upstream PRs:

  • 10 upstream PRs adopted with tests and documentation
  • Fixes for streaming, tables, images, dates, conditional formatting
  • See pullrequest_analysis.md for details

Issues Potentially Resolved:

  • Approximately 325 of 637 upstream issues may be resolved by merged PRs
  • Focus on high-impact bugs (file corruption, data loss, streaming issues)
  • See issues_triage_strategy.md for analysis

Active Maintenance:

  • Regular PR review and merging
  • Issue tracking and validation
  • Test coverage for adopted changes
  • Documentation updates

Why ExcelJS as a Base?

Technical Advantages:

  • Most full-featured Node.js Excel library
  • No paid license required (unlike SheetJS Pro)
  • MIT license (truly open source)
  • Large existing codebase and community

Market Context:

  • 2.9M weekly downloads (upstream)
  • Primary competitor (SheetJS) moved off npm/GitHub
  • Alternative libraries less feature-complete
  • Community seeking maintained alternative

Maintenance Strategy

Current Approach

  1. Selective PR Adoption

    • Review and merge well-tested upstream PRs
    • Priority on bug fixes over new features
    • Maintain test coverage for changes
    • Document adopted changes
  2. Issue Validation

    • Cross-reference upstream issues with merged PRs
    • Test and validate fixes
    • Document which issues are resolved
    • Focus on high-impact problems
  3. Scope Management

    • Not attempting to fix all 637 upstream issues
    • Focus on critical bugs (file corruption, data loss)
    • Performance improvements where proven
    • Maintain code quality over feature additions

Considerations for Users

When to Use This Fork:

  • Need features from stalled upstream PRs
  • Require fixes for critical bugs
  • Want actively maintained version
  • Need stable release cycle

When to Consider Alternatives:

  • Only need simple read/write operations → consider xlsx-populate
  • Need maximum performance for reading → consider SheetJS (with caveats)
  • Have specific feature needs → evaluate all options

Future Directions

Potential Next Steps:

  • Publish to npm for easier discovery
  • Establish regular release cadence
  • Build community contribution guidelines
  • Consider security audit of dependencies

Open Questions:

  • Long-term maintenance model
  • Community governance structure
  • Relationship with upstream if it resumes
  • Scope boundaries (what to maintain vs. not)

Summary

ExcelJS remains the most full-featured open-source Excel library for Node.js, despite upstream abandonment. This fork aims to provide continuity for users who depend on its capabilities, focusing on stability and bug fixes rather than extensive new development.

The ecosystem lacks a clearly superior alternative, making maintenance of ExcelJS valuable for the community. However, realistic scope management and sustainable maintenance practices are essential for long-term viability.