diff --git a/docz/docs/03-demos/06-desktop/02-nwjs.md b/docz/docs/03-demos/06-desktop/02-nwjs.md
index b4b0b16..13ff97e 100644
--- a/docz/docs/03-demos/06-desktop/02-nwjs.md
+++ b/docz/docs/03-demos/06-desktop/02-nwjs.md
@@ -113,10 +113,11 @@ This demo was tested in the following environments:
| OS and Version | Arch | NW.js | Date |
|:---------------|:-----|:---------|:-----------|
-| macOS 13.4.1 | x64 | `0.78.0` | 2023-07-27 |
-| Windows 10 | x64 | `0.78.0` | 2023-07-27 |
-| Windows 10 | ARM | `0.80.0` | 2023-09-25 |
-| Linux (HoloOS) | x64 | `0.78.0` | 2023-07-27 |
+| macOS 13.5.2 | x64 | `0.78.1` | 2023-09-27 |
+| macOS 13.5.2 | ARM | `0.78.1` | 2023-09-27 |
+| Windows 10 | x64 | `0.78.1` | 2023-09-27 |
+| Windows 11 | ARM | `0.78.1` | 2023-09-27 |
+| Linux (HoloOS) | x64 | `0.78.1` | 2023-09-27 |
:::
@@ -129,7 +130,7 @@ This demo was tested in the following environments:
"version": "0.0.0",
"main": "index.html",
"dependencies": {
- "nw": "~0.80.0",
+ "nw": "0.78.1",
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
}
}`}
@@ -150,7 +151,11 @@ In the terminal window, the download can be performed with:
curl -LO https://docs.sheetjs.com/nwjs/index.html
```
-3) Run `npm i` to install dependencies
+3) Install dependencies:
+
+```bash
+npm i
+```
4) To verify the app works, run in the test environment:
@@ -164,7 +169,7 @@ the file input element to select a spreadsheet and clicking the export button.
5) To build a standalone app, run the builder:
```bash
-npx -p nw-builder nwbuild --mode=build --glob=false --outDir=../out ./
+npx -p nw-builder nwbuild --mode=build --version=0.78.1 --glob=false --outDir=../out ./
```
-This will generate the standalone app in the `..\build\sheetjs-nwjs\` folder.
\ No newline at end of file
+This will generate the standalone app in the `..\out\` folder.
\ No newline at end of file
diff --git a/docz/docs/03-demos/06-desktop/04-tauri.md b/docz/docs/03-demos/06-desktop/04-tauri.md
index cb1824e..c2fc0dd 100644
--- a/docz/docs/03-demos/06-desktop/04-tauri.md
+++ b/docz/docs/03-demos/06-desktop/04-tauri.md
@@ -260,7 +260,9 @@ This demo was tested in the following environments:
| macOS 13.4.0 | x64 | `v1.4.0` | 2023-06-25 |
| macOS 13.4.1 | ARM | `v1.4.0` | 2023-06-29 |
| Windows 10 | x64 | `v1.4.1` | 2023-07-30 |
+| Windows 11 | ARM | `v1.4.1` | 2023-09-26 |
| Linux (HoloOS) | x64 | `v1.4.1` | 2023-07-30 |
+| Linux (Debian) | ARM | `v1.4.1` | 2023-09-26 |
:::
diff --git a/docz/docs/03-demos/06-desktop/09-cli.md b/docz/docs/03-demos/06-desktop/09-cli.md
index 41e933f..b982f2c 100644
--- a/docz/docs/03-demos/06-desktop/09-cli.md
+++ b/docz/docs/03-demos/06-desktop/09-cli.md
@@ -345,6 +345,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `1.33.2` | 2023-05-08 |
| `darwin-arm` | `1.34.1` | 2023-06-05 |
| `win10-x64` | `1.33.2` | 2023-05-08 |
+| `win11-arm` | `1.37.0` | 2023-09-26 |
| `linux-x64` | `1.33.2` | 2023-05-08 |
| `linux-arm` | `1.36.3` | 2023-08-30 |
diff --git a/docz/docs/03-demos/42-engines/01_duktape.md b/docz/docs/03-demos/42-engines/01-duktape.md
similarity index 94%
rename from docz/docs/03-demos/42-engines/01_duktape.md
rename to docz/docs/03-demos/42-engines/01-duktape.md
index bde8d4f..d5a29da 100644
--- a/docz/docs/03-demos/42-engines/01_duktape.md
+++ b/docz/docs/03-demos/42-engines/01-duktape.md
@@ -5,6 +5,8 @@ pagination_next: solutions/input
---
import current from '/version.js';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
Duktape is an embeddable JS engine written in C. It has been ported to a number
@@ -120,6 +122,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `2.7.0` | 2023-07-24 |
| `darwin-arm` | `2.7.0` | 2023-06-05 |
| `win10-x64` | `2.7.0` | 2023-07-24 |
+| `win11-arm` | `2.7.0` | 2023-09-26 |
| `linux-x64` | `2.7.0` | 2023-09-22 |
| `linux-arm` | `2.7.0` | 2023-08-30 |
@@ -163,16 +166,42 @@ curl -LO https://docs.sheetjs.com/duk/sheetjs.duk.c
3) Compile standalone `sheetjs.duk` binary
+
+
+
```bash
gcc -std=c99 -Wall -osheetjs.duk sheetjs.duk.c duktape.c -lm
```
+
+
+
+```powershell
+cl sheetjs.duk.c duktape.c /I .\
+```
+
+
+
+
4) Run the demo:
+
+
+
```bash
./sheetjs.duk pres.numbers
```
+
+
+
+```bash
+.\sheetjs.duk.exe pres.numbers
+```
+
+
+
+
If the program succeeded, the CSV contents will be printed to console and the
file `sheetjsw.xlsb` will be created. That file can be opened with Excel.
diff --git a/docz/docs/03-demos/42-engines/02_v8.md b/docz/docs/03-demos/42-engines/02-v8.md
similarity index 91%
rename from docz/docs/03-demos/42-engines/02_v8.md
rename to docz/docs/03-demos/42-engines/02-v8.md
index dda55ae..1260798 100644
--- a/docz/docs/03-demos/42-engines/02_v8.md
+++ b/docz/docs/03-demos/42-engines/02-v8.md
@@ -128,6 +128,7 @@ This demo was tested in the following deployments:
| `11.8.82` | `darwin-arm` | macOS 13.5.1 | `clang 14.0.3` | 2023-08-26 |
| `11.8.82` | `win10-x64` | Windows 10 | `CL 19.37.32822` | 2023-08-26 |
| `11.8.82` | `linux-x64` | HoloOS 3.4.8 | `gcc 12.2.0` | 2023-08-26 |
+| `11.8.82` | `linux-arm` | Debian 11 | `gcc 10.2.1` | 2023-09-26 |
:::
@@ -435,7 +436,7 @@ fatal: cannot set up tracking information; starting point 'refs/tags/11.8.82' is
6) Build the static library.
-
+
```bash
tools/dev/v8gen.py x64.release.sample
@@ -443,11 +444,38 @@ ninja -C out.gn/x64.release.sample v8_monolith
```
-
+
```bash
tools/dev/v8gen.py arm64.release.sample
ninja -C out.gn/arm64.release.sample v8_monolith
+```
+
+
+
+
+```bash
+tools/dev/v8gen.py x64.release.sample
+ninja -C out.gn/x64.release.sample v8_monolith
+```
+
+
+
+
+```bash
+tools/dev/v8gen.py arm64.release.sample
+```
+
+Append the following line to `out.gn/arm64.release.sample/args.gn`:
+
+```text title="out.gn/arm64.release.sample/args.gn (add to file)"
+is_clang = false
+```
+
+Run the build:
+
+```bash
+ninja -C out.gn/arm64.release.sample v8_monolith
```
@@ -504,7 +532,7 @@ treat_warnings_as_errors = false
7) Ensure the sample `hello-world` compiles and runs:
-
+
```bash
g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
@@ -514,7 +542,27 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith
```
-
+
+
+```bash
+g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
+ -lv8_libbase -lv8_libplatform -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \
+ -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX
+./hello_world
+```
+
+
+
+
+```bash
+g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
+ -lv8_libbase -lv8_libplatform -ldl -Lout.gn/x64.release.sample/obj/ -pthread \
+ -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX
+./hello_world
+```
+
+
+
```bash
g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
@@ -572,7 +620,7 @@ cp ~/dev/v8/v8/samples/hello-world.cc .
10) Create symbolic links to the `include` headers and `obj` library folders:
-
+
```bash
ln -s ~/dev/v8/v8/include
@@ -580,7 +628,23 @@ ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj
```
-
+
+
+```bash
+ln -s ~/dev/v8/v8/include
+ln -s ~/dev/v8/v8/out.gn/arm64.release.sample/obj
+```
+
+
+
+
+```bash
+ln -s ~/dev/v8/v8/include
+ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj
+```
+
+
+
```bash
ln -s ~/dev/v8/v8/include
diff --git a/docz/docs/03-demos/42-engines/03_rhino.md b/docz/docs/03-demos/42-engines/03-rhino.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/03_rhino.md
rename to docz/docs/03-demos/42-engines/03-rhino.md
diff --git a/docz/docs/03-demos/42-engines/04_jsc.md b/docz/docs/03-demos/42-engines/04-jsc.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/04_jsc.md
rename to docz/docs/03-demos/42-engines/04-jsc.md
diff --git a/docz/docs/03-demos/42-engines/05-jint.md b/docz/docs/03-demos/42-engines/05-jint.md
index cfffdaa..ee91d8e 100644
--- a/docz/docs/03-demos/42-engines/05-jint.md
+++ b/docz/docs/03-demos/42-engines/05-jint.md
@@ -164,16 +164,17 @@ This demo was tested in the following deployments:
| Architecture | Jint Version | Date |
|:-------------|:------------------|:-----------|
| `darwin-x64` | `3.0.0-beta-2051` | 2023-09-16 |
+| `darwin-arm` | `3.0.0-beta-2051` | 2023-09-26 |
| `win10-x64` | `3.0.0-beta-2051` | 2023-09-16 |
+| `win11-arm` | `3.0.0-beta-2051` | 2023-09-26 |
| `linux-x64` | `3.0.0-beta-2051` | 2023-09-22 |
+| `linux-arm` | `3.0.0-beta-2051` | 2023-09-26 |
:::
-0) Install .NET[^5]
-
### Platform Configuration
-1) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`.
+0) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`.
How to disable telemetry (click to hide)
@@ -206,6 +207,20 @@ Click "OK" in each window (3 windows) and restart your computer.
+1) Install .NET
+
+Installation Notes (click to show)
+
+For macOS x64 and ARM64, install with Homebrew: `brew install dotnet@6`
+
+For Steam Deck Holo and other Arch Linux x64 distributions, the `dotnet-sdk` and
+`dotnet-runtime` packages should be installed using `pacman`.
+
+ is the official source
+for Windows and ARM64 Linux versions.
+
+
+
2) Open a new Terminal window in macOS or PowerShell window in Windows.
### Base Project
@@ -213,7 +228,6 @@ Click "OK" in each window (3 windows) and restart your computer.
3) Create a new folder `SheetJSJint` and a new project using the `dotnet` tool:
```bash
-rm -rf SheetJSJint
mkdir SheetJSJint
cd SheetJSJint
dotnet new console --framework net6.0
@@ -331,14 +345,17 @@ If the `using Jint;` directive is omitted, the build will fail:
### Standalone Application
-8) Find the runtime identifier (RID) for your platform[^6]. The RID values for
+8) Find the runtime identifier (RID) for your platform[^5]. The RID values for
tested platforms are listed below:
-| Platform | RID |
-|:-----------------|:------------|
-| Intel Mac | `osx-x64` |
-| Windows 10 (x64) | `win10-x64` |
-| Linux (x64) | `linux-x64` |
+| Platform | RID |
+|:-----------------|:--------------|
+| Intel Mac | `osx-x64` |
+| ARM64 Mac | `osx-arm64` |
+| Windows 10 (x64) | `win10-x64` |
+| Windows 11 (ARM) | `win-arm64` |
+| Linux (x64) | `linux-x64` |
+| Linux (ARM) | `linux-arm64` |
9) Build the standalone application. Replace `$RID` with the real value in:
@@ -355,6 +372,15 @@ For Intel Mac, the RID is `osx-x64` and the command is
```bash
dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
+```
+
+
+
+
+For Apple Silicon, the RID is `osx-arm64` and the command is
+
+```bash
+dotnet publish -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
```
@@ -364,6 +390,15 @@ For x64 Linux, the RID is `linux-x64` and the command is
```bash
dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
+```
+
+
+
+
+For x64 Linux, the RID is `linux-arm64` and the command is
+
+```bash
+dotnet publish -c Release -r linux-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
```
@@ -373,6 +408,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is:
```powershell
dotnet publish -c Release -r win10-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
+```
+
+
+
+
+For Windows 11 ARM64, the RID is `win-arm64` and the command is:
+
+```powershell
+dotnet publish -c Release -r win-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true
```
@@ -394,6 +438,15 @@ For Intel Mac, the RID is `osx-x64` and the command is:
```bash
cp bin/Release/net6.0/osx-x64/publish/SheetJSJint .
+```
+
+
+
+
+For Apple Silicon, the RID is `osx-arm64` and the command is:
+
+```bash
+cp bin/Release/net6.0/osx-arm64/publish/SheetJSJint .
```
@@ -403,6 +456,15 @@ For x64 Linux, the RID is `linux-x64` and the command is
```bash
cp bin/Release/net6.0/linux-x64/publish/SheetJSJint .
+```
+
+
+
+
+For x64 Linux, the RID is `linux-arm64` and the command is
+
+```bash
+cp bin/Release/net6.0/linux-arm64/publish/SheetJSJint .
```
@@ -412,6 +474,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is:
```powershell
copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe .
+```
+
+
+
+
+For Windows 11 ARM64, the RID is `win-arm64` and the command is:
+
+```powershell
+copy .\bin\Release\net6.0\win-arm64\publish\SheetJSJint.exe .
```
@@ -442,5 +513,4 @@ copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe .
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options)
[^3]: See [`write` in "Writing Files"](/docs/api/write-options)
[^4]: See ["Supported Output Formats" in "Writing Files"](/docs/api/write-options#supported-output-formats) for details on `bookType`
-[^5]: At the time of writing, is the official endpoint. For Steam Deck Holo and other Arch Linux distributions, the `dotnet-sdk` and `dotnet-runtime` packages should be installed using `pacman`.
-[^6]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation
\ No newline at end of file
+[^5]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation
\ No newline at end of file
diff --git a/docz/docs/03-demos/42-engines/06_goja.md b/docz/docs/03-demos/42-engines/06-goja.md
similarity index 98%
rename from docz/docs/03-demos/42-engines/06_goja.md
rename to docz/docs/03-demos/42-engines/06-goja.md
index bc0ad59..13a6f39 100644
--- a/docz/docs/03-demos/42-engines/06_goja.md
+++ b/docz/docs/03-demos/42-engines/06-goja.md
@@ -97,7 +97,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `28ee0ee` | `1.19.3` | 2023-06-05 |
| `darwin-arm` | `28ee0ee` | `1.20.4` | 2023-06-05 |
| `win10-x64` | `81d7606` | `1.20.2` | 2023-08-27 |
-| `win10-arm` | `fc55792` | `1.21.1` | 2023-09-25 |
+| `win11-arm` | `fc55792` | `1.21.1` | 2023-09-25 |
| `linux-x64` | `81d7606` | `1.21.0` | 2023-08-27 |
| `linux-arm` | `3dbe69d` | `1.21.1` | 2023-08-30 |
diff --git a/docz/docs/03-demos/42-engines/07_nashorn.md b/docz/docs/03-demos/42-engines/07-nashorn.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/07_nashorn.md
rename to docz/docs/03-demos/42-engines/07-nashorn.md
diff --git a/docz/docs/03-demos/42-engines/08_quickjs.md b/docz/docs/03-demos/42-engines/08-quickjs.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/08_quickjs.md
rename to docz/docs/03-demos/42-engines/08-quickjs.md
diff --git a/docz/docs/03-demos/42-engines/09_hermes.md b/docz/docs/03-demos/42-engines/09-hermes.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/09_hermes.md
rename to docz/docs/03-demos/42-engines/09-hermes.md
diff --git a/docz/docs/03-demos/42-engines/15_rb.md b/docz/docs/03-demos/42-engines/15-rb.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/15_rb.md
rename to docz/docs/03-demos/42-engines/15-rb.md
diff --git a/docz/docs/03-demos/42-engines/20_chakra.md b/docz/docs/03-demos/42-engines/20-chakra.md
similarity index 98%
rename from docz/docs/03-demos/42-engines/20_chakra.md
rename to docz/docs/03-demos/42-engines/20-chakra.md
index 7ed7750..fc4f211 100644
--- a/docz/docs/03-demos/42-engines/20_chakra.md
+++ b/docz/docs/03-demos/42-engines/20-chakra.md
@@ -137,7 +137,7 @@ brew install icu4c cmake
```
-
+
```bash
brew install icu4c cmake
@@ -201,7 +201,7 @@ cd ..
:::
-
+
:::info pass
diff --git a/docz/docs/03-demos/42-engines/21_boa.md b/docz/docs/03-demos/42-engines/21-boa.md
similarity index 99%
rename from docz/docs/03-demos/42-engines/21_boa.md
rename to docz/docs/03-demos/42-engines/21-boa.md
index 5010d98..f23f94c 100644
--- a/docz/docs/03-demos/42-engines/21_boa.md
+++ b/docz/docs/03-demos/42-engines/21-boa.md
@@ -117,6 +117,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | 2023-08-31 |
| `darwin-arm` | 2023-07-05 |
| `win10-x64` | 2023-08-31 |
+| `win11-arm` | 2023-09-26 |
| `linux-x64` | 2023-07-05 |
| `linux-arm` | 2023-08-30 |
diff --git a/docz/docs/03-demos/42-engines/22_perl.md b/docz/docs/03-demos/42-engines/22-perl.md
similarity index 100%
rename from docz/docs/03-demos/42-engines/22_perl.md
rename to docz/docs/03-demos/42-engines/22-perl.md
diff --git a/docz/docs/09-miscellany/02-errors.md b/docz/docs/09-miscellany/02-errors.md
index 6858458..2f5cfe5 100644
--- a/docz/docs/09-miscellany/02-errors.md
+++ b/docz/docs/09-miscellany/02-errors.md
@@ -78,20 +78,7 @@ further detail.
Browsers have strict memory limits and large spreadsheets can exceed the limits.
-Technical Limitations (click to show)
-
-V8 (Node/Chrome) have a maximum string length that has changed over the years.
-Node 16 and Chrome 106 enforce a limit of 536870888 characters. This issue will
-manifest with error messages such as `Invalid string length`.
-
-There are memory bottlenecks associated with string addresses. A number of bugs
-have been reported to the V8 and Chromium projects on this subject. While those
-bugs are being resolved, for sheets containing hundreds of thousands of rows,
-dense mode worksheets should be used.
-
-
-
-The API functions support [dense mode](/docs/csf/sheet#dense-mode):
+For large worksheets, use [dense worksheets](/docs/csf/sheet#dense-mode):
```js
var wb = XLSX.read(data, {dense: true}); // creates a dense-mode sheet
@@ -103,6 +90,48 @@ server with NodeJS or some other server-side technology.
If the files are small, please [report to our issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues)
+:::info pass
+
+Sparse worksheets historically were more performant in small sheets. Due to a
+[2014 bug in V8](https://bugs.chromium.org/p/v8/issues/detail?id=3175) and a
+[2017 regression in V8](https://bugs.chromium.org/p/v8/issues/detail?id=6696)
+(the JavaScript engine powering Node and Chrome), large sparse worksheets will
+crash the web browser.
+
+:::
+
+#### "Invalid String Length" or ERR_STRING_TOO_LONG
+
+V8 (Node/Chrome) have a maximum string length that has changed over the years.
+Node 16 and Chrome 106 enforce a limit of `0x1fffffe8` (536870888) characters.
+[A 2017 V8 discussion](https://bugs.chromium.org/p/v8/issues/detail?id=6148)
+explains some of the background behind the V8 decision.
+
+XLSX and ODS are ZIP-based formats that store worksheets in XML entries. In
+worksheets with over 100M cells, the XML strings may exceed the V8 limit!
+
+Depending on the environment, this issue may result in missing worksheets; error
+messages such as `Invalid string length`, `ERR_STRING_TOO_LONG`, or
+`Cannot create a string longer than 0x1fffffe8 characters`; or browser crashes.
+
+A number of bugs have been reported to the V8 and Chromium projects on this
+subject, some of which have been open for nearly a decade.
+
+Please [leave a note](https://git.sheetjs.com/sheetjs/sheetjs/issues) including
+worksheet sizes (number of rows/columns and file size) and environment (browser
+or NodeJS or other platform).
+
+:::tip pass
+
+The "Excel Binary Workbook" XLSB format uses a binary representation. The XLSB
+parser is not affected by this issue.
+
+XLSB files are typically smaller than equivalent XLSX files. There are other
+Excel performance benefits to XLSB, so it is strongly recommended to use XLSB
+when possible.
+
+:::
+
#### Invalid HTML: could not find table
Data can be fetched and parsed by the library: