Skip to content

Getting started

PptxDiff ships several equivalent ways to run it — pick whichever fits your workflow. All of them serve the exact same src/pptxdiff/index.html app; none of them upload your files anywhere.

Option A — npx (no install)

npx pptxdiff

Starts a local static server on an OS-assigned free port and opens the app in your default browser. Nothing is installed globally.

Option B — npm (global install)

npm install -g pptxdiff
pptxdiff

Same server/browser behavior as npx, but installed once so the pptxdiff command stays on your $PATH.

Option C — just the file (no npm at all)

git clone https://github.com/sugatoray/pptxdiff.git
cd pptxdiff
open src/pptxdiff/index.html   # or double-click it, or serve the folder statically

Works even without Node — index.html is self-contained, and needs no internet connection to run (see below).

Option D — Homebrew

brew install --formula https://raw.githubusercontent.com/sugatoray/pptxdiff/HEAD/src/packages/pptxdiff-brew/Formula/pptxdiff.rb
pptxdiff

Same behavior as Option B once installed — the formula packages the identical published npm tarball, just via brew instead of npm. Not yet in a real brew tap (so no plain brew install pptxdiff yet — the --formula <url> form above works today without one); see the Homebrew formula page for full details and status.

What happens on first load

The app ships a built-in sample decksample-pptx.js generates a Before/After pair on load — so you can try every feature immediately, with nothing to upload. Drop in your own .pptx pair whenever you're ready, or click Reset to sample to go back to the demo data.

PptxDiff on first load, showing the sample deck's single-pair view

Requirements

  • Node.js ≥ 18 if you're using the npx/npm install paths (see engines in package.json).
  • No internet connection required, for any install option. React, ReactDOM, Babel-standalone, @aiden0z/pptx-renderer, JSZip, and fonts are all vendored locally under src/pptxdiff/vendor/ and loaded from disk, not from a CDN. The app works fully offline/air-gapped by default — an opt-in PPTXDIFF_LITE_MODE switches back to CDN sourcing if you ever want that; see the CLI reference.
  • Your .pptx files never leave your machine. Parsing, rendering, and diffing all happen client-side, in your browser's memory.

Try it with the bundled sample files

Real, on-disk sample decks (not just the in-browser demo) are checked into the repo at docs/assets/sample_before.pptx / docs/assets/sample_after.pptx. Upload that pair directly if you want to exercise the diff engine on real files without clicking "Reset to sample" first — useful for the CLI/static-file install paths, or for a quick smoke test after you clone.

Development

Run the CLI straight from source, no install/build step:

git clone https://github.com/sugatoray/pptxdiff.git
cd pptxdiff
node bin/cli.js

To exercise it exactly as if it were installed (e.g. to test the pptxdiff command itself):

npm link
pptxdiff
npm unlink -g pptxdiff   # when done

Project structure

bin/cli.js                    # npm CLI entry point — local static server + opens your browser
package.json                  # npm package manifest (bin, files, no runtime dependencies)
src/pptxdiff/index.html       # the whole application (template + logic, self-contained)
src/pptxdiff/support.js       # runtime the app is authored against (pinned; don't casually upgrade)
src/pptxdiff/sample-pptx.js   # builds the in-browser sample/test-fixture .pptx files
src/pptxdiff/vendor/          # vendored React/ReactDOM/Babel/JSZip/pptx-renderer/fonts (offline-capable, no CDN)
src/pptxdiff/docs-site/       # this documentation site (MkDocs + Material)

Not open to contributions

This project currently isn't accepting external contributions — feel free to open an issue on GitHub instead. See the repository's CLAUDE.md for the AI-driven development process used to build it.

Next steps