demo refresh

This commit is contained in:
SheetJS 2026-05-27 22:51:38 -04:00
parent 7b5a73be0d
commit a881bc8924
22 changed files with 278 additions and 156 deletions

@ -47,8 +47,9 @@ This demo was tested in the following configurations:
| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | Ollama | 2025-11-15 |
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | Ollama | 2025-11-15 |
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | Ollama | 2025-11-15 |
| AMD RYZEN AI MAX+ 395 + Radeon 8060S (128 GB unified memory) | `linux-x64` | Ollama | 2025-11-15 |
| AMD RYZEN AI MAX+ 395 + Radeon 8060S (128 GB unified memory) | `win11-x64` | Ollama | 2025-11-15 |
| AMD Ryzen AI MAX+ 395 + Radeon 8060S (128 GB unified memory) | `linux-x64` | Ollama | 2025-11-15 |
| AMD Ryzen AI MAX+ 395 + Radeon 8060S (128 GB unified memory) | `win11-x64` | Ollama | 2025-11-15 |
| AMD Ryzen AI 9 HX 370 + Radeon 890M (64 GB unified memory) | `win11-x64` | `llama.cpp` | 2026-05-12 |
| Apple M4 Max 16-Core CPU + 40-Core GPU (48 GB unified memory) | `darwin-arm` | Ollama | 2025-11-15 |
SheetJS users have verified this demo in other configurations:
@ -60,6 +61,7 @@ SheetJS users have verified this demo in other configurations:
|:---------------------------------------------------------------------|:-------------|:------------|
| NVIDIA L40 (48 GB VRAM) + i9-13900K (32 GB RAM) | `linux-x64` | Ollama |
| NVIDIA RTX 5090 (32 GB VRAM) + Ryzen AI Z2 Extreme (24 GB RAM) | `win11-x64` | Ollama |
| NVIDIA RTX 5090 Mobile (24 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | `llama.cpp` |
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z2 Go (32 GB RAM) | `win11-x64` | Ollama |
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z2 Go (32 GB RAM) | `linux-x64` | Ollama |
| NVIDIA RTX 4080 SUPER (16 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | Ollama |
@ -962,6 +964,42 @@ Available devices:
CUDA0: NVIDIA GeForce RTX 5090 (32606 MiB, 30994 MiB free)
```
</details>
<details>
<summary><b>AMD Instructions on Windows</b> (click to show)</summary>
[The `llamacpp-rocm` project](https://github.com/lemonade-sdk/llamacpp-rocm)
builds `llama.cpp` binaries with ROCm support. There are specific releases for
different families of GPUs. The following GPUs were tested:
| Name | Identifier |
|:--------------------------|:-----------|
| Radeon 890M (Strix Point) | `gfx1150` |
The Windows release artifact for the specific `gfx` version musta be downloaded.
For example, Strix Point uses `gfx1150`:
```pwsh
cd ~/Downloads
mkdir llama
cd llama
curl.exe -LO https://github.com/lemonade-sdk/llamacpp-rocm/releases/download/b1265/llama-b1265-windows-rocm-gfx1150-x64.zip
Expand-Archive llama-*.zip -DestinationPath "."
```
If `llama.cpp` can detect relevant GPUs, `./llama-cli.exe --list-devices` will
list a ROCm device under "Available devices". The following output was captured
on a Strix Point machine:
```text title="Devices detected by llama.cpp"
> ./llama-cli.exe --list-devices
...
Available devices:
// highlight-next-line
ROCm0: AMD Radeon(TM) 890M Graphics (26989 MiB, 26837 MiB free)
```
</details>
</TabItem>
@ -1122,6 +1160,14 @@ cd ~/Downloads/llama
./llama-server -m ./phi-4-Q4_K.gguf -ngl 99 --host 0.0.0.0 --port 11434
```
When the service is ready, the terminal will display:
```
main: server is listening on http://0.0.0.0:11434
```
Leave this window running in the background.
8) Serve the embedding model with `llama-server` in a new window:
```bash title="Serve nomic-embed-text (in a new window)"
@ -1129,7 +1175,15 @@ cd ~/Downloads/llama
./llama-server -m ./nomic-embed-text-v1.5.Q8_0.gguf -ngl 99 --host 0.0.0.0 --port 11433 --embeddings
```
8) Edit `query.mjs` to use the local OpenAI-compatible servers:
When the service is ready, the terminal will display:
```
main: server is listening on http://0.0.0.0:11433
```
Leave this window running in the background.
9) Edit `query.mjs` to use the local OpenAI-compatible servers:
```js title="query.mjs (snippet, edit highlighted line)"
// highlight-start
@ -1149,7 +1203,7 @@ const embeddings = new OpenAIEmbeddings({ apiKey: "not-needed", configuration: {
// ...
```
9) Run the demo script:
10) Run the demo script:
</TabItem>
</Tabs>

@ -23,7 +23,7 @@ This demo was tested in the following deployments:
| Platform | Version | Date |
|:-------------|:--------|:-----------|
| Chromium 137 | `1.2.0` | 2025-06-16 |
| Chromium 147 | `1.2.0` | 2026-05-22 |
| Safari 18.5 | `1.2.0` | 2025-06-16 |
| Konqueror 22 | `1.1.2` | 2025-04-23 |

@ -36,7 +36,7 @@ Each browser demo was tested in the following environments:
| Browser | TF.js | Date |
|:-------------|:----------|:-----------|
| Chromium 133 | `4.22.0` | 2025-04-21 |
| Chromium 147 | `4.22.0` | 2026-05-22 |
| Safari 18.3 | `4.22.0` | 2025-04-21 |
| Konqueror 22 | `4.22.0` | 2025-04-23 |

@ -36,9 +36,9 @@ This demo was tested in the following environments:
| Browser | Version | Date |
|:-------------|:------------------|:-----------|
| Chromium 133 | `1.8.2` (latest) | 2025-03-30 |
| Chromium 147 | `1.8.2` (latest) | 2026-05-22 |
| Konqueror 22 | `1.8.2` (latest) | 2025-04-23 |
| Chromium 133 | `1.2.32` (legacy) | 2025-03-30 |
| Chromium 147 | `1.2.32` (legacy) | 2026-05-22 |
:::

@ -76,7 +76,7 @@ This demo was tested in the following environments:
| Platform | Date |
|:-------------|:-----------|
| Chromium 133 | 2025-03-30 |
| Chromium 147 | 2026-05-22 |
| Konqueror 22 | 2025-04-23 |
Demos exclusively using Dojo Core were tested using Dojo Toolkit `1.17.3`.

@ -90,7 +90,7 @@ Each browser demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
| Chromium 133 | 2025-03-30 |
| Chromium 147 | 2026-05-22 |
| Safari 18.3 | 2025-03-30 |
| Konqueror 22 | 2025-04-23 |

@ -135,7 +135,7 @@ Each browser demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
| Chromium 133 | 2025-03-30 |
| Chromium 147 | 2026-05-22 |
| Safari 18.3 | 2025-03-30 |
| Konqueror 22 | 2025-04-23 |

@ -24,7 +24,7 @@ This demo was tested in the following deployments:
| Browser | Version | Date |
|:-------------|:--------|:-----------|
| Chromium 133 | `6.3.1` | 2025-03-31 |
| Chromium 147 | `6.3.1` | 2026-05-22 |
| Konqueror 22 | `6.3.1` | 2025-04-23 |
:::

@ -240,7 +240,7 @@ This demo was tested in the following environments:
|:---------------|:-------------|:---------|:-----------|
| macOS 15.7.4 | `darwin-x64` | `40.8.0` | 2026-03-08 |
| macOS 14.5 | `darwin-arm` | `35.1.2` | 2025-08-30 |
| Windows 11 | `win11-x64` | `33.2.1` | 2025-02-11 |
| Windows 11 | `win11-x64` | `40.8.0` | 2026-05-14 |
| Windows 11 | `win11-arm` | `33.2.1` | 2025-02-23 |
| Linux (Ubuntu) | `linux-x64` | `35.1.2` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `33.2.1` | 2025-02-16 |

@ -123,7 +123,7 @@ This demo was tested in the following environments:
|:---------------|:-------------|:----------|:-----------|:---------------------|
| 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-x64` | `0.111.3` | 2026-05-22 | |
| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
| Linux (Ubuntu) | `linux-x64` | `0.101.2` | 2025-07-06 | |
| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
@ -145,8 +145,9 @@ cd sheetjs-nwjs
"author": "sheetjs",
"version": "0.0.0",
"main": "index.html",
"window": { "icon": "" },
"dependencies": {
"nw": "0.101.2",
"nw": "0.111.3",
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
}
}`}
@ -224,23 +225,11 @@ 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.13.14 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
npx -p nw-builder@4.17.10 nwbuild --mode=build --version=0.111.3 --glob=false --outDir=../out ./
```
This will generate the standalone app in the `..\out\` folder.
:::caution pass
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.
```bash
npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
```
:::
6) Launch the generated application:
| Architecture | Command |

@ -62,7 +62,7 @@ This demo was tested in the following environments:
|:---------------|:-------------|:----------|:-----------|
| 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-x64` | `v2.12.0` | 2026-05-26 |
| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `v2.10.2` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |

@ -53,7 +53,7 @@ This demo was tested in the following environments:
|:---------------|:-------------|:---------|:---------|:-----------|
| 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-x64` | `6.7.0` | `6.7.0` | 2026-05-26 |
| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `6.1.0` | `6.1.0` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `5.6.0` | `5.6.0` | 2025-02-16 |
@ -232,7 +232,7 @@ sudo pacman -Syu webkit2gtk
1) Create a new NeutralinoJS app:
```bash
npx @neutralinojs/neu create sheetjs-neu
npx -y @neutralinojs/neu create sheetjs-neu
cd sheetjs-neu
```
@ -339,7 +339,7 @@ function showInfo() {
7) Run the app:
```bash
npx @neutralinojs/neu run
npx -y @neutralinojs/neu run
```
<p>The app should print <code>SheetJS Version {current}</code></p>
@ -358,7 +358,7 @@ npx @neutralinojs/neu run
9) Close the app. Run the app again:
```bash
npx @neutralinojs/neu run
npx -y @neutralinojs/neu run
```
When the app loads, a table should show in the main screen.
@ -397,7 +397,7 @@ async function exportData() {
11) Close the app. Run the app again:
```bash
npx @neutralinojs/neu run
npx -y @neutralinojs/neu run
```
When the app loads, click the "Import File" button and select a spreadsheet to
@ -422,7 +422,7 @@ save as `SheetJSNeu` will not automatically add the `.xlsx` extension!
12) Build production apps:
```bash
npx @neutralinojs/neu build
npx -y @neutralinojs/neu build
```
Platform-specific programs will be created in the `dist` folder:

@ -92,8 +92,8 @@ This demo was tested in the following deployments:
|:-------------|:----------|:----------|:-----------|
| `darwin-x64` | `24.12.0` | `793dd9d` | 2026-01-21 |
| `darwin-arm` | `24.12.0` | `793dd9d` | 2026-01-18 |
| `win11-x64` | `24.12.0` | | 2026-03-08 |
| `win11-arm` | `24.12.0` | | 2025-04-19 |
| `win11-x64` | `26.4.0` | | 2026-05-26 |
| `win11-arm` | `26.4.0` | | 2026-05-26 |
| `linux-x64` | `24.12.0` | `65e5595` | 2026-01-18 |
| `linux-arm` | `24.12.0` | `65e5595` | 2026-01-21 |
@ -181,11 +181,18 @@ mv txiki-windows-x86_64\* .
</TabItem>
</Tabs>
1) Download the test file https://docs.sheetjs.com/pres.numbers:
1) Download the SheetJS Standalone script and test file. Move both files to the
project directory:
```bash
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://docs.sheetjs.com/pres.numbers
```
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>
:::note pass
@ -197,9 +204,10 @@ Invoke-WebRequest : A parameter cannot be found that matches parameter name 'LO'
`curl.exe` must be invoked directly:
```bash
<CodeBlock language="bash">{`\
curl.exe -LO https://docs.sheetjs.com/pres.numbers
```
curl.exe -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>
:::
@ -226,39 +234,13 @@ curl.exe -LO https://docs.sheetjs.com/txikijs/sheet2csv.js
:::
3) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>
:::note pass
In PowerShell, the command may fail with a parameter error:
```
Invoke-WebRequest : A parameter cannot be found that matches parameter name 'LO'.
```
`curl.exe` must be invoked directly:
<CodeBlock language="bash">{`\
curl.exe -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>
:::
4) Bundle the script:
3) Bundle the script:
```js
npx -y esbuild sheet2csv.js --bundle --outfile=bundle.js --platform=neutral
```
5) Compile and run `sheet2csv`:
4) Compile and run `sheet2csv`:
```bash
./tjs compile bundle.js sheet2csv

@ -159,13 +159,13 @@ This browser demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
| Konqueror 22 | 2025-04-23 |
| Chromium 118 | 2025-03-30 |
| Chromium 118 | 2026-05-22 |
Browsers that do not support WebSQL will throw errors:
| Browser | Date | Error Message |
|:-------------|:-----------|:------------------------------|
| Chromium 133 | 2025-03-30 | `openDatabase is not defined` |
| Chromium 147 | 2026-05-22 | `openDatabase is not defined` |
| Safari 18.3 | 2025-03-30 | `Web SQL is deprecated` |
| Firefox 136 | 2025-03-30 | `openDatabase is not defined` |

@ -22,10 +22,10 @@ Each browser demo was tested in the following environments:
| Browser | Architecture | Date | Notes |
|:-------------|:-------------|:-----------|:--------------------------------|
| Chromium 133 | `darwin-arm` | 2025-04-23 | |
| Safari 17.5 | `darwin-arm` | 2025-04-23 | `text/rtf` not supported |
| Chromium 116 | `win11-arm` | 2025-04-23 | |
| Edge 135 | `win11-arm` | 2025-04-23 | |
| Chromium 146 | `darwin-arm` | 2026-05-16 | `text/rtf` did not work |
| Safari 26.2 | `darwin-arm` | 2026-05-16 | `text/rtf` not supported |
| Chromium 147 | `win11-arm` | 2026-05-26 | |
| Edge 148 | `win11-arm` | 2026-05-26 | |
| Chromium 135 | `linux-arm` | 2025-04-23 | |
| Konqueror 22 | `linux-arm` | 2025-04-23 | `text/rtf`, files not supported |

@ -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.2` | 2025-05-21 |
| `win11-x64` | `14.2` | 2026-05-26 |
:::
@ -181,66 +181,85 @@ 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.2` was installed.
0) Install NodeJS. When the demo was tested, version `20.20.0` was installed.
1) Install dependencies in the Home folder (`~` or `$HOME` or `%HOMEPATH%`):
<CodeBlock language="bash">{`\
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.4.2`}
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.5.0`}
</CodeBlock>
2) Open a new Mathematica Notebook and register NodeJS. When the example was
tested in Windows, the commands were:
2) Find the location of the `node` program.
<Tabs groupId="os">
<TabItem value="unix" label="Linux/MacOS">
```mathematica
RegisterExternalEvaluator["NodeJS","/usr/local/bin/node"]
FindExternalEvaluators["NodeJS"]
```
The second argument to `RegisterExternalEvaluator` should be the path to the
`node` program, which can be found by running the following command in a new
terminal window:
Run the following command in a new terminal window:
```bash
which node
```
When this demo was last tested, the path was `/usr/local/bin/node`.
</TabItem>
<TabItem value="win" label="Windows">
```mathematica
RegisterExternalEvaluator["NodeJS","C:\\Program Files\\nodejs\\node.exe"]
FindExternalEvaluators["NodeJS"]
```
The second argument to `RegisterExternalEvaluator` should be the path to the
`node.exe` program, which can be found by running the following command in a new
PowerShell window:
Run the following command in a new PowerShell window:
```powershell
(Get-Command node.exe).Path
```
When this demo was last tested, the path was `C:\Program Files\nodejs\node.exe`.
</TabItem>
</Tabs>
3) Open a new Mathematica Notebook and register NodeJS.
Copy the following snippet into the Mathematica window, replace the second
argument to `RegisterExternalEvaluator` with the path from the previous step,
and evaluate the block:
```mathematica title="Register NodeJS (replace the path and run in Mathematica)"
RegisterExternalEvaluator["NodeJS","REPLACE_WITH_THE_PATH_TO_NODEJS"]
FindExternalEvaluators["NodeJS"]
```
:::caution pass
Windows paths typically contain backslashes. They must be escaped.
For example, if the path is `C:\Program Files\nodejs\node.exe`, the backslashes
must be doubled:
```mathematica title="Correct way to use a path with backslashes in Mathematica"
RegisterExternalEvaluator["NodeJS","C:\\Program Files\\nodejs\\node.exe"]
```
The recommended approach is to copy the raw path from the PowerShell window,
select `REPLACE_WITH_THE_PATH_TO_NODEJS` (but not the surrounding quotes), and
paste. Mathematica will show a popup:
![Popup when pasting text](pathname:///mathematica/PasteEscapeString.png)
Press "Yes" in the popup and allow Mathematica to escape the string
:::
If NodeJS is registered, the value in the "Registered" column will be "True".
4) Run `require("process").cwd()` from NodeJS:
4) Find the working directory for NodeJS scripts in the Mathematica evaluator:
```mathematica
ExternalEvaluate["NodeJS", "require('process').cwd()"]
```
The result is the working directory for NodeJS scripts
5) Download [`pres.numbers`](https://docs.sheetjs.com/pres.numbers) and move
the file to the folder from the previous result.
3) Copy, but do not run, the following snippet into the running notebook:
6) Copy, but do not run, the following snippet into the running notebook:
<Tabs groupId="os">
<TabItem value="unix" label="Linux/MacOS">

@ -55,7 +55,7 @@ This demo was tested in the following deployments:
|:-------------|:------------------|:-----------|
| `darwin-x64` | `18.5` (StataNow) | 2025-06-20 |
| `darwin-arm` | `19.5` (StataNow) | 2026-03-13 |
| `win11-x64` | `18.5` (StataNow) | 2025-04-28 |
| `win11-x64` | `19.5` (StataNow) | 2026-05-14 |
| `win11-arm` | `18.5` (StataNow) | 2025-02-23 |
| `linux-x64` | `19.5` (StataNow) | 2025-07-06 |
@ -415,7 +415,7 @@ Inspect the output and confirm that `cleanfile.plugin` is listed.
13) Move to the `c:\data` directory in Stata:
```stata
```stata title="Move to the data directory (run in Stata)"
cd c:\data
```

@ -30,7 +30,7 @@ This demo was tested by SheetJS users in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | R2024b | 2025-03-31 |
| `win11-x64` | R2024b | 2025-05-10 |
| `win11-x64` | R2025b | 2026-05-26 |
:::
@ -197,7 +197,7 @@ flowchart LR
0) Launch MATLAB and run the following command to print the workspace folder:
```matlab
```matlab title="Show Matlab Workspace folder (run in MATLAB)"
pwd
```

@ -130,7 +130,7 @@ This demo was tested in the following deployments:
|:-------------|:--------|:-----------|
| `darwin-x64` | `2.7.0` | 2026-01-21 |
| `darwin-arm` | `2.7.0` | 2026-03-07 |
| `win11-x64` | `2.7.0` | 2025-04-28 |
| `win11-x64` | `2.7.0` | 2026-05-26 |
| `win11-arm` | `2.7.0` | 2025-02-23 |
| `linux-x64` | `2.7.0` | 2025-04-21 |
| `linux-arm` | `2.7.0` | 2026-03-07 |
@ -908,7 +908,7 @@ This demo was tested in the following deployments:
|:-------------|:--------|:---------|:-----------|
| `darwin-x64` | `2.7.0` | `0.15.2` | 2026-01-20 |
| `darwin-arm` | `2.7.0` | `0.15.2` | 2026-01-20 |
| `win11-x64` | `2.7.0` | `0.14.0` | 2025-04-28 |
| `win11-x64` | `2.7.0` | `0.15.2` | 2026-05-26 |
| `win11-arm` | `2.7.0` | `0.13.0` | 2025-02-23 |
| `linux-x64` | `2.7.0` | `0.14.0` | 2025-04-21 |
| `linux-arm` | `2.7.0` | `0.15.2` | 2026-03-07 |
@ -977,8 +977,8 @@ The following commands should be run within WSL bash.
For X64 Windows:
```bash
curl -LO https://ziglang.org/download/0.14.0/zig-windows-x86_64-0.14.0.zip
unzip zig-windows-x86_64-0.14.0.zip
curl -LO https://ziglang.org/download/0.15.2/zig-x86_64-windows-0.15.2.zip
unzip zig-x86_64-windows-0.15.2.zip
```
For ARM64 Windows:
@ -1017,7 +1017,7 @@ The following command should be run within Powershell.
:::
```bash
.\zig-windows-*\zig.exe init
.\zig-*\zig.exe init
```
</TabItem>
@ -1055,8 +1055,7 @@ mv *.js src`}
```zig title="build.zig (add highlighted lines)"
const exe = b.addExecutable(.{
.name = "sheetjs_zig",
.root_module = exe_mod,
// ...
});
// highlight-start
exe.addCSourceFile(.{ .file = b.path("duktape-2.7.0/src/duktape.c"), .flags = &.{ "-std=c99", "-fno-sanitize=undefined" } });
@ -1111,7 +1110,7 @@ sudo pacman -Syu glibc linux-api-headers
This command should be run in PowerShell:
```bash
.\zig-windows-*\zig.exe build run -- pres.numbers
.\zig-*\zig.exe build run -- pres.numbers
```
</TabItem>
@ -1272,7 +1271,7 @@ This demo was tested in the following deployments:
|:-------------|:--------|:-----------|
| `darwin-x64` | `2.2.1` | 2026-01-21 |
| `darwin-arm` | `2.2.1` | 2026-03-07 |
| `win11-x64` | `2.2.1` | 2026-02-02 |
| `win11-x64` | `2.2.1` | 2026-05-26 |
| `win11-arm` | `2.2.1` | 2026-05-09 |
| `linux-x64` | `2.2.1` | 2026-01-08 |
| `linux-arm` | `2.2.1` | 2026-03-07 |

@ -265,7 +265,7 @@ This demo was tested in the following deployments:
|:-------------|:-----------|:-----------|:-----------|
| `darwin-x64` | QuickJS | `f113949` | 2026-01-21 |
| `darwin-arm` | QuickJS | `f113949` | 2026-03-07 |
| `win11-x64` | QuickJS-NG | `4951c83` | 2025-04-18 |
| `win11-x64` | QuickJS-NG | `3adc8c9` | 2026-05-26 |
| `win11-arm` | QuickJS-NG | `865ba1f` | 2025-04-18 |
| `linux-x64` | QuickJS | `f113949` | 2026-03-08 |
| `linux-arm` | QuickJS | `f113949` | 2026-03-07 |
@ -369,10 +369,10 @@ cd sheetjs-quick
```bash
git clone https://github.com/quickjs-ng/quickjs
cd quickjs
git checkout 4951c83
git checkout 3adc8c9
cmake -B build -DQJS_BUILD_EXAMPLES=ON
cmake --build build --config Release
build\Release\qjs.exe amalgam.js
build\qjs.exe amalgam.js
cd ..
```

@ -374,7 +374,7 @@ fork, which powers React Native for Windows, does have built-in support[^5]
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `win11-x64` | `254fb48` | 2025-04-28 |
| `win11-x64` | `f9abcf6` | 2026-05-26 |
| `win11-arm` | `4c64b05` | 2025-02-23 |
The ["Windows Example"](#windows-example) covers `hermes-windows`.
@ -613,7 +613,7 @@ contents of the first sheet as CSV rows.
:::info pass
The commands must be run in a "Native Tools Command Prompt".
The commands must be run in a VS 2022 "Native Tools Command Prompt".
:::
@ -625,15 +625,37 @@ The commands must be run in a "Native Tools Command Prompt".
The build sequence requires Python, which can be installed from the official
Windows installer[^7].
Visual Studio with "Desktop development with C++" workload and CMake must be
installed[^8]. In addition, the following Spectre-mitigated libs must be added:
Visual Studio 2022 "Desktop development with C++" workload must be installed[^8].
- MSVC C++ x64/x86 Spectre-mitigated libs (Latest)
- C++ ATL for latest build tools with Spectre Mitigations (x86 & x64)
- C++ MFC for latest build tools with Spectre Mitigations (x86 & x64)
The following VS 2022 "Individual components" must be added:
The easiest way to install is to select "Individual components" and search for
"spectre latest" (no quotation marks). Pick each option for the relevant CPU.
- C++ CMake tools for Windows
- C++/CLI support for v143 build tools (Latest)
- C++ Clang Compiler for Windows (19.1.5)
- MSBuild support for LLVM (clang-cl) toolset
In addition, the architecture-specific Spectre-mitigated libs must be added:
<Tabs groupId="arch">
<TabItem value="x64" label="x64">
- MSVC v143 - VS 2022 C++ x64/x86 Spectre-mitigated libs (Latest)
- C++ ATL for latest v143 build tools with Spectre Mitigations (x86 & x64)
- C++ MFC for latest v143 build tools with Spectre Mitigations (x86 & x64)
Search for "spectre latest x64" (no quotation marks) and select each option.
</TabItem>
<TabItem value="arm" label="ARM64">
- MSVC v143 - VS 2022 C++ ARM64/ARM64EC Spectre-mitigated libs (Latest)
- C++ ATL for latest v143 build tools with Spectre Mitigations (ARM64/ARM64EC)
- C++ MFC for latest v143 build tools with Spectre Mitigations (ARM64/ARM64EC)
Search for "spectre latest arm64" (no quotation marks) and select each option.
</TabItem>
</Tabs>
</details>
@ -693,7 +715,7 @@ cd sheetjs-hermes
```bash
git clone https://github.com/microsoft/hermes-windows
cd hermes-windows
git checkout 254fb48
git checkout f9abcf6
cd ..
```
@ -710,15 +732,70 @@ git config --global http.sslVerify true
:::
5) Build the library:
5) Patch the build structure to ensure MSVC flags are used in `clang-cl`.
:::note pass
The Hermes Windows fork switched to a new build structure that does not support
current MSVC build tools. The following patches force MSVC-style flags for use
with `clang-cl`.
:::
`API/jsi/jsi/CMakeLists.txt` should force `/EHsc`:
```diff title="API/jsi/jsi/CMakeLists.txt (apply the following patch)"
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR
"${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
- list(APPEND jsi_compile_flags "-Wno-non-virtual-dtor")
+ list(APPEND jsi_compile_flags "/EHsc")
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
```
`cmake/modules/Hermes.cmake` should force MSVC-style flags:
```diff title="cmake/modules/Hermes.cmake (apply the following patch)"
if (HERMES_ENABLE_EH)
if (GCC_COMPATIBLE)
- list(APPEND flags -fexceptions)
+ list(APPEND flags /EHsc)
elseif (MSVC)
list(APPEND flags /EHsc)
endif ()
else ()
if (GCC_COMPATIBLE)
- list(APPEND flags -fno-exceptions)
+ list(APPEND flags /EHs-c-)
elseif (MSVC)
list(APPEND flags /EHs-c-)
endif ()
endif ()
if (HERMES_ENABLE_RTTI)
if (GCC_COMPATIBLE)
- list(APPEND flags -frtti)
+ list(APPEND flags /GR)
elseif (MSVC)
list(APPEND flags /GR)
endif ()
else ()
if (GCC_COMPATIBLE)
- list(APPEND flags -fno-rtti)
+ list(APPEND flags /GR-)
elseif (MSVC)
list(APPEND flags /GR-)
endif ()
endif ()
```
6) Build the library:
<Tabs groupId="arch">
<TabItem value="x64" label="x64">
```bash
cd hermes-windows
powershell .\.ado\scripts\cibuild.ps1 -AppPlatform win32 -Platform x64 -ToolsPlatform x64
cd ..
cmake -S hermes-windows -B build -G "Visual Studio 17 2022" -A x64 -T ClangCL -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Debug -DHERMES_ENABLE_EH=ON -DHERMES_ENABLE_RTTI=ON
cmake --build build --config Debug
```
:::note pass
@ -735,21 +812,15 @@ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
:::
:::info pass
:::note pass
In some test runs, the command failed when trying to copy `hermes.exe`:
The build may show a number of error messages involving exceptions:
```
Copy-Item: C:\Users\Me\Documents\hermes-windows\.ado\scripts\cibuild.ps1:331
Line |
331 | Copy-Item "$compilerAndToolsBuildPath\bin\hermes.exe" -Destinatio …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Cannot find path 'C:\Users\Me\Documents\hermes-windows\workspace\build\tools\bin\hermes.exe'
| because it does not exist.
error : cannot use 'try' with exceptions disabled
```
The libraries are built first and the standalone binary is not needed when
embedding Hermes, so the error message can be safely ignored.
These errors can be ignored.
:::
@ -764,25 +835,24 @@ cmake --build ./build
</TabItem>
</Tabs>
6) Copy every generated `.lib` and `.dll` file into the main folder:
7) Copy every generated `.lib` and `.dll` file into the main folder:
```powershell
```cmd
for /r build %f in (*.dll) do copy /Y "%f" .
for /r build %f in (*.lib) do copy /Y "%f" .
for /r hermes-windows %f in (*.dll) do copy /Y "%f" .
for /r hermes-windows %f in (*.lib) do copy /Y "%f" .
```
7) Download [`sheetjs-hermes.cpp`](pathname:///hermes/sheetjs-hermesw.cpp):
8) Download [`sheetjs-hermesw.cpp`](pathname:///hermes/sheetjs-hermesw.cpp):
```bash
curl -o sheetjs-hermesw.cpp https://docs.sheetjs.com/hermes/sheetjs-hermesw.cpp
```
8) Build the application:
9) Build the application:
```powershell
cl /MDd sheetjs-hermesw.cpp DbgHelp.lib *.lib /I hermes-windows\API /I hermes-windows\include /I hermes-windows\public\ /I hermes-windows\API\jsi icuuc.lib icuin.lib
```cmd
cl /std:c++17 /EHsc /MTd /Zi /I hermes-windows\API /I hermes-windows\public /I hermes-windows\API\jsi /c sheetjs-hermesw.cpp
link /OUT:sheetjs-hermesw.exe /DEBUG sheetjs-hermesw.obj *.lib winmm.lib
```
:::info pass
@ -790,18 +860,27 @@ cl /MDd sheetjs-hermesw.cpp DbgHelp.lib *.lib /I hermes-windows\API /I hermes-wi
In some test runs, the build failed due to duplicate symbols:
```
hermesVMRuntimeLean.lib(Runtime.obj) : error LNK2005: "private: __cdecl hermes::vm::Runtime::Runtime(class std::shared_ptr<class hermes::vm::StorageProvider>,class hermes::vm::RuntimeConfig const &)" (??0Runtime@vm@hermes@@AEAA@V?$shared_ptr@VStorageProvider@vm@hermes@@@std@@AEBVRuntimeConfig@12@@Z) already defined in hermesVMRuntime.lib(Runtime.obj)
hermesvmlean_a.lib(StaticHUnit.obj) : error LNK2005: _sh_unit_init_guarded already defined in hermesvm.lib(hermesvm.dll)
```
The lean libraries should be manually removed:
Libraries with duplicate symbols should be manually removed:
```pwsh
del *ean.lib
del hermesvm.lib hermesvm.dll hermesvmlean.lib hermesvmlean.dll
```
After deleting the libraries, delete the `sheetjs-hermesw` artifacts and build:
```cmd
del sheetjs-hermesw.*
curl -o sheetjs-hermesw.cpp https://docs.sheetjs.com/hermes/sheetjs-hermesw.cpp
cl /std:c++17 /EHsc /MTd /Zi /I hermes-windows\API /I hermes-windows\public /I hermes-windows\API\jsi /c sheetjs-hermesw.cpp
link /OUT:sheetjs-hermesw.exe /DEBUG sheetjs-hermesw.obj *.lib winmm.lib
```
:::
9) Download the SheetJS Standalone script and the test file. Save both files in
10) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
@ -814,7 +893,7 @@ curl -o xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}/package/dist/xl
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
10) Run the application:
11) Run the application:
```bash
.\sheetjs-hermesw.exe pres.numbers
@ -1006,4 +1085,4 @@ If successful, the script will print CSV data from the test file.
[^4]: See [`sheet_to_csv` in "Utilities"](/docs/api/utilities/csv#csv-output)
[^5]: See [`microsoft/hermes-windows`](https://github.com/microsoft/hermes-windows) on GitHub
[^7]: See ["Download Python"](https://www.python.org/downloads/) in the Python website. When the demo was last tested, Python 3.11.9 was installed.
[^8]: See [the Visual Studio website](https://visualstudio.microsoft.com/#vs-section) for download links.
[^8]: The VS 2022 link was removed from the download page. https://aka.ms/vs/17/release/vs_BuildTools.exe is a direct link.

@ -16,7 +16,7 @@ curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/duk/sheetjs.duk.c
gcc -std=c99 -Wall -osheetjs.duk sheetjs.duk.c duktape.c -lm
gcc -std=c99 -Wall -o sheetjs.duk sheetjs.duk.c duktape.c -lm
./sheetjs.duk pres.numbers
npx -y xlsx-cli sheetjsw.xlsb