diff --git a/Makefile b/Makefile
index 9dee755..2bb285a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 .PHONY: build
 build:
-	cp formats.png docz/docs/img/formats.png
+	cp formats.png docz/static/formats.png
 	cd docz; npx -y pnpm build; cd ..
 	rm -rf docs
 	mv docz/build/ docs
diff --git a/docz/docs/02-getting-started/01-installation/01-standalone.mdx b/docz/docs/02-getting-started/01-installation/01-standalone.mdx
index 6482eb5..a0c63c4 100644
--- a/docz/docs/02-getting-started/01-installation/01-standalone.mdx
+++ b/docz/docs/02-getting-started/01-installation/01-standalone.mdx
@@ -106,7 +106,7 @@ importScripts("https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.mi
 
 This section refers to imports using `script type="module"`.  For imports in
 modern projects using Webpack or React or Angular or VueJS, the installation is
-described [in the next section](./frameworks).
+described [in the next section](/docs/getting-started/installation/frameworks).
 
 :::
 
@@ -150,7 +150,7 @@ xport.addEventListener("click", async() => {
 `}
 
 
-Web Worker support is noted in [the demo](../../demos/worker#installation)
+Web Worker support is noted in [the demo](/docs/demos/worker#installation)
 
 ## Bower
 
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 a60c2e3..0718e76 100644
--- a/docz/docs/02-getting-started/01-installation/02-frameworks.md
+++ b/docz/docs/02-getting-started/01-installation/02-frameworks.md
@@ -41,7 +41,7 @@ Once installed, the library can be imported under the name `xlsx`:
 import { read, writeFileXLSX } from "xlsx";
 ```
 
-The ["Bundlers" demo](../../demos/bundler) includes examples for specific
+The ["Bundlers" demo](/docs/demos/bundler) includes examples for specific
 bundler tools.
 
 :::warning
diff --git a/docz/docs/02-getting-started/01-installation/04-amd.md b/docz/docs/02-getting-started/01-installation/04-amd.md
index 5790def..22e5100 100644
--- a/docz/docs/02-getting-started/01-installation/04-amd.md
+++ b/docz/docs/02-getting-started/01-installation/04-amd.md
@@ -36,7 +36,7 @@ define(['N/file', './xlsx.full.min'], function(file, XLSX) {
 })
 ```
 
-As explained in the [NetSuite demo](../../demos/netsuite), module
+As explained in the [NetSuite demo](/docs/demos/netsuite), module
 aliases are created in config files referenced via `@NAmdConfig` comments.
 
 ## SAP UI5
@@ -95,7 +95,7 @@ require(['xlsx'], function(XLSX) {
 Dojo has changed module loading strategies over the years.  These examples were
 tested with Dojo `1.10.4` and are not guaranteed to work with other versions.
 
-Live demos are included in ["Dojo Toolkit"](../../demos/legacy#dojo-toolkit)
+Live demos are included in ["Dojo Toolkit"](/docs/demos/legacy#dojo-toolkit)
 
 :::caution
 
diff --git a/docz/docs/02-getting-started/02-example.mdx b/docz/docs/02-getting-started/02-example.mdx
index 95b6174..ff66e08 100644
--- a/docz/docs/02-getting-started/02-example.mdx
+++ b/docz/docs/02-getting-started/02-example.mdx
@@ -99,7 +99,7 @@ XLSX.utils.book_append_sheet(workbook, worksheet, "Dates");
 
 The data is in the workbook and can be exported.
 
-
+
 
 There are multiple opportunities for improvement: the headers can be renamed and
 the column widths can be adjusted.  [SheetJS Pro](https://sheetjs.com/pro) offers
@@ -160,7 +160,7 @@ support other common export formats like `.xls` or `.xlsb` or `.csv`.
 XLSX.writeFile(workbook, "Presidents.xlsx", { compression: true });
 ```
 
-
+
 
 
 ## Live Demo
diff --git a/docz/docs/02-getting-started/03-roadmap.md b/docz/docs/02-getting-started/03-roadmap.md
index e4605bf..3011b5e 100644
--- a/docz/docs/02-getting-started/03-roadmap.md
+++ b/docz/docs/02-getting-started/03-roadmap.md
@@ -54,14 +54,14 @@ Utility functions help with step 3.
 
 ## Highlights
 
-["Data Import"](../solutions/input) describes solutions for common data import
+["Data Import"](/docs/solutions/input) describes solutions for common data import
 scenarios.
 
-["Data Export"](../solutions/output) describes solutions for common data export
+["Data Export"](/docs/solutions/output) describes solutions for common data export
 scenarios.
 
-["Data Processing"](../solutions/processing) describes solutions for common
+["Data Processing"](/docs/solutions/processing) describes solutions for common
 workbook processing and manipulation scenarios.
 
-["Utility Functions"](../api/utilities) details utility functions for
+["Utility Functions"](/docs/api/utilities) details utility functions for
 translating JSON Arrays and other common JS structures into worksheet objects.
diff --git a/docz/docs/02-getting-started/04-zen.md b/docz/docs/02-getting-started/04-zen.md
index 40bc92c..259c64d 100644
--- a/docz/docs/02-getting-started/04-zen.md
+++ b/docz/docs/02-getting-started/04-zen.md
@@ -15,14 +15,14 @@ Web Workers and future APIs.
 
 ### JavaScript is a powerful language for data processing
 
-The ["Common Spreadsheet Format"](../csf/general) is a simple object
+The ["Common Spreadsheet Format"](/docs/csf/general) is a simple object
 representation of the core concepts of a workbook.  The various functions in the
 library provide low-level tools for working with the object.
 
 For friendly JS processing, there are utility functions for converting parts of
-a worksheet to/from an Array of Arrays.  The [Complete example](./02-example.mdx)
+a worksheet to/from an Array of Arrays.  The [Tutorial](/docs/getting-started/example)
 combines powerful JS Array methods with a network request library to download
-data, select the information we want and create a workbook file:
+data, select the information we want and create a workbook file.
 
 ### File formats are implementation details
 
diff --git a/docz/docs/02-getting-started/index.md b/docz/docs/02-getting-started/index.md
index 0325819..d8705a5 100644
--- a/docz/docs/02-getting-started/index.md
+++ b/docz/docs/02-getting-started/index.md
@@ -5,8 +5,8 @@ pagination_next: getting-started/example
 
 # Getting Started
 
-["Tutorial"](./02-example.mdx) is a live example that covers general data
-munging and data export to spreadsheets.
+["Tutorial"](/docs/getting-started/example) is a live example that covers
+general data munging and data export to spreadsheets.
 
 ## Installation
 
diff --git a/docz/docs/03-demos/01-salesforce.md b/docz/docs/03-demos/01-salesforce.md
index 9ac253c..1d14421 100644
--- a/docz/docs/03-demos/01-salesforce.md
+++ b/docz/docs/03-demos/01-salesforce.md
@@ -109,7 +109,7 @@ should see a page like
 
 ## Adding the Standalone Script
 
-The [standalone script](../getting-started/installation/standalone) can be downloaded and
+The [standalone script](/docs/getting-started/installation/standalone) can be downloaded and
 added as a static resource.  Due to Salesforce naming restrictions, it will have
 to be renamed to `sheetjs.js` when adding the static resource.
 
diff --git a/docz/docs/03-demos/02-mobile.md b/docz/docs/03-demos/02-mobile.md
index fc46745..4e41096 100644
--- a/docz/docs/03-demos/02-mobile.md
+++ b/docz/docs/03-demos/02-mobile.md
@@ -22,7 +22,7 @@ Each demo section will mention test dates and platform versions.
 
 :::
 
-The ["JavaScript Engines"](./engines) section includes samples for JavaScript
+The ["JavaScript Engines"](/docs/demos/engines) section includes samples for JavaScript
 engines used in the mobile app frameworks.  SheetJS libraries have been tested
 in the relevant engines and should "just work" with some caveats.
 
diff --git a/docz/docs/03-demos/03-desktop.md b/docz/docs/03-demos/03-desktop.md
index 10e3636..0e02c7b 100644
--- a/docz/docs/03-demos/03-desktop.md
+++ b/docz/docs/03-demos/03-desktop.md
@@ -11,7 +11,7 @@ windowing framework. SheetJS is compatible with many app frameworks.
 
 ## NW.js
 
-The [Standalone scripts](../getting-started/installation/standalone) can be
+The [Standalone scripts](/docs/getting-started/installation/standalone) can be
 referenced in a `SCRIPT` tag from the entry point HTML page.
 
 This demo was tested against NW.js 0.66.0.
@@ -68,7 +68,7 @@ This will generate the standalone app in the `build\sheetjs-nwjs\` folder.
 The standard HTML5 `FileReader` techniques from the browser apply to NW.js!
 
 NW.js handles the OS minutiae for dragging files into app windows.  The
-[drag and drop snippet](../solutions/input#example-user-submissions) apply
+[drag and drop snippet](/docs/solutions/input#example-user-submissions) apply
 to DIV elements on the page.
 
 Similarly, file input elements automatically map to standard Web APIs.
@@ -131,7 +131,7 @@ input.click();
 
 ## Electron
 
-The [NodeJS Module](../getting-started/installation/nodejs) can be imported
+The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
 from the main or the renderer thread.
 
 Electron presents a `fs` module.  The `require('xlsx')` call loads the CommonJS
@@ -188,7 +188,7 @@ For a recent Intel Mac, the path will be `out/sheetjs-electron-darwin-x64/`
 
 ### Writing Files
 
-[`XLSX.writeFile`](../api/write-options) writes workbooks to the file system.
+[`XLSX.writeFile`](/docs/api/write-options) writes workbooks to the file system.
 `showSaveDialog` shows a Save As dialog and returns the selected file name:
 
 ```js
@@ -256,7 +256,7 @@ document.getElementById("xlf").addEventListener("change", handleFile, false);
 
 **Drag and Drop**
 
-The [drag and drop snippet](../solutions/input#example-user-submissions)
+The [drag and drop snippet](/docs/solutions/input#example-user-submissions)
 applies to DIV elements on the page.
 
 For example, assuming a DIV on the page:
@@ -284,7 +284,7 @@ document.getElementById("drop").addEventListener("drop", handleDrop, false);
 
 **Electron API**
 
-[`XLSX.readFile`](../api/parse-options) reads workbooks from the file system.
+[`XLSX.readFile`](/docs/api/parse-options) reads workbooks from the file system.
 `showOpenDialog` shows a Save As dialog and returns the selected file name.
 Unlike the Web APIs, the `showOpenDialog` flow can be initiated by app code:
 
@@ -351,7 +351,7 @@ call is required to enable Developer Tools in the window.
 
 ## Tauri
 
-The [NodeJS Module](../getting-started/installation/nodejs) can be imported
+The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
 from JavaScript code.
 
 This demo was tested against Tauri 1.0.5 on 2022 August 13.
@@ -555,7 +555,7 @@ async function saveFile(wb) {
 
 ## Wails
 
-The [NodeJS Module](../getting-started/installation/nodejs) can be imported
+The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
 from JavaScript code.
 
 This demo was tested against Wails `v2.0.0-beta.44.2` on 2022 August 31 using
@@ -767,7 +767,7 @@ async function exportFile(wb) {
 
 ## NeutralinoJS
 
-The [Standalone build](../getting-started/installation/standalone) can be added
+The [Standalone build](/docs/getting-started/installation/standalone) can be added
 to the entry `index.html`
 
 This demo was tested against "binaries" `4.7.0` and "client" `3.6.0`
@@ -1003,7 +1003,7 @@ async function saveFile(wb) {
 
 ## React Native Windows
 
-The [NodeJS Module](../getting-started/installation/nodejs) can be imported
+The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
 from the main app script.  File operations must be written in native code.
 
 This demo was tested against `v0.69.6` on 2022 September 07 in Windows 10.
@@ -1360,7 +1360,7 @@ async() => {
 
 ## React Native MacOS
 
-The [NodeJS Module](../getting-started/installation/nodejs) can be imported
+The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
 from the main app script.  File operations must be written in native code.
 
 This demo was tested against `v0.64.30` on 2022 September 10 in MacOS 12.4
diff --git a/docz/docs/03-demos/04-grid.md b/docz/docs/03-demos/04-grid.md
index e65f544..8df043c 100644
--- a/docz/docs/03-demos/04-grid.md
+++ b/docz/docs/03-demos/04-grid.md
@@ -213,7 +213,7 @@ through a special Export button.  It handles the SheetJS operations internally.
 This UI Grid is for AngularJS, not the modern Angular.  New projects should not
 use AngularJS.  This demo is included for legacy applications.
 
-The [AngularJS demo](./legacy#angularjs) covers more general strategies.
+The [AngularJS demo](/docs/demos/legacy#angularjs) covers more general strategies.
 
 :::
 
diff --git a/docz/docs/03-demos/05-database.md b/docz/docs/03-demos/05-database.md
index 05b1120..b053e48 100644
--- a/docz/docs/03-demos/05-database.md
+++ b/docz/docs/03-demos/05-database.md
@@ -16,7 +16,7 @@ database systems.  The examples are merely intended to demonstrate very basic
 functionality.
 
 Key-value stores, unstructured use of Document Databases, and other schema-less
-databases are covered in the [NoSQL demo](./nosql).
+databases are covered in the [NoSQL demo](/docs/demos/nosql).
 
 
 ## Structured Tables
diff --git a/docz/docs/03-demos/06-content.md b/docz/docs/03-demos/06-content.md
index 459d99b..fc3d928 100644
--- a/docz/docs/03-demos/06-content.md
+++ b/docz/docs/03-demos/06-content.md
@@ -106,7 +106,7 @@ in the parsing logic, issues should then be raised with the SheetJS project.
 
 :::note
 
-Library integration in ViteJS is covered in ["Bundlers" demo](./bundler#vite)
+Library integration in ViteJS is covered in ["Bundlers" demo](/docs/demos/bundler#vite)
 
 :::
 
diff --git a/docz/docs/03-demos/07-worker.md b/docz/docs/03-demos/07-worker.md
index 96611aa..d7c7439 100644
--- a/docz/docs/03-demos/07-worker.md
+++ b/docz/docs/03-demos/07-worker.md
@@ -17,7 +17,7 @@ added later.  Feature testing is highly recommended.
 
 ## Installation
 
-In all cases, `importScripts` can load the [Standalone scripts](../getting-started/installation/standalone)
+In all cases, `importScripts` can load the [Standalone scripts](/docs/getting-started/installation/standalone)
 
 ```js
 importScripts("https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js");
diff --git a/docz/docs/03-demos/11-angular.md b/docz/docs/03-demos/11-angular.md
index 77d02e2..c4ee60a 100644
--- a/docz/docs/03-demos/11-angular.md
+++ b/docz/docs/03-demos/11-angular.md
@@ -14,8 +14,8 @@ and TypeScript familiarity is assumed.
 
 Other demos cover general Angular deployments, including:
 
-- [iOS and Android applications powered by NativeScript](./mobile#nativescript)
-- [iOS and Android applications powered by Ionic](./mobile#ionic)
+- [iOS and Android applications powered by NativeScript](/docs/demos/mobile#nativescript)
+- [iOS and Android applications powered by Ionic](/docs/demos/mobile#ionic)
 
 :::warning
 
@@ -28,7 +28,7 @@ should be directed to the Angular project.
 
 ## Installation
 
-[The "Frameworks" section](../getting-started/installation/frameworks) covers
+[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
 installation with `pnpm` and other package managers.
 
 The library can be imported directly from JS or TS code with:
@@ -324,7 +324,7 @@ In the component, `aoa_to_sheet` is used to generate the worksheet:
 The default angular-cli configuration requires no additional configuration.
 
 Some deployments use the SystemJS loader, which does require configuration.
-[The SystemJS demo](./bundler#systemjs) describe the required settings.
+[The SystemJS demo](/docs/demos/bundler#systemjs) describe the required settings.
 
 
 ### Legacy Demo
diff --git a/docz/docs/03-demos/12-react.md b/docz/docs/03-demos/12-react.md
index f6103c9..0293b54 100644
--- a/docz/docs/03-demos/12-react.md
+++ b/docz/docs/03-demos/12-react.md
@@ -9,15 +9,15 @@ familiarity is assumed.
 
 Other demos cover general React deployments, including:
 
-- [Static Site Generation powered by NextJS](./content#nextjs)
-- [iOS and Android applications powered by React Native](./mobile#react-native)
-- [Desktop application powered by React-Native-Windows](./desktop#react-native-windows)
-- [React Data Grid UI component](./grid#react-data-grid)
+- [Static Site Generation powered by NextJS](/docs/demos/content#nextjs)
+- [iOS and Android applications powered by React Native](/docs/demos/mobile#react-native)
+- [Desktop application powered by React-Native-Windows](/docs/demos/desktop#react-native-windows)
+- [React Data Grid UI component](/docs/demos/grid#react-data-grid)
 
 
 ## Installation
 
-[The "Frameworks" section](../getting-started/installation/frameworks) covers
+[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
 installation with Yarn and other package managers.
 
 The library can be imported directly from JS or JSX code with:
@@ -171,7 +171,7 @@ generate column headings and for indexing into the row objects.
 The safest approach is to use an array of arrays for state and to generate
 column objects that map to A1-Style column headers.
 
-The [React Data Grid demo](./grid#rows-and-columns-state) uses this approach
+The [React Data Grid demo](/docs/demos/grid#rows-and-columns-state) uses this approach
 with the following column and row structure:
 
 ```js
@@ -195,7 +195,7 @@ const columns = Array.from({ length: range.e.c + 1 }, (_, i) => ({
 
 ## Legacy Deployments
 
-[The Standalone Scripts](../getting-started/installation/standalone) play nice
+[The Standalone Scripts](/docs/getting-started/installation/standalone) play nice
 with legacy deployments that do not use a bundler.
 
 [The legacy demo](pathname:///react/index.html) shows a simple React component
diff --git a/docz/docs/03-demos/13-vue.md b/docz/docs/03-demos/13-vue.md
index b5237eb..25e672f 100644
--- a/docz/docs/03-demos/13-vue.md
+++ b/docz/docs/03-demos/13-vue.md
@@ -9,15 +9,15 @@ Components (SFC) and VueJS familiarity is assumed.
 
 Other demos cover general VueJS deployments, including:
 
-- [Static Site Generation powered by NuxtJS](./content#nuxtjs)
-- [iOS and Android applications powered by Quasar](./mobile#quasar)
-- [Desktop application powered by Tauri](./desktop#tauri)
-- [`vue3-table-lite` UI component](./grid#vue3-table-lite)
+- [Static Site Generation powered by NuxtJS](/docs/demos/content#nuxtjs)
+- [iOS and Android applications powered by Quasar](/docs/demos/mobile#quasar)
+- [Desktop application powered by Tauri](/docs/demos/desktop#tauri)
+- [`vue3-table-lite` UI component](/docs/demos/grid#vue3-table-lite)
 
 
 ## Installation
 
-[The "Frameworks" section](../getting-started/installation/frameworks) covers
+[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
 installation with Yarn and other package managers.
 
 The library can be imported directly from JS or JSX code with:
@@ -163,7 +163,7 @@ generate column headings and for indexing into the row objects.
 The safest approach is to use an array of arrays for state and to generate
 column objects that map to A1-Style column headers.
 
-The [`vue3-table-lite` demo](./grid#rows-and-columns-bindings) generates rows
+The [`vue3-table-lite` demo](/docs/demos/grid#rows-and-columns-bindings) generates rows
 and columns objects with the following structure:
 
 ```js
@@ -183,7 +183,7 @@ columns.value = Array.from({ length: range.e.c + 1 }, (_, i) => ({
 
 ## Legacy Deployments
 
-[The Standalone Scripts](../getting-started/installation/standalone) play nice
+[The Standalone Scripts](/docs/getting-started/installation/standalone) play nice
 with legacy deployments that do not use a bundler.
 
 The legacy demos show a simple VueJS component.  It is written in ES5 syntax.
diff --git a/docz/docs/03-demos/14-svelte.md b/docz/docs/03-demos/14-svelte.md
index 14b5b90..155bc8e 100644
--- a/docz/docs/03-demos/14-svelte.md
+++ b/docz/docs/03-demos/14-svelte.md
@@ -9,13 +9,13 @@ familiarity is assumed.
 
 Other demos cover general Svelte deployments, including:
 
-- [iOS applications powered by CapacitorJS](./mobile#capacitorjs)
-- [Desktop application powered by Wails](./desktop#wails)
+- [iOS applications powered by CapacitorJS](/docs/demos/mobile#capacitorjs)
+- [Desktop application powered by Wails](/docs/demos/desktop#wails)
 
 
 ## Installation
 
-[The "Frameworks" section](../getting-started/installation/frameworks) covers
+[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
 installation with Yarn and other package managers.
 
 The library can be imported directly from Svelte files with:
diff --git a/docz/docs/03-demos/19-bundler.md b/docz/docs/03-demos/19-bundler.md
index 62e9429..83fefa5 100644
--- a/docz/docs/03-demos/19-bundler.md
+++ b/docz/docs/03-demos/19-bundler.md
@@ -29,7 +29,7 @@ var XLSX = require("xlsx");
 // ... use XLSX ...
 ```
 
-[After installing the module](../getting-started/installation/nodejs), bundling is easy:
+[After installing the module](/docs/getting-started/installation/nodejs), bundling is easy:
 
 ```bash
 browserify app.js > browserify.js
@@ -170,9 +170,9 @@ bun bun.js
 
 ## Dojo
 
-Integration details are included [in the "AMD" installation](../getting-started/installation/amd#dojo-toolkit)
+Integration details are included [in the "AMD" installation](/docs/getting-started/installation/amd#dojo-toolkit)
 
-Complete Examples are included [in the "Dojo" demo](./legacy#dojo-toolkit)
+Complete Examples are included [in the "Dojo" demo](/docs/demos/legacy#dojo-toolkit)
 
 
 ## esbuild
@@ -356,7 +356,7 @@ bug. Upgrade to Parcel version 1.5.0 or later.
 
 Complete Example (click to show)
 
-This demo follows the [Presidents Example](../getting-started/example).
+This demo follows the [Presidents Example](/docs/getting-started/example).
 
 1) Save the following to `index.html`:
 
@@ -438,7 +438,7 @@ click the "Click to Export!" button to generate a file.
 
 ## RequireJS
 
-[Standalone scripts](../getting-started/installation/standalone) comply with AMD `define`
+[Standalone scripts](/docs/getting-started/installation/standalone) comply with AMD `define`
 semantics, enabling use in RequireJS out of the box.
 
 To enable use of the alias `xlsx`, the RequireJS config should set an alias in
@@ -1061,7 +1061,7 @@ Access http://localhost:8080 in your web browser.
 
 :::note
 
-The [Vite section of the Content demo](./content#vitejs) covers SheetJS-powered
+The [Vite section of the Content demo](/docs/demos/content#vitejs) covers SheetJS-powered
 asset loaders, suitable for static sites pulling data from fixed spreadsheets.
 
 :::
@@ -1079,7 +1079,7 @@ Webpack bundled the CommonJS build in older versions of the library.  Version
 `0.18.1` changed the NodeJS module package so that Webpack uses the ESM build.
 
 The ESM build does not include the codepage support library for XLS reading.
-[As described in the installation instructions](../getting-started/installation/frameworks),
+[As described in the installation instructions](/docs/getting-started/installation/frameworks),
 the codepage dependency should be imported explicitly:
 
 ```js
diff --git a/docz/docs/03-demos/24-extendscript.md b/docz/docs/03-demos/24-extendscript.md
index cf29135..3eb623d 100644
--- a/docz/docs/03-demos/24-extendscript.md
+++ b/docz/docs/03-demos/24-extendscript.md
@@ -21,7 +21,7 @@ extension development is assumed.
 
 ## ExtendScript Scripts
 
-[Installation is straightforward:](../getting-started/installation/extendscript) download a
+[Installation is straightforward:](/docs/getting-started/installation/extendscript) download a
 script and move it to your project directory.
 
 ### Reading Files
@@ -177,12 +177,12 @@ and place in the scripts directory.  For CS6 Windows 10 the path is typically
 
 ## CEP
 
-[The standalone scripts](../getting-started/installation/standalone) can be added to CEP
+[The standalone scripts](/docs/getting-started/installation/standalone) can be added to CEP
 extension HTML
 
 ## UXP
 
 UXP officially recommends `require` and NodeJS Modules for third party support.
 
-[Use the "Frameworks" instructions to download.](../getting-started/installation/frameworks)
+[Use the "Frameworks" instructions to download.](/docs/getting-started/installation/frameworks)
 
diff --git a/docz/docs/03-demos/26-excelapi.md b/docz/docs/03-demos/26-excelapi.md
index 8949739..9720fe0 100644
--- a/docz/docs/03-demos/26-excelapi.md
+++ b/docz/docs/03-demos/26-excelapi.md
@@ -125,7 +125,7 @@ This indicates that the SheetJS library has been loaded.
 
 ## Dynamic Arrays and SheetJS Array of Arrays
 
-The [`sheet_to_json`](../api/utilities#json) helper function can generate
+The [`sheet_to_json`](/docs/api/utilities#json) helper function can generate
 arrays of arrays of values based on the worksheet data.  Excel custom functions
 transparently treat these as Dynamic Arrays.
 
@@ -165,7 +165,7 @@ var wb = XLSX.read(ab); // parse workbook
 
 For the purposes of this demo, a Base64-encoded file will be used.  The
 workaround involves fetching that Base64 file, getting the text, and parsing
-with the [`base64` type:](../api/parse-options#input-type)
+with the [`base64` type:](/docs/api/parse-options#input-type)
 
 ```js
 async function extern() {
diff --git a/docz/docs/03-demos/33-localfile.md b/docz/docs/03-demos/33-localfile.md
index 6f7004f..1a4759c 100644
--- a/docz/docs/03-demos/33-localfile.md
+++ b/docz/docs/03-demos/33-localfile.md
@@ -15,8 +15,8 @@ like mobile apps are covered in their respective demos.
 
 Some snippets are also available in the "Common Use Cases" section:
 
-- [Data Import](../solutions/input)
-- [Data Export](../solutions/output)
+- [Data Import](/docs/solutions/input)
+- [Data Export](/docs/solutions/output)
 
 :::
 
@@ -70,7 +70,7 @@ self.addEventListener('message', (e) => {
 });
 ```
 
-["User-Submitted File" example](./worker#user-submitted-file) has a live demo.
+["User-Submitted File" example](/docs/demos/worker#user-submitted-file) has a live demo.