npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

pptxdiff

v0.8.0

Published

A diff tool to compare two PowerPoint decks. Completely local, no cloud upload.

Downloads

1,955

Readme

PptxDiffA Diff Tool for Slides

[NPM Version][#npm-package-url] [![vscode-badge][#vsce-svg-url-version]][#vsce-marketplace-url] [Docs - GitHub.io][#docs-package]

banner


[!warning] :warning: THIS PROJECT IS BEING DEVELOPED RAPIDLY. FEATURES MAY BREAK OR YOU MAY FIND BUGS AS THIS IS IN EARLY STAGE OF DEVELOPMENT.


What is pptxdiff?

A single-file, client-side tool for comparing two PowerPoint decks (or many pairs at once), rendered with real fidelity and diffed on text, formatting, images, tables, charts, animations, transitions, speaker notes, and more — with a full reviewer workflow (approvals, comments, history) built in.

No build step, and no install required if you'd rather just open index.html directly — or install it as a CLI via npm.

demo-banner-allpairs

Features

  • High-fidelity rendering — real .pptx parsing (OOXML) plus @aiden0z/pptx-renderer for pixel-accurate slide previews, with a schematic fallback if a part can't be rendered.
  • Deep diffing — text (word-level highlighting), fonts, color, alignment, position, shape borders, wrap, hyperlinks (text-run and shape-level), images/charts (content + position), tables (cell text, background, borders), backgrounds, animations, transitions, speaker notes (text and formatting), embedded fonts, slide master/layout inheritance, section headers.
  • Deck-level comparison — not just 1:1 pairs: content-similarity alignment handles inserted/removed/reordered slides, with ADDED / DELETED / MOVED / CHANGED / IDENTICAL status tags (stackable — a slide can be both MOVED and a DUPLICATE).
  • Duplicate detection — same-deck near-duplicate slides, and cross-deck duplicates (a Before slide resembling a different, unaligned After slide), with an adjustable sensitivity threshold, a performance cap for large decks, and a per-pair ignore list.
  • Reviewer workflow — multiple reviewers (@handle/email + name), per-slide and per-diff Approve/Reject (with rollups), threaded comments (add/reply/delete, single and bulk), an approval history log, and scoped "clear decisions" (all / just mine / a specific reviewer / a slide range) — all backed by a single shared confirmation-modal component for every destructive action.
  • Batch mode — compare many deck pairs at once (order- or filename-matched), with per-pair diff counts and cross-deck duplicate counts.
  • Three-way merge — per-diff Keep-Before/Keep-After/Custom picks, a per-slide winner override, a merge-winner preview, and a real (beta) merged .pptx export (text/tables/background/notes/transitions; images/charts are not re-embedded).
  • Exports — PDF, standalone HTML report, JSON (with a uiState block for round-trip re-import — merge or overwrite an in-progress session), CSV/JSON decisions, Markdown summary, Notion-flavored Markdown, Confluence wiki markup, and live push attempts to Slack (webhook), Notion (API), and Confluence (API) — the latter two typically blocked by browser CORS outside a backend proxy, and fail gracefully with the file-based export as a fallback.
  • Keyboard shortcuts (press ? for the full list) and a touch-friendly batch-file reorder (drag-and-drop with a touch ghost preview).
  • Dark mode, localStorage persistence (reviewer state; live-push credentials are opt-in, per-field).
  • Self-tests — an in-browser Red/Green regression suite (Run self-tests button) covering the diff engine, alignment, duplicate detection, merge logic, and a static-analysis guard against stale method references.

Getting started

Option A — npx (no install)

npx pptxdiff

Starts a local server and opens the app in your default browser.

Option B — npm (global install)

npm install -g pptxdiff
pptxdiff

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 just double-click it / serve the folder statically

The app ships with a built-in sample deck (sample-pptx.js generates it on load) so you can try every feature immediately — no files to upload. Drop in your own .pptx pair, or click Reset to sample.

Note: the app is fully offline-capable — React, ReactDOM, Babel, JSZip, @aiden0z/pptx-renderer, and the Spectral font are all vendored locally under src/pptxdiff/vendor/ and loaded from disk, not from a CDN. No internet connection is required to run it, for any of the options above. Set PPTXDIFF_LITE_MODE=1 (or append ?lite=1 to the URL) to opt back into CDN sourcing instead — see bin/cli.js.

Headless CLI & Web API (in progress, not yet published)

Two additional packages under src/packages/ let another program — a script, a CI job, an AI agent — get a diff result as data instead of a human clicking through the browser app: @pptxdiff/cli (exposing the pptxdiff-cli command with diff/checksum/textconv/difftool/install-git-integration subcommands and diff(1)-style exit codes) and @pptxdiff/server (POST /v1/diff, POST /v1/checksum, GET /v1/health). Both drive the same unmodified index.html headlessly via Playwright, so their answers can't disagree with what you'd see in the browser.

pptxdiff-cli install-git-integration wires *.pptx into git diff/git difftool in one command — git diff/git log -p line-diff a deck's text content instead of showing "Binary files differ," and git difftool --tool=pptxdiff opens the real GUI pre-loaded with both versions and returns to the shell after the browser window is closed.

Not published to npm yet — install from a checkout (see each package's own README under src/packages/). Full docs: Headless CLI & Web API. Design/rationale: docs/.scrolls/CLI_API_DESIGN.md.

Documentation

Project documentation is maintained at:

[!note] Docs

pptxdiff: https://sugatoray.github.io/pptxdiff/

Development

git clone https://github.com/sugatoray/pptxdiff.git
cd pptxdiff
node bin/cli.js    # run the CLI straight from source, no install/build step

To exercise it 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       # DC 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/packages/pptxdiff-cli/    # @pptxdiff/cli headless CLI package — exposes pptxdiff-cli command
src/packages/pptxdiff-server/ # Web API (@pptxdiff/server) — not yet published, see its own README
docs/.scrolls/                # project memory — read docs/.scrolls/STARTER.md first if you're extending this

Contributing / extending this project

[!note] Not Open to Contributions

Currently not accepting contributions. Please feel free to open issues at the GitHub repository.

AI Driven Development: See CLAUDE.md.

License

See LICENSE.