Skip to content

v0.3.0

Choose a tag to compare

@Nebu1eto Nebu1eto released this 10 Feb 01:54
· 85 commits to main since this release
Immutable release. Only release title and notes can be modified.
f1d2b72

What's Changed

No breaking changes. All existing APIs remain fully backward compatible. Code written for v0.2.0 works without modification.

New Features

  • Add batch write APIs: setCellValues(), setRowValues(), setSheetData() for efficient bulk cell writes with a single FFI call
  • Add binary buffer protocol for bulk cell data transfer: getRowsBuffer(), setSheetDataBuffer(), and SheetData class for O(1) random access
  • Add CompactCellRef.from_coordinates() for zero-allocation cell reference construction
  • Export new types: SheetData, CellValue, CellTypeName, JsCellEntry

Performance

  • 96% memory reduction for large sheet reads (100k rows: 361MB -> 13.5MB) via buffer-based FFI transfer
  • 48% faster StreamWriter by eliminating XML serialize-then-deserialize round-trip (direct struct construction)
  • Optimize XML Cell memory layout: CellTypeTag enum (1 byte) replaces Option<String>, CompactCellRef ([u8;10] inline) replaces heap-allocated String
  • Internal get_rows() returns u32 column numbers instead of String, eliminating ~1M String allocations per large sheet
  • O(log n) binary search for row/cell lookup replaces O(n) linear scan; HashMap-based O(1) sheet name index
  • SST optimization: pre-sized containers, owned String transfer, reduced allocations on load
  • Save path: fast compression (deflate level 1), pre-allocated serialize buffers
  • Read path: pre-allocated buffers using ZIP entry size hints

Bug Fixes

  • Fix cell.col not populated after applyStreamWriter(), causing binary search lookups to fail
  • Fix Biome formatting and folder ignore pattern issues

Build & Infra

  • Convert Node.js package from JavaScript to TypeScript (SWC, then migrated to tsdown)
  • Replace SWC + tsc pipeline with tsdown for single-step transpilation and .d.ts generation
  • Hide NativeWorkbook from public API; re-export SheetData types from package entry
  • Add release automation skill

Benchmarks

  • Add Rust native benchmark with multi-run statistics (median/min/max/p95/RSS)
  • Add Node.js comparison benchmark (SheetKit vs ExcelJS vs SheetJS)
  • Fix memory measurement to use RSS instead of heapUsed for accurate native memory tracking

Documentation

  • Add buffer transfer architecture docs (binary format spec, dense/sparse auto-switch, FFI strategy)
  • Update API reference with bulk data transfer methods and memory comparison tables
  • Update charts, images, conditional formatting, and encryption docs for accuracy

Full Changelog: v0.2.0...v0.3.0