Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Changelog

ABCrimson edited this page Mar 3, 2026 · 18 revisions

Changelog

v0.3.0 — Barcode & QR Code Generation (2026年03月02日)

Pure TypeScript barcode/QR generation with 9 formats, PNG renderer, and XLSX embedding. Full codebase audit with critical bug fixes. 437 tests (157 Rust + 280 TypeScript).

Barcode & QR Generation

  • 9 barcode formats — Code 39, Code 128, EAN-13, UPC-A, ITF-14, GS1-128, QR Code, Data Matrix, PDF417
  • renderBarcodePNG() — pure TypeScript PNG renderer (no external dependencies)
  • generateBarcode() — one-call XLSX embedding with drawing XML and relationships
  • generateDrawingXml() / generateDrawingRels() — low-level drawing XML generation
  • Multi-image accumulation — multiple images per sheet without data loss

Critical Bug Fixes

  • Unicode panicvalidate.rs byte-indexing multi-byte characters → chars().take(n).collect()
  • Multi-image data lossaddImage() now accumulates via Maps instead of overwriting drawing XML
  • SST insert performance — Entry API replaces double hash lookup in shared_strings.rs
  • Comments author dedup — Entry::Vacant pattern eliminates double lookup in comments.rs
  • DXF diagonal attrs — eliminated redundant UTF-8 decoding in styles.rs

Performance

  • GF(256) lookup tables hoisted to module-level constants (Data Matrix encoder)
  • Array.prototype.at(-1) for O(1) sorted-array access (utils.ts, style-builder.ts)
  • split_once(':') replaces split(':').collect::<Vec<>>() in validators
  • Single TextEncoder instance in QR encoder (was creating two)

Documentation

  • All docs updated for v0.3.0 accuracy
  • Barcode generation examples in playground
  • Migration guides updated with barcode comparison

v0.2.0 — Browser & CDN Distribution (2026年03月02日)

Browser-first release with IIFE bundle, CDN distribution, Web Worker support, and framework examples. 419 tests (171 Rust + 248 TypeScript).

Browser Bundle

  • IIFE build — self-contained modern-xlsx.min.js (~29 KB) exposing window.ModernXlsx
  • CDN distribution — available on jsDelivr and unpkg, no bundler required
  • detectWasmUrl() — auto-detection of WASM binary URL from document.currentScript.src
  • initWasmSync(module) — synchronous WASM initialization from pre-loaded buffer
  • ensureReady() — lazy auto-initialization on first use (cached Promise pattern)
  • Source maps.map files generated for all build outputs (ESM, IIFE, Worker)

Web Worker

  • createXlsxWorker() — off-thread XLSX read/write via Web Worker message passing
  • modern-xlsx.worker.js — dedicated worker script with auto WASM init
  • Transferable buffers — zero-copy transfer of Uint8Array results back to main thread

Build Pipeline

  • tsdown 3-build config — ESM (primary), IIFE (browser), Worker (off-thread)
  • Package exports"." (ESM), "./browser" (IIFE), "./worker" (Worker script)
  • browser / unpkg / jsdelivr fields in package.json for CDN auto-resolution

Playground

  • Interactive browser playground at docs/site/playground.html
  • 6 built-in examples: Hello World, Styled Workbook, Read & Inspect, Batch Data, JSON to Sheet, Formulas & Dates
  • Live WASM status indicator, Ctrl+Enter execution, download integration

Framework Examples

  • React — hooks-based integration with useEffect WASM init
  • Vue 3 — Composition API with onMounted WASM init
  • Svelte 5$effect rune-based WASM init
  • Angular — service-based WASM init with standalone components

Edge Runtime Examples

  • Cloudflare Workers — XLSX generation at the edge
  • Deno Deploy — server-side XLSX with Deno-native imports
  • Service Worker — offline XLSX generation with custom WASM URL

v0.1.9 — Hardening & Performance Audit (2026年03月02日)

Complete 0.1.x hardening series. 419 tests (171 Rust + 248 TypeScript).

Tests (+77 new)

  • Style roundtrip: gradient fills, diagonal borders, DXF styles, cell named styles
  • Formula metadata: array formulas, shared formulas, formulaRef, sharedIndex
  • Feature roundtrip: hyperlinks, comments, data validation, conditional formatting, sheet protection, page setup
  • Edge cases: empty workbooks, malformed XML, boundary values
  • Error handling: corrupted files, invalid inputs, graceful degradation
  • Streaming & benchmarks: 100K row read/write, parallel parsing, buffer scaling
  • Utilities: cell refs, dates, format codes, CSV/HTML/JSON conversion

Performance (Rust Core)

  • push_entity() — zero-allocation XML entity resolution
  • Vec::with_capacity() on all XML parse buffers (11 sites)
  • from_utf8().unwrap_or_default() replaces from_utf8_lossy() (6 sites)
  • entries.remove() in StreamingReader — moves data instead of cloning
  • drain() in collect_preserved() — moves preserved entries
  • #[non_exhaustive] on error enum

TypeScript

  • Module-scoped CELL_REF_RE regex (hoisted from hot loop)
  • isolatedDeclarations: true in tsconfig
  • Shared WASM init via __tests__/setup.ts

Documentation

  • Migration guide: SheetJS
  • Migration guide: ExcelJS
  • Usage examples cookbook
  • Release roadmap

CI

  • GitHub Actions pinned to stable versions
  • Rust toolchain: @stable
  • Node.js engine: >=24.0.0

v0.1.0 — Initial Release (2026年03月02日)

First public release.

Features

  • Full XLSX read/write with Rust WASM core
  • Cell styling — fonts, fills, borders, alignment, number formats via StyleBuilder
  • Data validation — list, number, date, text length, custom formula
  • Conditional formatting — color scales, data bars, icon sets, formula-based rules
  • Frozen panes, hyperlinks, comments, sheet protection, page setup
  • Rich text with RichTextBuilder
  • Named ranges, document properties, workbook views, calc chain
  • Streaming reader/writer for large files
  • Parallel sheet parsing (rayon)
  • Cell reference utilities, date utilities, format utilities
  • Sheet conversion utilities (JSON, CSV, HTML, array-of-arrays)
  • Browser Blob download support
  • 342 tests (170 Rust + 172 TypeScript)

Performance

Operation modern-xlsx SheetJS CE Factor
Read 100K 1,155 ms 4,927 ms 4.3x faster
Write 100K 5,048 ms 5,048 ms 1.0x
sheetToJson 10K 54 ms 103 ms 1.9x faster

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /