Repository navigation
v0.3.0
·
85 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
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(), andSheetDataclass 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:
CellTypeTagenum (1 byte) replacesOption<String>,CompactCellRef([u8;10] inline) replaces heap-allocated String - Internal
get_rows()returnsu32column 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.colnot populated afterapplyStreamWriter(), 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.tsgeneration - Hide
NativeWorkbookfrom public API; re-exportSheetDatatypes 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