diff --git a/docz/docs/02-getting-started/01-installation/02-frameworks.md b/docz/docs/02-getting-started/01-installation/02-frameworks.md index 3c3a15f..7459135 100644 --- a/docz/docs/02-getting-started/01-installation/02-frameworks.md +++ b/docz/docs/02-getting-started/01-installation/02-frameworks.md @@ -57,7 +57,9 @@ new versions are released! ::: -:::warning +### Legacy Endpoints + +:::warning pass Older releases are technically available on the public npm registry as `xlsx`, but the registry is out of date. The latest version on that registry is 0.18.5 @@ -130,7 +132,7 @@ pnpm install file:vendor/xlsx-${current}.tgz`} {`\ -yarn add file:vendor/xlsx-${current}.tgz`} +yarn add file:vendor/xlsx-${current}.tgz`} diff --git a/docz/docs/02-getting-started/01-installation/03-nodejs.md b/docz/docs/02-getting-started/01-installation/03-nodejs.md index 4f33673..af34f1a 100644 --- a/docz/docs/02-getting-started/01-installation/03-nodejs.md +++ b/docz/docs/02-getting-started/01-installation/03-nodejs.md @@ -13,7 +13,7 @@ import CodeBlock from '@theme/CodeBlock'; # NodeJS -Tarballs are available on . +Package tarballs are available on .

https://cdn.sheetjs.com/xlsx-{current}/xlsx-{current}.tgz is the URL for version {current}

@@ -49,7 +49,7 @@ new versions are released! ### Legacy Endpoints -:::warning +:::warning pass Older releases are technically available on the public npm registry as `xlsx`, but the registry is out of date. The latest version on that registry is 0.18.5 @@ -122,7 +122,7 @@ pnpm install file:vendor/xlsx-${current}.tgz`} {`\ -yarn add file:vendor/xlsx-${current}.tgz`} +yarn add file:vendor/xlsx-${current}.tgz`} @@ -131,6 +131,14 @@ The package will be installed and accessible as `xlsx`. ## Usage +The package supports CommonJS `require` and ESM `import` module systems. + +:::info pass + +**It is strongly recommended to use CommonJS in NodeJS.** + +::: + #### CommonJS `require` By default, the module supports `require` and it will automatically add support @@ -163,7 +171,7 @@ XLSX.set_cptable(cpexcel); #### NextJS -:::warning +:::warning pass `fs` cannot be imported from the top level in NextJS pages. This will not work: diff --git a/docz/docs/02-getting-started/02-examples/02-export.mdx b/docz/docs/02-getting-started/02-examples/02-export.mdx index a4e737e..dd801d2 100644 --- a/docz/docs/02-getting-started/02-examples/02-export.mdx +++ b/docz/docs/02-getting-started/02-examples/02-export.mdx @@ -699,7 +699,7 @@ node SheetJSNodeJS.js This script will write a new file `Presidents.xlsx` in the same folder. -:::caution +:::caution pass Native `fetch` support was added in NodeJS 18. For older versions of NodeJS, the script will throw an error `fetch is not defined`. A third-party library @@ -1102,7 +1102,7 @@ in the Files app and can be opened with the Google Sheets app. -:::caution +:::caution pass This demo runs in iOS and requires a Macintosh computer with Xcode installed. diff --git a/docz/docs/02-getting-started/02-examples/04-import.md b/docz/docs/02-getting-started/02-examples/04-import.md index 690ac4b..ff0f9cd 100644 --- a/docz/docs/02-getting-started/02-examples/04-import.md +++ b/docz/docs/02-getting-started/02-examples/04-import.md @@ -1018,7 +1018,7 @@ the Android device can be connected to the computer with a USB cable. -:::caution +:::caution pass This demo runs in iOS and requires a Macintosh computer with Xcode installed. diff --git a/docz/docs/03-demos/01-frontend/03-angular.md b/docz/docs/03-demos/01-frontend/03-angular.md index 78480bb..4484410 100644 --- a/docz/docs/03-demos/01-frontend/03-angular.md +++ b/docz/docs/03-demos/01-frontend/03-angular.md @@ -22,7 +22,7 @@ Other demos cover general Angular deployments, including: - [iOS and Android applications powered by NativeScript](/docs/demos/mobile/nativescript) - [iOS and Android applications powered by Ionic](/docs/demos/mobile/ionic) -:::warning +:::caution pass Angular tooling uses native NodeJS modules. There are a number of issues when trying to run Angular projects with different NodeJS versions. These issues @@ -30,7 +30,7 @@ should be directed to the Angular project. ::: -:::caution +:::warning Telemetry Angular CLI enables telemetry by default. When using a recent version, disable analytics globally through the CLI tool before creating a new project: @@ -340,7 +340,7 @@ this.columns = Array.from({ length: range.e.c + 1 }, (_, i) => ({ ## Older Versions -:::warning +:::warning pass This demo is included for legacy deployments. There are incompatibilities with different NodeJS and other ecosystem versions. Issues should be raised with diff --git a/docz/docs/03-demos/01-frontend/08-bundler.md b/docz/docs/03-demos/01-frontend/08-bundler.md index fee1bf4..f463ea4 100644 --- a/docz/docs/03-demos/01-frontend/08-bundler.md +++ b/docz/docs/03-demos/01-frontend/08-bundler.md @@ -850,7 +850,7 @@ Click on "Click here to export" to generate a file. SWC provides `spack` for bundling scripts. -:::warning +:::warning pass When this demo was last tested, there was a bug affecting 1.2.247 and 1.3 . It is strongly recommended to use `@swc/core@1.2.245` until the bug is fixed. diff --git a/docz/docs/03-demos/02-grid/index.md b/docz/docs/03-demos/02-grid/index.md index 3a65e86..48e093f 100644 --- a/docz/docs/03-demos/02-grid/index.md +++ b/docz/docs/03-demos/02-grid/index.md @@ -56,7 +56,7 @@ through a special Export button. It handles the SheetJS operations internally. ### Angular UI Grid -:::warning +:::warning pass This UI Grid is for AngularJS, not the modern Angular. New projects should not use AngularJS. This demo is included for legacy applications. @@ -124,7 +124,7 @@ function export_html_table(table) { } // yes, it's that easy! ``` -:::info +:::info pass SheetJS CE is focused on data preservation and will extract values from tables. diff --git a/docz/docs/03-demos/03-net/01-network.mdx b/docz/docs/03-demos/03-net/01-network.mdx index 7ece1de..1795806 100644 --- a/docz/docs/03-demos/03-net/01-network.mdx +++ b/docz/docs/03-demos/03-net/01-network.mdx @@ -665,7 +665,7 @@ was added to the platform, third party modules wrapped the native APIs. #### request -:::warning +:::warning pass `request` has been deprecated and should only be used in legacy deployments. diff --git a/docz/docs/03-demos/03-net/03-email.md b/docz/docs/03-demos/03-net/03-email.md index 056201e..e64bee1 100644 --- a/docz/docs/03-demos/03-net/03-email.md +++ b/docz/docs/03-demos/03-net/03-email.md @@ -22,7 +22,7 @@ This demo covers three workflows: - [Reading mail](#reading-mail) covers libraries for reading messages - [Data files](#data-files) covers mailbox file formats -:::warning +:::warning pass There are a number of caveats when dealing with live mail servers. It is advised to follow connector module documentation carefully and test with new accounts @@ -32,7 +32,7 @@ before integrating with important inboxes or accounts. ## Live Servers -:::warning +:::warning pass It is strongly advised to use a test email address before using an important address. One small mistake could erase decades of messages or result in a block diff --git a/docz/docs/03-demos/06-desktop/06-reactnative.md b/docz/docs/03-demos/06-desktop/06-reactnative.md index e343c4d..b0b451a 100644 --- a/docz/docs/03-demos/06-desktop/06-reactnative.md +++ b/docz/docs/03-demos/06-desktop/06-reactnative.md @@ -1,5 +1,5 @@ --- -title: React Native +title: Sheets on the Desktop with React Native sidebar_label: React Native description: Build data-intensive desktop apps with React Native. Seamlessly integrate spreadsheets into your app using SheetJS. Securely process and generate Excel files at the desk. pagination_prev: demos/mobile/index @@ -9,8 +9,6 @@ sidebar_custom_props: summary: Native Components with React --- -# Sheets on the Desktop with React Native - import current from '/version.js'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -50,8 +48,9 @@ This demo was tested in the following environments: |:---------------|:-----|:------------|:-----------| | Windows 10 | x64 | `v0.71.25` | 2023-07-24 | | Windows 11 | x64 | `v0.71.11` | 2023-05-11 | +| Windows 11 | ARM | `v0.72.9` | 2023-09-18 | | MacOS 12.6 | x64 | `v0.71.26` | 2023-07-23 | -| MacOS 13.4 | ARM | `v0.71.18` | 2023-07-06 | +| MacOS 13.5.2 | ARM | `v0.72.4` | 2023-09-18 | ::: @@ -62,6 +61,20 @@ applications, [check the mobile demo](/docs/demos/mobile/reactnative) ::: +:::warning Telemetry + +**React Native for Windows + macOS commands include telemetry without proper** +**disclaimer or global opt-out.** + +The recommended approach for suppressing telemetry is explicitly passing the +`--no-telemetry` flag. The following commands are known to support the flag: + +- Initializing a macOS project with `react-native-macos-init` +- Initializing a Windows project with `react-native-windows-init` +- Running Windows apps with `react-native run-windows` + +::: + ## Integration Details The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be @@ -366,7 +379,7 @@ RCT_EXPORT_METHOD(PickAndRead:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromi ## Windows Demo -:::warning +:::warning pass There is no simple standalone executable file at the end of the process. @@ -393,10 +406,10 @@ used to switch the NodeJS version. ### Project Setup -1) Create a new project using React Native `0.71`: +1) Create a new project using React Native `0.72`: ```bash -npx react-native init SheetJSWin --template react-native@^0.71.0 +npx react-native init SheetJSWin --template react-native@^0.72.0 cd SheetJSWin ``` @@ -427,6 +440,9 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} 4) To ensure that the app works, launch the app: + + + ```bash npx react-native run-windows --no-telemetry ``` @@ -441,6 +457,30 @@ Specific Windows SDK versions can be installed through Visual Studio Installer. ::: + + + +```bash +npx react-native run-windows --no-telemetry --arch=X86 +``` + +:::warning pass + +The ARM64 binary is normally built with + +```bash +npx react-native run-windows --no-telemetry --arch=ARM64 +``` + +When this demo was last tested on Windows 11 ARM, the build failed. + +**As it affects the starter project, it is a bug in ARM64 React Native Windows** + +::: + + + + ### Native Module @@ -540,10 +580,37 @@ curl -LO https://docs.sheetjs.com/reactnative/rnw/App.tsx 8) Test the app again: + + + ```bash npx react-native run-windows --no-telemetry ``` + + + +```bash +npx react-native run-windows --no-telemetry --arch=X86 +``` + +:::warning pass + +The ARM64 binary is normally built with + +```bash +npx react-native run-windows --no-telemetry --arch=ARM64 +``` + +When this demo was last tested on Windows 11 ARM, the build failed. + +**As it affects the starter project, it is a bug in ARM64 React Native Windows** + +::: + + + + Download . Click "Click here to Open File!" and use the file picker to select `pres.xlsx` . @@ -556,10 +623,10 @@ The app will refresh and display the data from the file. ### Project Setup -1) Create a new React Native project using React Native `0.71`: +1) Create a new React Native project using React Native `0.72`: ```bash -npx -y react-native init SheetJSmacOS --template react-native@^0.71.0 +npx -y react-native init SheetJSmacOS --template react-native@^0.72.0 cd SheetJSmacOS ``` diff --git a/docz/docs/03-demos/07-data/09-alasql.md b/docz/docs/03-demos/07-data/19-alasql.md similarity index 100% rename from docz/docs/03-demos/07-data/09-alasql.md rename to docz/docs/03-demos/07-data/19-alasql.md diff --git a/docz/docs/03-demos/07-data/26-redis.md b/docz/docs/03-demos/07-data/26-redis.md index d5b71c5..bae4bef 100644 --- a/docz/docs/03-demos/07-data/26-redis.md +++ b/docz/docs/03-demos/07-data/26-redis.md @@ -215,7 +215,7 @@ module 4.6.7 and NodeJS 20.5.1. ::: -:::warning +:::warning pass The most recent version of the `redis` node module does not work with most versions of NodeJS. It is "ESM-only", requiring NodeJS 18 or later. As a result, diff --git a/docz/docs/03-demos/08-local/09-indexeddb.md b/docz/docs/03-demos/08-local/09-indexeddb.md index 74953b6..6920989 100644 --- a/docz/docs/03-demos/08-local/09-indexeddb.md +++ b/docz/docs/03-demos/08-local/09-indexeddb.md @@ -11,7 +11,7 @@ sidebar_custom_props: -:::warning +:::warning pass IndexedDB is a very low-level API. diff --git a/docz/docs/03-demos/09-cloud/01-salesforce.md b/docz/docs/03-demos/09-cloud/01-salesforce.md index 4900bbd..61ae0e0 100644 --- a/docz/docs/03-demos/09-cloud/01-salesforce.md +++ b/docz/docs/03-demos/09-cloud/01-salesforce.md @@ -123,7 +123,7 @@ to be renamed to `sheetjs.js` when adding the static resource.

1) Download https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.full.min.js

-:::warning +:::warning pass **DO NOT "COPY AND PASTE"!** The file should be explicitly downloaded. Copying and pasting corrupts the source code and the component will fail in subtle ways. diff --git a/docz/docs/03-demos/09-cloud/12-azure.md b/docz/docs/03-demos/09-cloud/12-azure.md index 674cd2a..609fe8f 100644 --- a/docz/docs/03-demos/09-cloud/12-azure.md +++ b/docz/docs/03-demos/09-cloud/12-azure.md @@ -30,7 +30,7 @@ This was tested on 2023 April 29. This discussion focuses on the "HTTP Trigger" function type. -:::info +:::info pass To enable binary data processing, a setting must be changed in `function.json`: diff --git a/docz/docs/03-demos/09-cloud/18-github.md b/docz/docs/03-demos/09-cloud/18-github.md index 7fce5b2..2e06955 100644 --- a/docz/docs/03-demos/09-cloud/18-github.md +++ b/docz/docs/03-demos/09-cloud/18-github.md @@ -104,7 +104,7 @@ the source data or artifacts from the `postprocess` script changed. ### Post-Processing Data -:::warning +:::warning pass The `flat-postprocessing` library includes a number of utilities for different data formats. The `readXLSX` helper uses SheetJS under the hood. diff --git a/docz/docs/03-demos/09-cloud/19-deno.md b/docz/docs/03-demos/09-cloud/19-deno.md index 565a4bc..e17f280 100644 --- a/docz/docs/03-demos/09-cloud/19-deno.md +++ b/docz/docs/03-demos/09-cloud/19-deno.md @@ -12,7 +12,7 @@ Deno Deploy offers "Serverless Functions" powered by Deno. The [Deno installation](/docs/getting-started/installation/deno) instructions apply to Deno Deploy scripts. -:::warning +:::warning pass Deno Deploy does not offer any sort of temporary file access in functions. diff --git a/docz/docs/03-demos/09-cloud/21-gsheet.md b/docz/docs/03-demos/09-cloud/21-gsheet.md index 10bb931..dd7f49f 100644 --- a/docz/docs/03-demos/09-cloud/21-gsheet.md +++ b/docz/docs/03-demos/09-cloud/21-gsheet.md @@ -692,7 +692,7 @@ JSON file in step 27. The `./` prefix is required! 39) Run the script: ```bash -node load.mjs +node dump.mjs ``` The script should create a file `SheetJS.xlsb` in the project folder. This file diff --git a/docz/docs/03-demos/09-cloud/31-dropbox.mdx b/docz/docs/03-demos/09-cloud/31-dropbox.mdx index bd1cb76..028c225 100644 --- a/docz/docs/03-demos/09-cloud/31-dropbox.mdx +++ b/docz/docs/03-demos/09-cloud/31-dropbox.mdx @@ -204,7 +204,7 @@ var button = Dropbox.createSaveButton( url, "SheetJSDropbox.xls", { document.appendChild(button); ``` -:::info +:::info pass The file must be written before the Save button is created. diff --git a/docz/docs/03-demos/42-engines/05-jint.md b/docz/docs/03-demos/42-engines/05-jint.md index 7f8e516..acf0780 100644 --- a/docz/docs/03-demos/42-engines/05-jint.md +++ b/docz/docs/03-demos/42-engines/05-jint.md @@ -25,6 +25,17 @@ The ["Integration Example"](#integration-example) section includes a complete command-line tool for reading arbitrary workbooks and writing data to XLSB (Excel 2007+ Binary Format) workbooks. +:::warning Telemetry + +**The `dotnet` command embeds telemetry.** + +The `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable should be set to `1`. + +["Platform Configuration"](#platform-configuration) includes instructions for +setting the environment variable on supported platforms. + +::: + ## Integration Details :::note pass diff --git a/docz/docs/03-demos/42-engines/20_chakra.md b/docz/docs/03-demos/42-engines/20_chakra.md index 6baec24..df84bb7 100644 --- a/docz/docs/03-demos/42-engines/20_chakra.md +++ b/docz/docs/03-demos/42-engines/20_chakra.md @@ -203,7 +203,7 @@ cd ..
-:::info +:::info pass When the demo was last tested, ChakraCore JIT was not supported. diff --git a/docz/docs/03-demos/42-engines/22_perl.md b/docz/docs/03-demos/42-engines/22_perl.md index c135960..747606c 100644 --- a/docz/docs/03-demos/42-engines/22_perl.md +++ b/docz/docs/03-demos/42-engines/22_perl.md @@ -7,7 +7,7 @@ pagination_next: solutions/input import current from '/version.js'; import CodeBlock from '@theme/CodeBlock'; -:::warning +:::warning pass In a production application, it is strongly recommended to use a binding for a C engine like [`JavaScript::Duktape`](/docs/demos/engines/duktape#perl) diff --git a/docz/docs/06-solutions/01-input.md b/docz/docs/06-solutions/01-input.md index 207b1df..8f13f1f 100644 --- a/docz/docs/06-solutions/01-input.md +++ b/docz/docs/06-solutions/01-input.md @@ -42,7 +42,7 @@ The `readFile` method attempts to read a spreadsheet file at the supplied path. The second `opts` argument is optional. ["Parsing Options"](/docs/api/parse-options) covers the supported properties and behaviors. -:::warning +:::warning pass Browsers generally do not allow reading files by specifying filename (it is a security risk), and running `XLSX.readFile` in the browser will throw an error. diff --git a/docz/docs/06-solutions/05-output.md b/docz/docs/06-solutions/05-output.md index 4990169..8b93ead 100644 --- a/docz/docs/06-solutions/05-output.md +++ b/docz/docs/06-solutions/05-output.md @@ -136,7 +136,7 @@ worker.addEventListener('message', function(e) {
SWF workaround for Windows 95+ (click to show) -:::warning +:::warning pass Each moving part in this solution has been deprecated years ago: diff --git a/docz/docs/08-api/07-utilities/01-array.md b/docz/docs/08-api/07-utilities/01-array.md index a9eabcc..b7e3ce5 100644 --- a/docz/docs/08-api/07-utilities/01-array.md +++ b/docz/docs/08-api/07-utilities/01-array.md @@ -338,7 +338,7 @@ function SheetJSExportAOO() { ``` -:::info +:::info pass The [example sheet](#example-sheet) cannot be reproduced using plain objects since JS object keys must be unique. diff --git a/docz/docs/09-miscellany/05-contributing.md b/docz/docs/09-miscellany/05-contributing.md index 6d9902d..d6c9643 100644 --- a/docz/docs/09-miscellany/05-contributing.md +++ b/docz/docs/09-miscellany/05-contributing.md @@ -45,6 +45,7 @@ These instructions were tested on the following platforms: | MacOS 13.0 (ARM64) | 2023-04-13 | | Windows 10 (x64) + WSL Ubuntu | 2023-07-23 | | Windows 11 (x64) + WSL Ubuntu | 2023-08-31 | +| Windows 11 (ARM) + WSL Ubuntu | 2023-09-18 | With some additional dependencies, the unminified scripts are reproducible and tests will pass in Windows XP with NodeJS 5.10.0. @@ -63,7 +64,17 @@ import TabItem from '@theme/TabItem'; A) Ensure WSL ("WSL 2" in Windows 10) and the Ubuntu distribution are installed. -B) Install mercurial and subversion. +B) Install mercurial and subversion: + +```bash +sudo apt-get update +sudo apt-get install mercurial subversion +``` + +:::note pass + +In some Windows 10 runs, `mercurial` and `subversion` were not available in the +default Ubuntu distro. A separate repository is available: ```bash # Install support programs for the build and test commands @@ -73,6 +84,15 @@ sudo apt-get install mercurial subversion sudo add-apt-repository --remove ppa:mercurial-ppa/releases ``` +If the first command displays an error involving a missing release file, remove +the repo before proceeding: + +```bash +sudo add-apt-repository --remove ppa:mercurial-ppa/releases +``` + +::: + C) Install NodeJS :::info pass @@ -110,17 +130,25 @@ sudo apt-get install -y npm ::: -D) Build and install a version of Git with proper SSL support: +D) Test clone the [`js-crc32` repo](https://git.sheetjs.com/sheetjs/js-crc32) + +```bash +git clone https://git.sheetjs.com/sheetjs/js-crc32 +``` + +If this clone fails with an error message that mentions SSL or secure connection +or certificates, build and install a version of Git with proper SSL support: ```bash # Git does not support OpenSSL out of the box, must do this -curl -LO https://github.com/paul-nelson-baker/git-openssl-shellscript/raw/main/compile-git-with-openssl.sh +curl -LO https://github.com/niko-dunixi/git-openssl-shellscript/raw/main/compile-git-with-openssl.sh chmod +x compile-git-with-openssl.sh ./compile-git-with-openssl.sh ``` E) Set `git` config `core.autocrlf` setting to `false`. The following commands -should be run twice, once within PowerShell and once within WSL bash: +should be run twice, once within PowerShell (if Git for Windows is installed) +and once within WSL bash: ```bash git config --global --add core.autocrlf false @@ -167,7 +195,7 @@ brew install mercurial subversion E) Install NodeJS -:::note +:::note pass [The official NodeJS site](https://nodejs.org/en/download/) provides installers for "LTS" and "Current" releases. The "LTS" version should be installed. @@ -221,7 +249,7 @@ sudo pacman-key --refresh-keys sudo pacman -S base-devel mercurial subversion ``` -:::note +:::note pass In local testing on the Steam Deck, some of the C / C++ demos failed to build. This issue was resolved by manually installing `glibc` and `linux-api-headers`: @@ -238,7 +266,7 @@ This is *not required* for building or testing the library. After installing mercurial and subversion, install NodeJS. -:::note +:::note pass [The official NodeJS site](https://nodejs.org/en/download/) provides installers for "LTS" and "Current" releases. The "LTS" version should be installed. @@ -285,7 +313,13 @@ make init This step may take a while as it will be downloading a number of test files. -3) Run a build and verify with a short test: +3) Run the `esbuild` tool once: + +```bash +npx -y esbuild@0.14.14 +``` + +4) Run a build and verify with a short test: ```bash # Full Build @@ -302,7 +336,7 @@ git checkout -- . ### Reproduce official builds -4) Run `git log` and search for the commit that matches a particular release +5) Run `git log` and search for the commit that matches a particular release version. For example, version `0.20.0` can be found with: ```bash @@ -321,13 +355,13 @@ Date: Fri Jun 23 05:48:47 2023 -0400 version bump 0.20.0 ``` -5) Switch to that commit: +6) Switch to that commit: ```bash git checkout 955543147dac0274d20307057c5a9f3e3e5d5307 ``` -6) Run the full build sequence +7) Run the full build sequence ```bash make clean; make @@ -336,7 +370,7 @@ make make dist ``` -7) To verify that the files are intact, use `md5sum` (`md5` on MacOS). +8) To verify that the files are intact, use `md5sum` (`md5` on MacOS). The local checksum for the browser script can be computed with: @@ -354,7 +388,7 @@ $ curl -L https://cdn.sheetjs.com/xlsx-0.20.0/package/dist/xlsx.full.min.js | md The two hashes should match. -8) To return to the HEAD commit, run +9) To return to the HEAD commit, run ```bash git checkout master @@ -362,7 +396,7 @@ git checkout master ### Test in web browsers -9) Start local server: +10) Start local server: ```bash make ctestserv @@ -374,7 +408,7 @@ The terminal will display a port number. For example: Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ``` -10) Open a browser window and access `http://localhost:8000`, replacing `8000` +11) Open a browser window and access `http://localhost:8000`, replacing `8000` with the port number from the terminal window. ## Development