v1.1.0
- ToWriteOptions, so a workbook you read can be written back - by @productdevbook in https://github.com/productdevbook/hucre/issues/447 (43606)
- Read() and the CLI reach the formats the library has — closes #469 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/487 and https://github.com/productdevbook/hucre/issues/469 (67321)
- Streaming writers for ODS and NDJSON — refs #467 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/488 and https://github.com/productdevbook/hucre/issues/467 (0382e)
- A cell object may be written where a value goes — closes #433 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/562 and https://github.com/productdevbook/hucre/issues/433 (6de6d)
- The write side of #475 — text-format options, and a CLI --bom - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/563 and https://github.com/productdevbook/hucre/issues/475 (6ee69)
- api:
- One cell-utility surface, and ranges in either spelling — refs #474 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/482 and https://github.com/productdevbook/hucre/issues/474 (bd80f)
- builder:
- Reach the whole model, not eight fields of it - by @productdevbook in https://github.com/productdevbook/hucre/issues/461 (53bad)
- csv:
- Take bytes, honour the byte-order mark, accept an encoding - by @productdevbook in https://github.com/productdevbook/hucre/issues/476 (d8b06)
- docs:
- Derive the gap list from the specs instead of finding it one bug at a time - by @productdevbook in https://github.com/productdevbook/hucre/issues/544 (6b351)
- Cross the ODF half of the coverage report with the corpus too - by @productdevbook in https://github.com/productdevbook/hucre/issues/547 (90971)
- limits:
- Export the bounds, and let three of them move — closes #471 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/478 and https://github.com/productdevbook/hucre/issues/471 (874e6)
- ods:
- An incremental writer — closes #467 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/521 and https://github.com/productdevbook/hucre/issues/467 (b3a98)
- Carry the text format, which PARITY said could not be carried - by @productdevbook in https://github.com/productdevbook/hucre/issues/548 (3b866)
- An optional digit stays optional, and #,### keeps its separator - by @productdevbook in https://github.com/productdevbook/hucre/issues/549 (3ceaa)
- Carry the exponent's sign form and its interval - by @productdevbook in https://github.com/productdevbook/hucre/issues/550 (7d355)
- Carry named ranges, which the grammar unblocked - by @productdevbook in https://github.com/productdevbook/hucre/issues/557 (140de)
- A column's default cell style reaches its cells - by @productdevbook in https://github.com/productdevbook/hucre/issues/558 (ad0f4)
- read:
- Tell the caller what the reader had to drop - by @productdevbook in https://github.com/productdevbook/hucre/issues/462 (892b8)
- Three more onWarning sites — refs #474 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/486 and https://github.com/productdevbook/hucre/issues/474 (d9a42)
- sheet-ops:
- Move the references when rows and columns move - by @productdevbook in https://github.com/productdevbook/hucre/issues/458 (a5d32)
- types:
- Declare SpreadsheetStreamWriter and implement it — closes #468 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/479 and https://github.com/productdevbook/hucre/issues/468 (38b05)
- xlsx:
- Let streamed rows carry cell styles, heights and merges - by @jlucaso1 in https://github.com/productdevbook/hucre/issues/436 (bf618)
- Stream workbooks that hold more than one sheet - by @jlucaso1 and @productdevbook in https://github.com/productdevbook/hucre/issues/438 (629ac)
- Every OOXML paper size, by name or by code - by @productdevbook in https://github.com/productdevbook/hucre/issues/452 (b6788)
- Model the rest of CT_PageSetup — closes #470 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/480 and https://github.com/productdevbook/hucre/issues/470 (4d0a6)
- A sparse sheet has a way out — closes #501 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/513 and https://github.com/productdevbook/hucre/issues/501 (ee472)
- Resolve indexed colours against the palette, including an overridden one - by @productdevbook in https://github.com/productdevbook/hucre/issues/546 (56906)
- xml:
- A streaming writer — refs #467 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/515 and https://github.com/productdevbook/hucre/issues/467 (c020e)
- A streaming reader — closes #467 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/520 and https://github.com/productdevbook/hucre/issues/467 (d50b7)
- Take object-writer columns from every record, not just the first - by @productdevbook in https://github.com/productdevbook/hucre/issues/443 (258a8)
- Carry every field through cloneSheet and the worker serializer - by @productdevbook in https://github.com/productdevbook/hucre/issues/446 (f5981)
- Honour maxRows and range in readOds, and transformHeader everywhere - by @productdevbook in https://github.com/productdevbook/hucre/issues/451 (244b4)
- Stop losing a column to a repeated header - by @productdevbook in https://github.com/productdevbook/hucre/issues/455 (ded30)
- Three correctness items from the audit — refs #474 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/481 and https://github.com/productdevbook/hucre/issues/474 (166ca)
- csv:
- Render dates through the library's own formatter - by @productdevbook in https://github.com/productdevbook/hucre/issues/442 (e431a)
- Stop expanding a number into a different number — refs #474 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/485 and https://github.com/productdevbook/hucre/issues/474 (bb3e0)
- format:
- Take locale separators from Intl, not a four-entry table - by @productdevbook in https://github.com/productdevbook/hucre/issues/456 (39bfa)
- html:
- Read HTML, not XML — entities, <br>, raw text, tables, <tfoot> - by @productdevbook in https://github.com/productdevbook/hucre/issues/448 (a40c4)
- image:
- Decode base64 with atob, the Web API, and refuse invalid input - by @productdevbook in https://github.com/productdevbook/hucre/issues/537 (55a34)
- ods:
- Join a cell's paragraphs with a newline when streaming - by @productdevbook in https://github.com/productdevbook/hucre/issues/525 (7fffe)
- Write a carriage return as , not Excel's x000D - by @productdevbook in https://github.com/productdevbook/hucre/issues/526 and https://github.com/productdevbook/hucre/issues/13 (129a7)
- Carry a scientific number format, and say what still is not - by @productdevbook in https://github.com/productdevbook/hucre/issues/529 (7752f)
- A letter inside a quoted literal is text, not a date token - by @productdevbook in https://github.com/productdevbook/hucre/issues/533 (c2e7d)
- Mmm and mmmm are date formats - by @productdevbook in https://github.com/productdevbook/hucre/issues/534 (44c8a)
- Carry fractional seconds, and finish the number-format list - by @productdevbook in https://github.com/productdevbook/hucre/issues/535 (c5ca5)
- A LibreOffice row ends at its data, not column 16,384 - by @onmax in https://github.com/productdevbook/hucre/issues/545 (698fd)
- Write valid ODF, checked against the OASIS grammar - by @productdevbook in https://github.com/productdevbook/hucre/issues/552 (cb88b)
- The generator is hucre, not the name the project used to have - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/560 (58548)
- read:
- A part over the string ceiling gets a typed error — closes #503 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/514 and https://github.com/productdevbook/hucre/issues/503 (b723e)
- Recognise the string ceiling however the runtime reports it — closes #516 - by @erannave, Eran Nave and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/518 and https://github.com/productdevbook/hucre/issues/516 (05a73)
- A leading comment is not a format, and
[is not always JSON - by @productdevbook in https://github.com/productdevbook/hucre/issues/532 (6b957) - A worksheet part over the string ceiling now reads — closes #503 - by @erannave and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/536 and https://github.com/productdevbook/hucre/issues/503 (f141a)
- sheet-ops:
- SortRows moves what belongs to a row, findCells takes a RegExp - by @productdevbook in https://github.com/productdevbook/hucre/issues/449 (44719)
- A quoted sheet name survives inserting a row - by @productdevbook in https://github.com/productdevbook/hucre/issues/538 (67eb2)
- A reference pushed off the grid is #REF!, on both axes - by @productdevbook in https://github.com/productdevbook/hucre/issues/539 (2ffa7)
- xls,xlsb:
- Recognise every built-in date format id, not twelve of them - by @productdevbook in https://github.com/productdevbook/hucre/issues/444 (121a6)
- Rows come back as a dense rectangle — closes #494 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/509 and https://github.com/productdevbook/hucre/issues/494 (b4cb2)
- xlsb:
- A cell written with the short record form is still a cell - by @productdevbook in https://github.com/productdevbook/hucre/issues/541 (de748)
- xlsx:
- Snapshot a style when registering it, not at toXml time - by @jlucaso1 in https://github.com/productdevbook/hucre/issues/437 (5f354)
- Declare xml:space on inline strings, and stop copying the check - by @productdevbook in https://github.com/productdevbook/hucre/issues/441 (67fcb)
- A column's format and a sheet's defaults reach the file - by @productdevbook in https://github.com/productdevbook/hucre/issues/450 (20aa4)
- Keep the chart when a sheet also has images — closes #465 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/477 and https://github.com/productdevbook/hucre/issues/465 (50a1f)
- A chart sheet no longer makes the whole workbook unreadable — closes #499 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/504 and https://github.com/productdevbook/hucre/issues/499 (7d2b2)
- Read ISO-8601 date cells as dates — closes #496 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/505 and https://github.com/productdevbook/hucre/issues/496 (0e79d)
- Keep a cached formula result whatever its type — closes #497 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/506 and https://github.com/productdevbook/hucre/issues/497 (f7e2a)
- A style-only cell no longer widens the sheet — closes #492 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/512 and https://github.com/productdevbook/hucre/issues/492 (f2f1f)
- An empty inline string is a value, not a blank cell - by @productdevbook in https://github.com/productdevbook/hucre/issues/528 (f873d)
- Stop offering
sparsewhere it cannot work, and name the ceiling - by @productdevbook in https://github.com/productdevbook/hucre/issues/530 (2f7ca) - An ISO date cell is a Date in the streaming reader too - by @productdevbook in https://github.com/productdevbook/hucre/issues/543 (cba75)
- xml:
- Normalize literal line endings, as XML 1.0 requires — closes #493 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/507 and https://github.com/productdevbook/hucre/issues/493 (b6354)
- Accept the element names XML actually allows - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/564 (15b5c)
- zip:
- Refuse a duplicate part — which found saveXlsx emitting one - by @productdevbook in https://github.com/productdevbook/hucre/issues/460 (4b281)
- xlsx:
- Stop resolving the sheet grid twice per write - by @jlucaso1 in https://github.com/productdevbook/hucre/issues/434 (5b5ae)
- Reuse the cell format across cells that share a style object - by @jlucaso1 and @productdevbook in https://github.com/productdevbook/hucre/issues/435 (ee446)
- Emit the hot cell shapes directly — refs #472 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/491 and https://github.com/productdevbook/hucre/issues/472 (843b4)
- Share the derived date style — refs #472 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/517 and https://github.com/productdevbook/hucre/issues/472 (c7623)
hucre 1.1 is here thanks to the two sponsors backing this work:
| SMTP Labs smtp.dev |
DDLoop HQ ddloop.app |
Thank you @smtplabs and @ddloophq — and everyone else who sponsors the project.
v1.0.0
hucre 1.0 is here thanks to the two sponsors backing this work:
| SMTP Labs smtp.dev |
DDLoop HQ ddloop.app |
Thank you @smtplabs and @ddloophq — and everyone else who sponsors the project.
- Rename the error base, disambiguate ValidationError, drop dead API - by @productdevbook in https://github.com/productdevbook/hucre/issues/378 (7e354)
- Make headerRow mean one thing, drop inert ReadOptions - by @productdevbook in https://github.com/productdevbook/hucre/issues/379 (5dc36)
- One result shape for *Objects, one surface for the stream writers - by @productdevbook in https://github.com/productdevbook/hucre/issues/382 (4f89e)
- Add hucre/ooxml for the low-level part parsers - by @productdevbook in https://github.com/productdevbook/hucre/issues/386 (69ff9)
- csv: Constant-memory streaming writer; fix NDJSON stream retention - by @productdevbook in https://github.com/productdevbook/hucre/issues/351 (bfa74)
- xlsx: True constant-memory streaming writer — closes #347 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/348 and https://github.com/productdevbook/hucre/issues/347 (ef0d7)
- zip: ZIP64 read support, opt-in ZIP64 write - by @productdevbook in https://github.com/productdevbook/hucre/issues/350 (5a9eb)
- Bound the cell bounding box, not just each coordinate - by @productdevbook in https://github.com/productdevbook/hucre/issues/368 (2e0f9)
- Cap file-driven repeats and spans; surface streaming parse errors - by @productdevbook in https://github.com/productdevbook/hucre/issues/369 (04fa5)
- Make the format entry points export what they document - by @productdevbook in https://github.com/productdevbook/hucre/issues/370 (d75fe)
- Three bugs found while raising coverage on weak modules - by @productdevbook in https://github.com/productdevbook/hucre/issues/373 (cd75b)
- Validate sheet names and unrepresentable values on write - by @productdevbook in https://github.com/productdevbook/hucre/issues/374 (b1ab2)
- Input ceiling, zip-bomb caps on the streaming paths, and SAX cleanup - by @productdevbook in https://github.com/productdevbook/hucre/issues/377 (d858d)
- Add colIndex to readXml.transformValue, parse outlinePr - by @productdevbook in https://github.com/productdevbook/hucre/issues/385 (4dacc)
- Six defects found by the coverage pass - by @productdevbook in https://github.com/productdevbook/hucre/issues/395 (bfeea)
- Seven number-format defects - by @productdevbook in https://github.com/productdevbook/hucre/issues/396 (8f02d)
- Guard column indices before they become cell references — closes #364 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/398 and https://github.com/productdevbook/hucre/issues/364 (09648)
- Keep interior empty ODS rows, improper and zero-rounding fractions - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/401 (800d3)
- Remove the dead WriteSheet.threadedComments field, and the README lines that contradicted the code - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/413 (8a5a5)
- build:
- Annotate the exports oxc can't infer so their .d.mts ship - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/432 (aff80)
- cli:
- Bundle the CLI so the published binary runs — closes #357 - by @productdevbook in https://github.com/productdevbook/hucre/issues/358 and https://github.com/productdevbook/hucre/issues/357 (7990c)
- Make the CLI testable, and fix what that exposed — closes #399 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/400 and https://github.com/productdevbook/hucre/issues/399 (cb49b)
- csv:
- Align streamCsvRows with parseCsv — closes #353 - by @productdevbook in https://github.com/productdevbook/hucre/issues/354 and https://github.com/productdevbook/hucre/issues/353 (b71e3)
- Give the write options a way back in — closes #408 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/417 and https://github.com/productdevbook/hucre/issues/408 (faef3)
- format:
- Recognise single-placeholder fractions — closes #402 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/425 and https://github.com/productdevbook/hucre/issues/402 (3e959)
- Keep literal text in fraction formats, and stop reading a literal as one - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/430 (51526)
- html:
- Make fromHtml survive the markup it exists to read - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/422 (5f1ac)
- json:
- Give flatten an inverse, revive dates, and fix the workbook round trip - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/418 (a8775)
- ods:
- Valid cross-sheet formulas, rich text that survives, and dates that do not drift - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/420 (36052)
- test:
- Correct SheetImage shape in the media-collision test - by @productdevbook in https://github.com/productdevbook/hucre/issues/381 (ac70c)
- xlsb,cli:
- Read the workbook's own date system and its merges; open .xls/.xlsb from the CLI — closes #411 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/414 and https://github.com/productdevbook/hucre/issues/411 (8b789)
- xlsx:
- Bound <col> range expansion — closes #355 - by @productdevbook in https://github.com/productdevbook/hucre/issues/356 and https://github.com/productdevbook/hucre/issues/355 (6dee0)
- Stop saveXlsx dropping modeled sheet and workbook state - by @productdevbook in https://github.com/productdevbook/hucre/issues/366 (b44e3)
- Stop pageSetup silently disabling print gridlines - by @productdevbook in https://github.com/productdevbook/hucre/issues/372 (384d5)
- Preserve sheet background images through saveXlsx - by @productdevbook in https://github.com/productdevbook/hucre/issues/380 (8589a)
- Read back what the writer wrote — closes #407 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/421 and https://github.com/productdevbook/hucre/issues/407 (62360)
- Name background-image parts after the format they are — closes #427 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/428 and https://github.com/productdevbook/hucre/issues/427 (ef547)
- Move cm to <c> and ship the metadata part it indexes — closes #423 - by @productdevbook and Claude Opus 5 (1M context) in https://github.com/productdevbook/hucre/issues/431 and https://github.com/productdevbook/hucre/issues/423 (f926d)
v0.6.2
- Move citty and consola to devDependencies (Closes #345) - by @kobihikri in https://github.com/productdevbook/hucre/issues/346 and https://github.com/productdevbook/hucre/issues/345 (b8f68)
- Correct textarea closing tags in index.html - by @productdevbook (b09e7)
v0.6.1
- xls: Gate on BIFF version, reject BIFF5/7 with a clear error - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/341 (9b8c5)
- Reader parity, date/format correctness, CSV edge cases, CLI packaging - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/335 (43c11)
- Formula-ref conversion no longer corrupts function names/literals; markdown newline escaping - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/336 (372c8)
- ODS reader text loss (multi-paragraph + surrounded hyperlinks); JSON flatten proto data loss - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/337 (07591)
- XML parser strictness + XLS typed errors; fix #338 typecheck regression - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/339 and https://github.com/productdevbook/hucre/issues/338 (fb66f)
- CSV yes/no not boolean-coerced; replaceCells/sortRows keep cells Map in sync - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/340 (ed61f)
- html-import:
- Correct colspan fill after a rowspan-reserved column - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/344 (ab0d9)
- ods:
- Streaming reader text/sheet parity + repeat-count DoS caps - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/342 (51e4c)
- security:
- Harden against malicious file DoS + HTML export XSS - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/333 (ff1b3)
- xlsb:
- Wrap record parsing in ParseError for malformed input - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/343 (c2521)
- xlsx:
- Emit externalReferences before definedNames in workbook.xml - by @lrecknagel and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/332 (f0d7b)
- Writer spec-compliance — element ordering, control-char escaping, non-finite guard - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/334 (c03c7)
- zip:
- Detect ZIP64 archives in random-access reader and fail loudly - by @productdevbook and Claude Fable 5 in https://github.com/productdevbook/hucre/issues/338 (bb9f4)
v0.6.0
v0.6.0 closes out the entire remaining roadmap — every tracked issue is now done. This release adds three new input formats, true streaming, password protection, and full chart composition, all zero-dependency and built on web-standard APIs.
npm i hucre@0.6.0
Read and write encrypted .xlsx using ECMA-376 Agile encryption (the Excel 2010+ scheme) — on WebCrypto, so it stays zero-dependency everywhere (Node, Deno, Bun, Workers, browsers).
import { writeXlsx, readXlsx } from "hucre"
const encrypted = await writeXlsx({
sheets: [{ name: "Secret", rows: [["pin", 1234]] }],
encryption: { password: "hunter2" },
})
const wb = await readXlsx(encrypted, { password: "hunter2" })
Works through every read entry point (read / readObjects / streamXlsxRows); wrong password → DecryptionError, missing password → EncryptedFileError. → #329 (closes #156, #31)
Read .xlsb — the compact, fast binary Excel format — into the same model as .xlsx. Auto-detected.
import { read, readXlsb } from "hucre"
const wb = await readXlsb(bytes) // shared strings, RK/float numbers, dates, formulas…
const same = await read(bytes) // auto-detected
→ #330 (closes #154, #51)
Read legacy .xls (BIFF8 / OLE2) files — for the archives that never went away.
import { read, readXls } from "hucre"
const wb = await readXls(bytes) // SST (+CONTINUE), RK/MULRK, bools, errors, dates, merges
const same = await read(bytes) // auto-detected
→ #331 (closes #153, #30)
streamXlsxRows now accepts a ReadableStream and parses the ZIP front-to-back from local headers, piping the target worksheet straight into the SAX parser — the whole archive is never buffered.
const res = await fetch("https://example.com/huge.xlsx")
for await (const row of streamXlsxRows(res.body!)) {
console.log(row.index, row.values)
}
→ #328 (closes #77)
saveXlsx now serializes model charts (not just preserves originals), so you can clone template charts onto new/copied sheets and save them — copySheetToWorkbook carries charts across workbooks too.
import { openXlsx, getCharts, cloneChart, addChart, writeXlsx } from "hucre"
const template = await openXlsx(templateBytes)
const [lineChart] = getCharts(template)
const dashboard = { name: "Dashboard", rows: data }
addChart(dashboard, cloneChart(lineChart.chart, {
title: "Revenue",
series: [{ name: "Revenue", values: "B2:B13", categories: "A2:A13", color: "1070CA" }],
anchor: { from: { row: 14, col: 0 } },
}))
await writeXlsx({ sheets: [dashboard] })
→ #327 (closes #136)
Rich link values can sit directly inside data rows via the link() helper — no parallel cells map needed. #-prefixed targets become internal references.
import { link, writeXlsx } from "hucre"
await writeXlsx({
sheets: [{
name: "Links",
columns: [{ key: "name" }, { key: "site" }],
data: [
{ name: "Anthropic", site: link("Visit", "https://anthropic.com") },
{ name: "Jump", site: link("Go to Sheet2", "#Sheet2!A1", "internal ref") },
],
}],
})
→ #326 (closes #325)
Plus chart theme-color refs (schemeClr) and per-host line cap/compound. → #322
The encryption, XLSB, and XLS code follows the Microsoft specs and is covered by round-trip / builder tests, but hasn't yet been verified against a broad corpus of real Excel-produced files. Treat them as solid-but-new; please file issues with any file that doesn't read cleanly. XLSB/XLS are read-only in this release.
- #322 — chart theme colors (
schemeClr) + line cap/compound - #326 — inline hyperlinks in data rows
- #327 — chart composition through
saveXlsx(#136) - #328 — true streaming XLSX reader (#77)
- #329 — password-protected workbooks (#156, #31)
- #330 — XLSB read (#154, #51)
- #331 — XLS BIFF8 read (#153, #30)
Full changelog: https://github.com/productdevbook/hucre/compare/v0.5.1...v0.6.0
v0.5.1
- Explicit types for isolatedDeclarations — missing dist files - by @productdevbook and Claude Sonnet 4.6 in https://github.com/productdevbook/hucre/issues/324 (052eb)
- Restore insertColumns import removed by lint cleanup - by @productdevbook and Claude Sonnet 4.6 (bdd39)
v0.5.0
- Accept ReadableStream input on every reader entry point - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/189 (d4915)
- a11y:
- WCAG 2.1 AA helpers — audit, alt text, summary - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/180 (bffff)
- ods:
- NumFmt data styles — read, write - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/250 (467f6)
- web:
- Chart clone demo tab - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/274 (3714d)
- xlsx:
- External workbook references — read & roundtrip - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/181 (90e6b)
- Threaded comments — read & roundtrip (Excel 365+) - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/182 (30320)
- Slicers & timeline filters — read & roundtrip - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/183 (168ee)
- Pivot tables — read & roundtrip (Phase 1) - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/185 (a4fa4)
- WPS DISPIMG cell-embedded images — read & roundtrip - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/184 (74c1a)
- Charts — read & roundtrip preservation (Phase 1) - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/186 (4c5aa)
- Native chart creation — bar, column, line, pie, scatter, area (Phase 1) - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/187 (bffaa)
- Native pivot table creation — Phase 1 - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/188 (15482)
- Surface chart series metadata in parseChart - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/190 (c49be)
- CloneChart — bridge parseChart output into SheetChart - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/192 (11d40)
- StreamXlsxRows honors range and maxRows from ReadOptions - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/193 (0e24c)
- GetCharts / addChart helpers for chart composition - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/194 (2ee9a)
- Surface chart cell anchors on parsed charts - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/195 (0ac99)
- Surface legend position and bar grouping on parsed charts - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/196 (f7e8a)
- Chart axis titles — read, write, and clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/197 (a40fd)
- Chart data labels — read, write, and clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/198 (908a5)
- Chart axis gridlines — read, write, and clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/199 (2c528)
- Doughnut as a writable chart kind — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/200 (94291)
- Line and area chart stacking — read, write, and clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/201 (b93d2)
- Chart axis scale and number format — read, write, and clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/202 (76696)
- Chart first slice angle — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/203 (66e04)
- Bar/column gap width and overlap — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/204 (d13b6)
- Chart series smooth flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/205 (1f207)
- Chart series markers — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/206 (111df)
- Chart series line stroke — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/207 (85da4)
- Chart dispBlanksAs — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/208 (35201)
- Chart series invertIfNegative flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/209 (33d99)
- Chart varyColors flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/210 (9ea5d)
- Chart scatterStyle preset — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/211 (0c0cc)
- Chart plotVisOnly toggle — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/212 (8a90e)
- Chart axis tick marks and tick label position — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/213 (f03ab)
- Chart category-axis tick skips — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/214 (f5572)
- Chart axis reverse (orientation) — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/215 (fe11f)
- Chart roundedCorners frame toggle — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/216 (8bb24)
- Chart axis hidden flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/217 (fa907)
- Chart category-axis label offset — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/218 (a875f)
- Chart legend overlay flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/219 (ef422)
- Chart category-axis label alignment — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/220 (6f169)
- Chart pie/doughnut series explosion — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/221 (c35b4)
- Chart category-axis noMultiLvlLbl flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/222 (535fc)
- Chart data-labels showLegendKey flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/223 (db66e)
- Chart title overlay flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/224 (dbc6b)
- Chart axis crosses / crossesAt — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/225 (0b42b)
- Chart drop / hi-low lines — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/226 (84a97)
- Chart line up/down bars — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/227 (3677b)
- Chart built-in style preset — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/228 (24d53)
- Chart value-axis display units — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/229 (aacb8)
- Chart editing locale (lang) — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/230 (94d88)
- Chart axis crossBetween — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/231 (bf917)
- Chart date system (date1904) — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/232 (71698)
- Chart showDLblsOverMax — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/233 (97970)
- Chart data table — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/234 (dd628)
- Chart-space protection — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/235 (7f88c)
- Chart data labels number format — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/236 (9ade9)
- Chart-level line marker visibility — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/237 (125dc)
- Chart series lines — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/238 (8aed2)
- Chart autoTitleDeleted — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/239 (3011b)
- Chart legend entries — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/240 (47d2e)
- Chart 3-D view configuration — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/241 (36439)
- Chart axis custom display unit divisor — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/242 (5a7cb)
- Chart category-axis auto type detection — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/243 (d1018)
- Chart data labels showLeaderLines flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/244 (a2063)
- Chart axis tick-label rotation — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/245 (8d3ab)
- Chart upDownBars gap width — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/246 (c5316)
- Chart title rotation — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/247 (d027e)
- Chart axis title rotation — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/248 (b8c06)
- Chart title font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/251 (029a5)
- Chart title bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/252 (f5ab4)
- Chart title italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/253 (4258b)
- Chart title font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/254 (5ad2f)
- Chart axis title font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/255 (2cebf)
- Chart axis title bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/256 (7a491)
- Chart axis title italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/257 (4451b)
- Chart axis title font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/258 (c9c9b)
- Chart title strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/259 (7cb5b)
- Chart title underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/260 (7f57f)
- Chart axis title strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/261 (e0611)
- Chart axis title underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/262 (fbb8a)
- Chart axis tick-label font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/263 (790eb)
- Chart axis tick-label bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/264 (fe9ad)
- Chart axis tick-label italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/265 (5eb0a)
- Chart axis tick-label font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/266 (05631)
- Chart axis tick-label underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/267 (8bda3)
- Chart axis tick-label strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/268 (21659)
- Chart legend font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/269 (35f1b)
- Chart legend bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/270 (83c8c)
- Chart legend italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/271 (41fb9)
- Chart legend underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/272 (7aa69)
- Chart legend strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/273 (74ef2)
- Chart legend font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/275 (2d576)
- Chart data labels font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/276 (a745e)
- Chart data labels font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/277 (9ec6c)
- Chart data labels bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/278 (d84a1)
- Chart data labels italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/279 (c228c)
- Chart data labels underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/280 (8d06b)
- Chart data labels strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/281 (1cdac)
- Chart axis title font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/283 (c296f)
- Chart axis tick-label font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/284 (3a5f6)
- Chart title font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/282 (f4564)
- Chart legend font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/285 (dc199)
- Chart data labels font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/286 (a9c35)
- Chart axis title overlay flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/287 (ae598)
- Chart data-table font size — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/288 (9c43d)
- Chart data-table font color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/289 (53975)
- Chart data-table bold flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/290 (c090d)
- Chart data-table italic flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/291 (a13be)
- Chart data-table underline flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/292 (bccf5)
- Chart data-table strikethrough flag — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/293 (de91c)
- Chart data-table font family — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/294 (ed4e9)
- Chart floor thickness — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/295 (fcd56)
- Chart side-wall thickness — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/296 (644f0)
- Chart back-wall thickness — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/297 (2b7f4)
- Chart legend manual layout — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/298 (7927a)
- Chart plot-area manual layout — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/299 (12b6a)
- Chart title manual layout — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/300 (f7154)
- Chart axis-title manual layout — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/301 (cfe5d)
- Chart plot-area fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/302 (853c3)
- Chart legend fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/303 (10974)
- Chart title fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/304 (bec00)
- Chart-space fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/305 (70a45)
- Chart axis-title fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/306 (de0f9)
- Chart data-table fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/307 (1143d)
- Chart data-labels fill color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/308 (0fe24)
- Chart plot-area border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/309 (ccf00)
- Chart legend border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/310 (79153)
- Chart title border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/311 (c4582)
- Chart axis-title border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/312 (b3999)
- Chart data-table border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/313 (10992)
- Chart-space border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/314 (6b6f6)
- Chart data-labels border color — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/315 (990b3)
- Chart plot-area border width — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/316 (05246)
- Chart legend border width — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/317 (f70e3)
- Chart title border width — read, write, clone-through - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/318 (e15b5)
- Chart border-width / border-dash siblings + README cleanup - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/319 (19608)
- Chart trendlines, error bars, per-data-point, line cap/compound, legend rich, dispUnits label, bubble size, 3D shape - by @productdevbook and productdevbook in https://github.com/productdevbook/hucre/issues/321 (9a6f3)
- xlsx,ods:
- Detect password-protected workbooks and surface EncryptedFileError - by @productdevbook in https://github.com/productdevbook/hucre/issues/191 (f82c2)
v0.4.0
- ReadXlsxObjects / readOdsObjects shorthand - by @productdevbook in https://github.com/productdevbook/hucre/issues/178 (abf4f)
- ReadOptions.sheets accepts a predicate function - by @productdevbook in https://github.com/productdevbook/hucre/issues/172 (c5991)
- json:
- Hucre/json entry point — read & write JSON / NDJSON tabular data - by @productdevbook in https://github.com/productdevbook/hucre/issues/177 (2da0d)
- web:
- JSON / NDJSON / XML tabs + Export to NDJSON & XML - by @productdevbook (35eb3)
- xlsx:
- XlsxStreamWriter auto-splits at the Excel row limit - by @productdevbook in https://github.com/productdevbook/hucre/issues/170 (fe3e8)
- Excel 2024 native cell checkboxes - by @productdevbook in https://github.com/productdevbook/hucre/issues/157 (4bca9)
- xml:
- Hucre/xml entry point — read & write XML as tabular rows - by @productdevbook in https://github.com/productdevbook/hucre/issues/176 (e64ce)
v0.3.0
The schema-driven report builder feature introduced in v0.2.0 (#167) has been removed in this release.
fxmodule (25+ formula helpers:sum,safeDiv,iif,vlookup, etc.)- Style presets (
slate,ocean,forest,rose,minimal) andapplyPreset() pickColumns()/omitColumns()utilitiesSheetBuilder.objectRows()method- Extended
ColumnDeffields (value,transform,formula,summary,when,headerStyle,children,expand) ColumnSummary,ColumnCondition,StylePresettypes- Web playground "Report Builder" tab
- Excel table support (
WriteObjectsTableOption) from #168 XlsxStreamWriter.addObject()(simplified to key-only extraction)- All other v0.2.0 features (R1C1 notation, inline strings, CSV hardening, VBA injection, streaming SAX parser)
If you rely on schema-driven report building, we recommend xlsmith — a dedicated library for typed column definitions, formula helpers, conditional styles, and summary rows.
For basic writeObjects usage without extended column features, no changes are needed.
- Revert schema-driven report builder (#167) - by @productdevbook and Claude Opus 4.6 (1M context) in #171 (b5abf)
v0.2.0
- Schema-driven report builder - by @productdevbook and Claude Opus 4.6 (1M context) in https://github.com/productdevbook/hucre/issues/167 (fa28d)
- Excel table option, context param, streaming addObject - by @productdevbook and Claude Opus 4.6 (1M context) in https://github.com/productdevbook/hucre/issues/168 (7f0b0)
- R1C1 notation, inline strings, CSV hardening, VBA injection - by @productdevbook and Claude Opus 4.6 (1M context) in https://github.com/productdevbook/hucre/issues/169 (b9f83)
- xlsx: Stream worksheet XML via chunked SAX parser without full decompression buffering - by @ejirocodes and Claude Opus 4.6 (1M context) in https://github.com/productdevbook/hucre/issues/137 (3fa0c)