diff --git a/docz/docs/03-demos/02-frontend/09-blazor.md b/docz/docs/03-demos/02-frontend/09-blazor.md
index f1fb5f6..a772154 100644
--- a/docz/docs/03-demos/02-frontend/09-blazor.md
+++ b/docz/docs/03-demos/02-frontend/09-blazor.md
@@ -104,7 +104,7 @@ It should be injected at the top of relevant Razor component scripts:
When exporting a file with the SheetJS `writeFile` method[^2], browser APIs do
not provide success or error feedback. As a result, this demo invokes functions
-using the `InvokeVoidAsync` static method[^3].
+using the `InvokeVoidAsync` static method[^3].
The following C# method will invoke the `export_method` method in the browser:
diff --git a/docz/docs/03-demos/02-frontend/10-openui5.md b/docz/docs/03-demos/02-frontend/10-openui5.md
index 2372144..6d81c1c 100644
--- a/docz/docs/03-demos/02-frontend/10-openui5.md
+++ b/docz/docs/03-demos/02-frontend/10-openui5.md
@@ -260,7 +260,7 @@ flowchart LR
linkStyle 1,2,3 color:blue,stroke:blue;
```
-Here is a sample method for exporting data from the UI5 `JSONModel` to XLSX:
+Here is a sample method for exporting data from the UI5 `JSONModel` to XLSX:
```js title="Fetch data from JSONModel and export to XLSX"
/* get model data and export to XLSX */
diff --git a/docz/docs/03-demos/03-net/03-server/04-drash.md b/docz/docs/03-demos/03-net/03-server/04-drash.md
index 68f23ba..888f3bb 100644
--- a/docz/docs/03-demos/03-net/03-server/04-drash.md
+++ b/docz/docs/03-demos/03-net/03-server/04-drash.md
@@ -26,8 +26,8 @@ This demo was tested in the following deployments:
| Drash | Deno | Date |
|:--------|:-------|:-----------|
-| `2.8.1` | 1.44.1 | 2024-12-19 |
-| `2.8.1` | 2.1.4 | 2024-12-19 |
+| `2.8.1` | 1.46.0 | 2025-05-21 |
+| `2.8.1` | 2.3.3 | 2025-05-21 |
:::
@@ -133,7 +133,7 @@ deno run --allow-net SheetJSDrash.ts
Deno 2 requires the `--allow-import` entitlement:
```bash
-deno run --allow-net --allow-write --allow-import SheetJSDenoDOM.ts
+deno run --allow-net --allow-write --allow-import SheetJSDrash.ts
```
:::
@@ -142,9 +142,10 @@ deno run --allow-net --allow-write --allow-import SheetJSDenoDOM.ts
4) Open `http://localhost:7262/` in your browser.
-Click "Choose File" and select `pres.numbers`. Then click "Submit"
+Click "Choose File" and select `pres.numbers` from the Downloads folder.
-The page should show the contents of the file as an HTML table.
+Click "Submit" to make a request to the Drash server. The response should show
+the contents of the file as an HTML table.
5) Open `http://localhost:7262/export` in your browser.
diff --git a/docz/docs/03-demos/03-net/03-server/07-hono.md b/docz/docs/03-demos/03-net/03-server/07-hono.md
index 982e721..27b4bc8 100644
--- a/docz/docs/03-demos/03-net/03-server/07-hono.md
+++ b/docz/docs/03-demos/03-net/03-server/07-hono.md
@@ -23,9 +23,11 @@ The ["Complete Example"](#complete-example) section includes a complete server.
This demo was tested in the following deployments:
-| Platform | HonoJS | Date |
-|:---------------|:---------|:-----------|
-| BunJS `1.1.40` | `4.6.14` | 2024-12-19 |
+| Platform | HonoJS | Date |
+|:---------------|:----------|:-----------|
+| BunJS `1.2.13` | `2.7.8` | 2025-05-21 |
+| BunJS `1.2.13` | `3.12.12` | 2025-05-21 |
+| BunJS `1.2.13` | `4.7.10` | 2025-05-21 |
:::
diff --git a/docz/docs/03-demos/03-net/03-server/09-elysia.md b/docz/docs/03-demos/03-net/03-server/09-elysia.md
index 63c5978..4cdeac4 100644
--- a/docz/docs/03-demos/03-net/03-server/09-elysia.md
+++ b/docz/docs/03-demos/03-net/03-server/09-elysia.md
@@ -26,8 +26,8 @@ This demo was tested in the following deployments:
| Platform | ElysiaJS | Date |
|:---------------|:---------|:-----------|
-| BunJS `1.1.40` | `0.8.17` | 2024-12-19 |
-| BunJS `1.1.40` | `1.1.26` | 2024-12-19 |
+| BunJS `1.2.13` | `0.8.17` | 2025-05-21 |
+| BunJS `1.2.13` | `1.3.1` | 2025-05-21 |
:::
diff --git a/docz/docs/03-demos/03-net/03-server/11-nestjs.md b/docz/docs/03-demos/03-net/03-server/11-nestjs.md
index e4d84c5..cdabe3a 100644
--- a/docz/docs/03-demos/03-net/03-server/11-nestjs.md
+++ b/docz/docs/03-demos/03-net/03-server/11-nestjs.md
@@ -24,11 +24,12 @@ The ["Complete Example"](#complete-example) section includes a complete server.
This demo was tested in the following deployments:
-| NestJS | Date |
-|:----------|:-------------|
-| `10.4.15` | `2024-12-22` |
-| `9.4.3` | `2024-12-22` |
-| `8.4.7` | `2024-12-22` |
+| NestJS | Date |
+|:----------|:-----------|
+| `11.1.1` | 2025-05-21 |
+| `10.4.17` | 2025-05-21 |
+| `9.4.3` | 2025-05-21 |
+| `8.4.7` | 2025-05-21 |
:::
diff --git a/docz/docs/03-demos/03-net/08-headless/index.md b/docz/docs/03-demos/03-net/08-headless/index.md
index 7074605..7efea7f 100644
--- a/docz/docs/03-demos/03-net/08-headless/index.md
+++ b/docz/docs/03-demos/03-net/08-headless/index.md
@@ -130,12 +130,13 @@ This demo was tested in the following deployments:
| Puppeteer | Date |
|:----------|:-----------|
-| `23.11.1` | 2024-12-31 |
-| `22.15.0` | 2024-12-31 |
-| `21.11.0` | 2024-12-31 |
-| `20.9.0` | 2024-12-31 |
-| `15.5.0` | 2024-12-31 |
-| `10.4.0` | 2024-12-31 |
+| `24.9.0` | 2025-05-21 |
+| `23.11.1` | 2025-05-21 |
+| `22.15.0` | 2025-05-21 |
+| `21.11.0` | 2025-05-21 |
+| `20.9.0` | 2025-05-21 |
+| `15.5.0` | 2025-05-21 |
+| `10.4.0` | 2025-05-21 |
:::
@@ -145,14 +146,14 @@ This demo was tested in the following deployments:
{`\
-npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz puppeteer@23.11.1`}
+npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz puppeteer@24.9.0`}
{`\
-bun install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz puppeteer@23.11.1`}
+bun install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz puppeteer@24.9.0`}
@@ -236,9 +237,9 @@ const { webkit } = require('playwright'); // import desired browser
This demo was tested in the following deployments:
-| Playwright | Date |
-|:-----------|:-----------|
-| `1.49.1` | 2024-12-31 |
+| Playwright | Browser | Date |
+|:-----------|:------------|:-----------|
+| `1.52.0` | Webkit 18.4 | 2025-05-21 |
:::
diff --git a/docz/docs/03-demos/04-grid/01-xs.md b/docz/docs/03-demos/04-grid/01-xs.md
index 5185209..e53e352 100644
--- a/docz/docs/03-demos/04-grid/01-xs.md
+++ b/docz/docs/03-demos/04-grid/01-xs.md
@@ -20,8 +20,8 @@ This demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
-| Chromium 131 | 2024-12-31 |
-| Safari 18.2 | 2024-12-31 |
+| Chromium 136 | 2025-05-21 |
+| Safari 18.2 | 2025-05-21 |
| Konqueror 22 | 2025-04-23 |
:::
diff --git a/docz/docs/03-demos/04-grid/02-cdg.md b/docz/docs/03-demos/04-grid/02-cdg.md
index 0cfe62a..8aaf39a 100644
--- a/docz/docs/03-demos/04-grid/02-cdg.md
+++ b/docz/docs/03-demos/04-grid/02-cdg.md
@@ -19,8 +19,8 @@ This demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
-| Chromium 131 | 2024-12-31 |
-| Safari 18.2 | 2024-12-31 |
+| Chromium 136 | 2025-05-21 |
+| Safari 18.2 | 2025-05-21 |
| Konqueror 22 | 2025-04-23 |
:::
diff --git a/docz/docs/03-demos/12-static/09-nuxtjs.md b/docz/docs/03-demos/12-static/09-nuxtjs.md
index c75e8d1..33d8a19 100644
--- a/docz/docs/03-demos/12-static/09-nuxtjs.md
+++ b/docz/docs/03-demos/12-static/09-nuxtjs.md
@@ -33,6 +33,9 @@ Content v1 (paired with VueJS 2.x and NuxtJS 2.x)
The ["Nuxt Content v2"](#nuxt-content-v2) section explores "transformers" for
NuxtJS Content v2 (paired with VueJS 3.x and NuxtJS 3.x)
+The ["Nuxt Content v3"](#nuxt-content-v3) section explores raw ViteJS modules
+(paired with VueJS 3.x and NuxtJS 3.x)
+
:::info pass
This demo focuses on server-side processing with NuxtJS and VueJS.
@@ -918,7 +921,7 @@ export default defineNuxtConfig({
5) Create a new file `app.vue` with the following contents:
-```jsx title="app.vue (create new file)"
+```html title="app.vue (create new file)"
diff --git a/docz/docs/03-demos/17-mobile/01-reactnative.md b/docz/docs/03-demos/17-mobile/01-reactnative.md
index ec8764a..9500721 100644
--- a/docz/docs/03-demos/17-mobile/01-reactnative.md
+++ b/docz/docs/03-demos/17-mobile/01-reactnative.md
@@ -578,7 +578,7 @@ reconnect the device before trying again.
:::info pass
-In some test runs, the app requested for local network access:
+In some test runs, the app requested for local network access:
> "SheetJSRNFetch" would like to find and connect to devices on your local network.
diff --git a/docz/docs/03-demos/17-mobile/05-capacitor.md b/docz/docs/03-demos/17-mobile/05-capacitor.md
index 9a7a662..d4b9733 100644
--- a/docz/docs/03-demos/17-mobile/05-capacitor.md
+++ b/docz/docs/03-demos/17-mobile/05-capacitor.md
@@ -530,7 +530,7 @@ error: Provisioning profile "iOS Team Provisioning Profile: com.sheetjs.cap" doe
```
This error was resolved by manually selecting the device as the primary target
-in the Xcode workspace.
+in the Xcode workspace.
:::
diff --git a/docz/docs/03-demos/17-mobile/06-flutter.md b/docz/docs/03-demos/17-mobile/06-flutter.md
index 9f28c4a..dfbb01c 100644
--- a/docz/docs/03-demos/17-mobile/06-flutter.md
+++ b/docz/docs/03-demos/17-mobile/06-flutter.md
@@ -888,7 +888,7 @@ Tap "OK" to continue.
:::info pass
-In some test runs, the app requested for local network access:
+In some test runs, the app requested for local network access:
> "Sheetjs Flutter" would like to find and connect to devices on your local network.
diff --git a/docz/docs/03-demos/17-mobile/07-lynx.md b/docz/docs/03-demos/17-mobile/07-lynx.md
index 889d9f7..fae3085 100644
--- a/docz/docs/03-demos/17-mobile/07-lynx.md
+++ b/docz/docs/03-demos/17-mobile/07-lynx.md
@@ -176,7 +176,7 @@ The demo uses Lynx `` and `` elements to display tabular data:
{/* Map through each cell in the current row */}
{Array.isArray(row) && row.map((cell, cellIndex) => (
{/* Cell with dynamic width based on content */}
-
{/* Display cell content as text */}
diff --git a/docz/docs/03-demos/19-desktop/02-nwjs.md b/docz/docs/03-demos/19-desktop/02-nwjs.md
index 1cb2703..78a1647 100644
--- a/docz/docs/03-demos/19-desktop/02-nwjs.md
+++ b/docz/docs/03-demos/19-desktop/02-nwjs.md
@@ -119,14 +119,14 @@ input.click();
This demo was tested in the following environments:
-| OS and Version | Architecture | NW.js | Date | Notes |
-|:---------------|:-------------|:---------|:-----------|:---------------------|
-| macOS 15.3.2 | `darwin-x64` | `0.94.0` | 2025-03-31 | |
-| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | |
-| Windows 11 | `win11-x64` | `0.94.0` | 2024-12-19 | |
-| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
-| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2025-01-10 | |
-| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
+| OS and Version | Architecture | NW.js | Date | Notes |
+|:---------------|:-------------|:----------|:-----------|:---------------------|
+| macOS 15.3.2 | `darwin-x64` | `0.94.0` | 2025-03-31 | |
+| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | |
+| Windows 11 | `win11-x64` | `0.100.0` | 2025-05-27 | |
+| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
+| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2025-01-10 | |
+| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
:::
@@ -146,7 +146,7 @@ cd sheetjs-nwjs
"version": "0.0.0",
"main": "index.html",
"dependencies": {
- "nw": "0.94.0",
+ "nw": "0.100.0",
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
}
}`}
@@ -167,6 +167,22 @@ In the terminal window, the download can be performed with:
curl -LO https://docs.sheetjs.com/nwjs/index.html
```
+:::note pass
+
+In PowerShell, the command may fail with a parameter error:
+
+```
+Invoke-WebRequest : A parameter cannot be found that matches parameter name 'L'.
+```
+
+`curl.exe` must be invoked directly:
+
+```bash
+curl.exe -LO https://docs.sheetjs.com/nwjs/index.html
+```
+
+:::
+
3) Install dependencies:
```bash
@@ -208,15 +224,16 @@ Unfortunately `nw-builder` will not be able to build a standalone program.
5) To build a standalone app, run the builder:
```bash
-npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.94.0 --glob=false --outDir=../out ./
+npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.100.0 --glob=false --outDir=../out ./
```
This will generate the standalone app in the `..\out\` folder.
:::caution pass
-There is a regression in `nw-builder` version `4.12.0`. In local `win11-x64`
-testing, version `4.11.6` correctly generated the standalone application.
+There is a regression in `nw-builder` versions `4.12.0` and `4.13.14`.
+
+In local `win11-x64` testing, `4.11.6` generates the standalone application.
:::
diff --git a/docz/docs/03-demos/19-desktop/03-wails.md b/docz/docs/03-demos/19-desktop/03-wails.md
index c04f28c..7fbf23e 100644
--- a/docz/docs/03-demos/19-desktop/03-wails.md
+++ b/docz/docs/03-demos/19-desktop/03-wails.md
@@ -54,6 +54,21 @@ platform provides many native features out of the box.
:::
+:::note Tested Deployments
+
+This demo was tested in the following environments:
+
+| OS and Version | Architecture | Wails | Date |
+|:---------------|:-------------|:----------|:-----------|
+| macOS 15.3.2 | `darwin-x64` | `v2.10.1` | 2025-03-31 |
+| macOS 14.5 | `darwin-arm` | `v2.10.1` | 2025-03-30 |
+| Windows 11 | `win11-x64` | `v2.10.1` | 2025-05-27 |
+| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
+| Linux (HoloOS) | `linux-x64` | `v2.9.2` | 2025-01-02 |
+| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |
+
+:::
+
## Integration Details
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
@@ -291,21 +306,6 @@ async function exportFile(table_element) {
## Complete Example
-:::note Tested Deployments
-
-This demo was tested in the following environments:
-
-| OS and Version | Architecture | Wails | Date |
-|:---------------|:-------------|:----------|:-----------|
-| macOS 15.3.2 | `darwin-x64` | `v2.10.1` | 2025-03-31 |
-| macOS 14.5 | `darwin-arm` | `v2.10.1` | 2025-03-30 |
-| Windows 11 | `win11-x64` | `v2.9.2` | 2024-12-21 |
-| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `v2.9.2` | 2025-01-02 |
-| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |
-
-:::
-
0) Read the Wails "Getting Started" guide[^14] and install dependencies.
@@ -400,7 +400,11 @@ wails build
It will print the path to the generated program (typically in `build/bin/`).
-5) Run the generated application.
+5) Run the generated application:
+
+| Architecture | Command |
+|:-------------|:------------------------------------------|
+| `win11-x64` | `.\build\bin\sheetjs-wails.exe` |
**Testing**
diff --git a/docz/docs/03-demos/19-desktop/04-tauri.md b/docz/docs/03-demos/19-desktop/04-tauri.md
index abe943e..ba6084b 100644
--- a/docz/docs/03-demos/19-desktop/04-tauri.md
+++ b/docz/docs/03-demos/19-desktop/04-tauri.md
@@ -50,6 +50,21 @@ app to read and write workbooks. The app will look like the screenshots below:
+:::note Tested Deployments
+
+This demo was tested in the following environments:
+
+| OS and Version | Architecture | Tauri | Date |
+|:---------------|:-------------|:----------|:-----------|
+| macOS 15.3.2 | `darwin-x64` | `v1.6.0` | 2025-03-31 |
+| macOS 14.5 | `darwin-arm` | `v1.6.0` | 2025-03-30 |
+| Windows 11 | `win11-x64` | `v1.6.0` | 2025-05-27 |
+| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |
+| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-01-02 |
+| Linux (Debian) | `linux-arm` | `v1.6.0` | 2025-05-27 |
+
+:::
+
## Integration Details
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
@@ -347,21 +362,6 @@ function SheetJSExportKaioponent() {
## Complete Example
-:::note Tested Deployments
-
-This demo was tested in the following environments:
-
-| OS and Version | Architecture | Tauri | Date |
-|:---------------|:-------------|:----------|:-----------|
-| macOS 15.3.2 | `darwin-x64` | `v1.6.0` | 2025-03-31 |
-| macOS 14.5 | `darwin-arm` | `v1.6.0` | 2025-03-30 |
-| Windows 11 | `win11-x64` | `v1.6.0` | 2024-12-21 |
-| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-01-02 |
-| Linux (Debian) | `linux-arm` | `v1.6.0` | 2025-02-16 |
-
-:::
-
0) Read Tauri "Getting Started" guide and install prerequisites.[^16]
@@ -386,15 +386,15 @@ If required dependencies are installed, the output will show a checkmark next to
[✔] Environment
{` `}- OS: Mac OS 14.5.0 arm64 (X64)
{` `}✔ Xcode Command Line Tools: installed
-{` `}✔ rustc: 1.85.1 (4eb161250 2025-03-15)
-{` `}✔ cargo: 1.85.1 (d73d2caf9 2024-12-31)
-{` `}✔ rustup: 1.28.1 (f9edccde0 2025-03-05)
+{` `}✔ rustc: 1.87.0 (17067e9ac 2025-05-09)
+{` `}✔ cargo: 1.87.0 (99624be96 2025-05-06)
+{` `}✔ rustup: 1.28.2 (e4f3ad6f8 2025-04-28)
{` `}✔ Rust toolchain: stable-aarch64-apple-darwin (default)
{` `}- node: 20.18.0
{` `}- pnpm: 9.12.3
{` `}- npm: 10.8.2
-{` `}- bun: 1.2.7
-{` `}- deno: deno 2.2.6
+{` `}- bun: 1.2.14
+{` `}- deno: deno 2.3.3
:::caution pass
@@ -642,8 +642,9 @@ The following features should be manually verified:
- When it is loaded, the app will download https://docs.sheetjs.com/pres.numbers
and display the data in a table.
-- Clicking "Save Data" will show a save dialog. After selecting a path and name,
- the app will write a file. That file can be opened in a spreadsheet editor.
+- Clicking "Save Data" will show a save dialog. If there is no filename, type
+ `SheetJSTauri.xlsb`. Click "Save". The app will write a file which can be
+ opened in a spreadsheet editor.
- Edit the file in a spreadsheet editor, then click "Load Data" and select the
edited file. The table will refresh with new contents.
diff --git a/docz/docs/03-demos/19-desktop/05-neutralino.md b/docz/docs/03-demos/19-desktop/05-neutralino.md
index 7596564..9ef63f9 100644
--- a/docz/docs/03-demos/19-desktop/05-neutralino.md
+++ b/docz/docs/03-demos/19-desktop/05-neutralino.md
@@ -45,6 +45,24 @@ app to read and write workbooks. The app will look like the screenshots below:
+:::note Tested Deployments
+
+This demo was tested in the following environments:
+
+| OS and Version | Architecture | Server | Client | Date |
+|:---------------|:-------------|:---------|:---------|:-----------|
+| macOS 15.3.2 | `darwin-x64` | `6.0.0` | `6.0.0` | 2025-03-31 |
+| macOS 14.5 | `darwin-arm` | `6.0.0` | `6.0.0` | 2025-03-30 |
+| Windows 11 | `win11-x64` | `6.1.0` | `6.1.0` | 2025-05-27 |
+| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
+| Linux (HoloOS) | `linux-x64` | `5.5.0` | `5.5.0` | 2025-01-02 |
+| Linux (Debian) | `linux-arm` | `5.6.0` | `5.6.0` | 2025-02-16 |
+
+NeutralinoJS on Windows on ARM generates X64 binaries that run using the X64
+compatibility layer. The binaries are not native ARM64 programs!
+
+:::
+
## Integration Details
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
@@ -186,24 +204,6 @@ const save_button_callback = async() => {
## Complete Example
-:::note Tested Deployments
-
-This demo was tested in the following environments:
-
-| OS and Version | Architecture | Server | Client | Date |
-|:---------------|:-------------|:---------|:---------|:-----------|
-| macOS 15.3.2 | `darwin-x64` | `6.0.0` | `6.0.0` | 2025-03-31 |
-| macOS 14.5 | `darwin-arm` | `6.0.0` | `6.0.0` | 2025-03-30 |
-| Windows 11 | `win11-x64` | `5.5.0` | `5.5.0` | 2024-12-20 |
-| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `5.5.0` | `5.5.0` | 2025-01-02 |
-| Linux (Debian) | `linux-arm` | `5.6.0` | `5.6.0` | 2025-02-16 |
-
-NeutralinoJS on Windows on ARM generates X64 binaries that run using the X64
-compatibility layer. The binaries are not native ARM64 programs!
-
-:::
-
The app core state will be the HTML table. Reading files will add the table to
the window. Writing files will parse the table into a spreadsheet.
@@ -247,6 +247,22 @@ subdirectory in the `sheetjs-neu` folder:
curl -L -o resources/js/xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
+:::note pass
+
+In PowerShell, the command may fail with a parameter error:
+
+```
+Invoke-WebRequest : A parameter cannot be found that matches parameter name 'L'.
+```
+
+`curl.exe` must be invoked directly:
+
+{`\
+curl.exe -L -o resources/js/xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
+
+
+:::
+
3) Add the highlighted line to `neutralino.config.json` in `nativeAllowList`:
```json title="neutralino.config.json (add highlighted line)"
diff --git a/docz/docs/03-demos/19-desktop/06-reactnative.md b/docz/docs/03-demos/19-desktop/06-reactnative.md
index 46af495..e37332b 100644
--- a/docz/docs/03-demos/19-desktop/06-reactnative.md
+++ b/docz/docs/03-demos/19-desktop/06-reactnative.md
@@ -530,6 +530,18 @@ When this demo was last tested on Windows 11 ARM, the build failed.
+:::info pass
+
+In PowerShell, the command will fail with `msbuild` errors:
+
+```
+ × Could not find MSBuild with VCTools for Visual Studio 17.11.0 or later. Make sure all required components have been installed
+```
+
+**The commands must be run in a "Native Tools Command Prompt"!**
+
+:::
+
### Native Module
diff --git a/docz/docs/03-demos/20-cli/21-txiki.md b/docz/docs/03-demos/20-cli/21-txiki.md
index 208ccd3..d07cdb0 100644
--- a/docz/docs/03-demos/20-cli/21-txiki.md
+++ b/docz/docs/03-demos/20-cli/21-txiki.md
@@ -4,7 +4,7 @@ sidebar_label: txiki.js
pagination_prev: demos/desktop/index
pagination_next: demos/data/index
sidebar_custom_props:
- summary: Compiled apps powered by QuickJS and txiki.js
+ summary: Compiled apps powered by QuickJS and txiki.js
---
import current from '/version.js';
diff --git a/docz/docs/03-demos/23-data/25-mongodb.md b/docz/docs/03-demos/23-data/25-mongodb.md
index 6c3a912..3183c91 100644
--- a/docz/docs/03-demos/23-data/25-mongodb.md
+++ b/docz/docs/03-demos/23-data/25-mongodb.md
@@ -12,7 +12,7 @@ import CodeBlock from '@theme/CodeBlock';
[MongoDB](https://mongodb.github.io/node-mongodb-native/) is a document-oriented
database engine. [FerretDB](https://www.ferretdb.com/) is a truly open source
-implementation of the MongoDB wire protocol
+implementation of the MongoDB wire protocol.
[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
data from spreadsheets.
diff --git a/docz/docs/03-demos/27-local/03-storageapi.md b/docz/docs/03-demos/27-local/03-storageapi.md
index 8506291..40267c8 100644
--- a/docz/docs/03-demos/27-local/03-storageapi.md
+++ b/docz/docs/03-demos/27-local/03-storageapi.md
@@ -11,8 +11,10 @@ simple key-value stores that only support string values and keys.
This demo covers two common use patterns:
-- "Row Objects" shows a simple convention for loading and storing row objects
-- "Simple Strings" discusses how to persist and recover a raw Storage
+- ["Row Objects"](#row-objects) shows a simple convention for loading and
+ storing row objects.
+- ["Simple Strings"](#simple-strings) discusses how to persist and recover keys
+ and string values.
:::note Tested Deployments
@@ -20,8 +22,8 @@ Each browser demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
-| Chromium 131 | 2024-12-23 |
-| Safari 18.2 | 2024-12-31 |
+| Chromium 136 | 2025-05-21 |
+| Safari 18.2 | 2025-05-21 |
| Konqueror 22 | 2025-04-23 |
:::
@@ -49,10 +51,13 @@ strings using `JSON.stringify` and store using the row index as a key:
#### Importing Data
-Starting from a worksheet, the SheetJS `sheet_to_json` method[^1] generates an
-array of row objects. `localStorage.setItem` will store data in Local Storage:
+`localStorage.setItem` will store data in Local Storage.
-```js
+Starting from a worksheet, the SheetJS `sheet_to_json` method[^1] generates an
+array of row objects. Each object in the array can be saved in the Local Storage
+using the row index as the key.
+
+```js title="Store a SheetJS worksheet in Local Storage"
function sheet_to_localStorage(worksheet) {
const aoo = XLSX.utils.sheet_to_json(worksheet);
for(let i = 0; i < aoo.length; ++i) {
@@ -96,7 +101,7 @@ function localStorage_to_array_of_objects() {
The SheetJS `json_to_sheet`[^2] method will create a new worksheet from the
array of objects:
-```js
+```js title="Generate a SheetJS worksheet from records in Local Storage "
function localStorage_to_sheet() {
const aoo = [];
for(let i = 0; i < localStorage.length; ++i) {
@@ -118,8 +123,8 @@ After saving the exported file, the Local Storage can be inspected in the
:::caution pass
-This example is for illustration purposes. If array of objects is available, it
-is strongly recommended to convert that array to a worksheet directly.
+This example is for illustration purposes. If an array of objects is available,
+it is strongly recommended to convert that array to a worksheet directly.
:::
@@ -203,7 +208,7 @@ In modern browsers, `Object.entries` will generate an array of key/value pairs.
The SheetJS `aoa_to_sheet`[^3] method will interpret that array as a worksheet
with 2 columns (key and value):
-```js
+```js title="Generate a SheetJS two-column worksheet from Local Storage"
function localStorage_to_ws() {
const aoa = Object.entries(localStorage);
return XLSX.utils.aoa_to_sheet(aoa);
@@ -216,7 +221,7 @@ In the other direction, the worksheet is assumed to store keys in column A and
values in column B. The SheetJS `sheet_to_json`[^1] method, with the option
`header: 1`, will generate key/value pairs that can be assigned to a storage:
-```js
+```js title="Store a SheetJS two-column worksheet in Local Storage"
function ws_to_localStorage(ws) {
const aoa = XLSX.utils.sheet_to_json(ws, { header: 1 });
aoa.forEach(([key, val]) => localStorage.setItem(key, val));
diff --git a/docz/docs/03-demos/27-local/09-indexeddb.md b/docz/docs/03-demos/27-local/09-indexeddb.md
index 2e23b4e..4615ad5 100644
--- a/docz/docs/03-demos/27-local/09-indexeddb.md
+++ b/docz/docs/03-demos/27-local/09-indexeddb.md
@@ -8,7 +8,7 @@ sidebar_custom_props:
-
+
:::danger pass
@@ -43,8 +43,8 @@ This demo was last tested in the following environments:
| Browser | Date | `localForage` |
|:-------------|:-----------|:--------------|
-| Chromium 131 | 2024-12-31 | `1.10.0` |
-| Safari 18.2 | 2024-12-31 | `1.10.0` |
+| Chromium 136 | 2025-05-21 | `1.10.0` |
+| Safari 18.2 | 2025-05-21 | `1.10.0` |
| Konqueror 22 | 2025-04-23 | `1.10.0` |
:::
@@ -116,8 +116,8 @@ This demo was last tested in the following environments:
| Browser | Date | DexieJS |
|:-------------|:-----------|:---------|
-| Chromium 131 | 2024-12-31 | `4.0.10` |
-| Safari 18.2 | 2024-12-31 | `4.0.10` |
+| Chromium 136 | 2025-05-21 | `4.0.11` |
+| Safari 18.2 | 2025-05-21 | `4.0.11` |
| Konqueror 22 | 2025-04-23 | `4.0.10` |
:::
diff --git a/docz/docs/03-demos/30-cloud/01-salesforce.md b/docz/docs/03-demos/30-cloud/01-salesforce.md
index d45d437..6590b58 100644
--- a/docz/docs/03-demos/30-cloud/01-salesforce.md
+++ b/docz/docs/03-demos/30-cloud/01-salesforce.md
@@ -33,7 +33,7 @@ This demo was tested in the following deployments:
| Lightning API | Date |
|:--------------|:-----------|
-| `61.0` | 2024-10-06 |
+| `62.0` | 2025-05-27 |
:::
@@ -331,7 +331,7 @@ npx @salesforce/cli --version
When the demo was last tested, the command printed
```
-@salesforce/cli/2.60.13 darwin-arm64 node-v20.18.0
+@salesforce/cli/2.89.8 win32-x64 node-v24.1.0
```
:::
@@ -380,7 +380,7 @@ with the following XML:
```xml title="force-app\main\default\lwc\sheetComponent\sheetComponent.js-meta.xml (replace highlighted lines)"
- 61.0
+ 62.0
true
SheetForce
@@ -412,7 +412,7 @@ A) In the Salesforce site, click on the gear icon in the top-right corner of the
page and select "Setup" (Setup for current app).
B) Type "Custom Code" in the left sidebar search box. Expand "Custom Code",
-expand "Lightning Components" and click "Lightning Components".
+expand "Lightning Components" and click the inner "Lightning Components".
:::caution pass
@@ -430,8 +430,8 @@ Click the link to open the page in Salesforce Classic.
A) Click the "Setup" link in the top-right corner of the page.
-B) Type "Lightning" in the left sidebar search box. Expand "Develop", expand
-"Lightning Components" and click "Lightning Components".
+B) Type "Custom Code" in the left sidebar search box. In the section, expand
+"Lightning Components" and click the inner "Lightning Components".
@@ -505,7 +505,8 @@ When the "Page Saved" modal is displayed, click "Activate".
The following options should be set:
- Click "Change..." next to "Icon" and pick a memorable icon
-- Under "Lightning Experience" click "LightningBolt" then "Add page to app"
+- Under "Lightning Experience" select "LightningBolt" in the left column and
+ click "Add page to app" in the right side
Click "Save" to activate the page.
diff --git a/docz/docs/03-demos/32-extensions/03-excelapi.md b/docz/docs/03-demos/32-extensions/03-excelapi.md
index c2b8247..72c3e83 100644
--- a/docz/docs/03-demos/32-extensions/03-excelapi.md
+++ b/docz/docs/03-demos/32-extensions/03-excelapi.md
@@ -299,7 +299,7 @@ npm run stop
npm start
```
-4) Activate the Task Pane for the addin (click "Show Task Pane" in the ribbon).
+4) Activate the Task Pane for the addin (click "Show Task Pane" in the ribbon).
5) Hover near the top-right corner of the addin and click the `i` icon.
diff --git a/docz/docs/03-demos/32-extensions/04-gsheet.md b/docz/docs/03-demos/32-extensions/04-gsheet.md
index 0cdb08f..98968ba 100644
--- a/docz/docs/03-demos/32-extensions/04-gsheet.md
+++ b/docz/docs/03-demos/32-extensions/04-gsheet.md
@@ -37,9 +37,9 @@ remote file, parses the contents, and writes data to the sheet:
This demo was tested in the following deployments:
-| Clasp | Date |
-|:--------|:-----------|
-| `2.4.2` | 2024-12-31 |
+| Clasp | Date |
+|:--------------|:-----------|
+| `3.0.4-alpha` | 2025-05-21 |
:::
@@ -112,7 +112,7 @@ the result of setting cell `A1` to the formula `=AOA()`:
```js
function AOA(url) {
return [
- ["Sheet", "JS"],
+ ["Sheet", "JS"],
[ 72, 62]
];
}
@@ -153,6 +153,10 @@ The next page will include the following title:
3) At the bottom of the screen, click "Continue".
+The next page will include the following title:
+
+> clasp – The Apps Script CLI wants access to your Google Account
+
4) In the next screen, check every box that mentions "Google Apps Script". When
the demo was last tested, the following were required:
@@ -183,7 +187,8 @@ Authorization successful.

-9) Click the gear icon (Project Settings) and copy the Script ID
+9) Click the gear icon (Project Settings) in the left sidebar. Scroll down to
+the "IDs" section and copy the Script ID.
### Cloning the Apps Script
diff --git a/docz/docs/03-demos/32-extensions/09-mathematica.md b/docz/docs/03-demos/32-extensions/09-mathematica.md
index 257653a..4b93a2f 100644
--- a/docz/docs/03-demos/32-extensions/09-mathematica.md
+++ b/docz/docs/03-demos/32-extensions/09-mathematica.md
@@ -30,7 +30,7 @@ This demo was tested by SheetJS users in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `14.1` | 2025-03-31 |
-| `win11-x64` | `14.0` | 2024-12-19 |
+| `win11-x64` | `14.2` | 2025-05-21 |
:::
@@ -181,12 +181,12 @@ This demo tests the NodeJS external engine and dedicated command line tools.
### NodeJS Engine
-0) Install NodeJS. When the demo was tested, version `20.19.0` was installed.
+0) Install NodeJS. When the demo was tested, version `20.19.2` was installed.
1) Install dependencies in the Home folder (`~` or `$HOME` or `%HOMEPATH%`):
{`\
-npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.4.0`}
+npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.4.2`}
2) Open a new Mathematica Notebook and register NodeJS. When the example was
diff --git a/docz/docs/03-demos/32-extensions/41-ghidra.md b/docz/docs/03-demos/32-extensions/41-ghidra.md
index d3ba833..d1dc254 100644
--- a/docz/docs/03-demos/32-extensions/41-ghidra.md
+++ b/docz/docs/03-demos/32-extensions/41-ghidra.md
@@ -344,7 +344,7 @@ If prompted, enter the path to the JDK installation. On macOS, JDK installations
are typically stored in `/Library/Java/JavaVirtualMachines`. The required path
is the `/Contents/Home/` folder within the specific JDK installation.
-When this demo was last tested, Zulu JDK 21 was installed with Homebrew:
+When this demo was last tested, Zulu JDK 21 was installed with Homebrew:
```bash
brew install --cask zulu@21
diff --git a/docz/docs/03-demos/37-bigdata/02-worker.md b/docz/docs/03-demos/37-bigdata/02-worker.md
index 6442883..c76e624 100644
--- a/docz/docs/03-demos/37-bigdata/02-worker.md
+++ b/docz/docs/03-demos/37-bigdata/02-worker.md
@@ -193,18 +193,18 @@ Each browser demo was tested in the following environments:
| Browser | Date | Comments |
|:-------------|:-----------|:----------------------------------------|
-| Chromium 131 | 2024-12-31 | |
-| Edge 131 | 2024-12-31 | |
-| Safari 17.5 | 2024-12-31 | File System Access API is not supported |
-| Brave 1.63 | 2024-12-31 | File System Access API is not supported |
+| Chromium 136 | 2025-05-27 | |
+| Edge 135 | 2025-05-27 | |
+| Safari 17.1 | 2025-05-27 | File System Access API is not supported |
+| Brave 1.78 | 2025-05-27 | File System Access API is not supported |
| Konqueror 22 | 2025-04-23 | File System Access API is not supported |
-| Firefox 133 | 2024-12-31 | File System Access API is not supported |
+| Firefox 138 | 2025-05-27 | File System Access API is not supported |
:::
### Downloading a Remote File
-:::note fetch in Web Workers
+:::note `fetch` in Web Workers
`fetch` was enabled in Web Workers in Chrome 42 and Safari 10.3
@@ -400,7 +400,7 @@ self.addEventListener('message', async(e) => {
### User-Submitted File
-:::note FileReaderSync
+:::note `FileReaderSync`
Typically `FileReader` is used in the main browser context. In Web Workers, the
synchronous version `FileReaderSync` is more efficient.
diff --git a/docz/docs/07-csf/07-features/12-props.md b/docz/docs/07-csf/07-features/12-props.md
index 4c7cc34..fb1509e 100644
--- a/docz/docs/07-csf/07-features/12-props.md
+++ b/docz/docs/07-csf/07-features/12-props.md
@@ -89,7 +89,7 @@ Some properties cannot be changed in spreadsheet applications. The underlying
SheetJS output codecs can write arbitrary values.
The `Props` object understands the "standard" properties listed in the following
-table. "SheetJS Name" refers to the name of the property in the `Props` object.
+table. "SheetJS Name" refers to the name of the property in the `Props` object.
"Excel Property Setting" refers to the name in the Excel file properties dialog.
| SheetJS Name | Excel Property Setting |
diff --git a/docz/static/drash/SheetJSDrash.ts b/docz/static/drash/SheetJSDrash.ts
index 2c1b8f9..2f9da3b 100644
--- a/docz/static/drash/SheetJSDrash.ts
+++ b/docz/static/drash/SheetJSDrash.ts
@@ -67,7 +67,7 @@ class WriteResource extends Drash.Resource {
}
const server = new Drash.Server({
- hostname: "",
+ hostname: "0.0.0.0",
port: 7262,
protocol: "http",
resources: [ ParseResource, WriteResource ],
diff --git a/tests/headless-playwright.sh b/tests/headless/playwright.sh
similarity index 96%
rename from tests/headless-playwright.sh
rename to tests/headless/playwright.sh
index c3b3478..1d700b7 100755
--- a/tests/headless-playwright.sh
+++ b/tests/headless/playwright.sh
@@ -6,7 +6,6 @@ rm -rf sheetjs-playwright
mkdir sheetjs-playwright
cd sheetjs-playwright
-npm i --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz playwright@1.45.0
cat >SheetJSPlaywright.js <SheetJSPuppeteer.js <