Skip to main content

HTML Deck

A visual editor for the HTML files in your workspace: slide decks, reports, and pages written by you or by an AI agent.

Click text to edit it, restyle it, move blocks, add effects and present. The file is patched only where you changed it, so a save with no edits is byte-identical.

CI PyPI npm Python 3.11+ License: MIT

Editing a slide title in HTML Deck

Why

  • Edits stay minimal. HTML Deck patches the source text where you made a change and leaves everything else as it was, including formatting, comments and the agent's own markup. That keeps diffs small and reviewable.
  • Works with your agent. Pin a note on any element ("make this shorter"), or drag across a slide to sweep several blocks and leave one note for the area, then ask Claude Code or Codex to apply your HTML Deck notes. The agent reads them, edits the HTML and marks them done.
  • Presents the real thing. Presentation runs the deck's own scripts and animations in a separate frame, so presenting never touches the document you are editing.
  • Local and dependency-free. One Python 3.11+ standard-library server on 127.0.0.1. Nothing leaves your machine.
AI Feedback panel with a block note and a region note Presenting a deck
AI Feedback: pin notes for your agent Present with the deck's own animations
Retyping a label inside an SVG architecture diagram
Diagrams: retype a label inside an inline SVG, the rest of the drawing stays as it was

Install

Where Command
Claude Code /plugin marketplace add avis309/html-deck then /plugin install htmldeck@htmldeck
Codex codex plugin marketplace add avis309/html-deck then codex plugin add htmldeck@htmldeck
uv uvx htmldeck (one-off) · uv tool install htmldeck
pipx / pip pipx install htmldeck · pip install htmldeck
npm npx @avis309/htmldeck (one-off) · npm i -g @avis309/htmldeck

HTML Deck needs Python 3.11+ and nothing else. The npm package and the plugins find Python and run it for you. It works on Linux, macOS and Windows.

Use it with an agent

In Claude Code or Codex:

  1. Ask the agent to open your HTML file in HTML Deck, e.g. "open my deck in HTML Deck". Claude Code also has /htmldeck [file].
  2. Edit in the browser, and pin AI Feedback notes where you want the agent to change something.
  3. Ask the agent to "apply my HTML Deck notes".

Run it yourself

htmldeck                                # workspace = current folder
htmldeck --file <file>.html             # open that document first
htmldeck --root <folder> --port 6789 --no-browser

<file>.html is any HTML document in your workspace: a deck, a report, a page.

To try it on the sample deck (a 17-slide quarterly marketing report with anime.js charts) in a clone of this repo, run htmldeck --root samples --file marketing-report.html. The same folder has architecture.html, a page with an SVG diagram whose labels you can edit.

The workspace is the folder HTML Deck runs in, or the folder given with --root. Every path is relative to it, and nothing outside it is served or written, except the file passed with --file. Each save keeps a timestamped backup in .htmldeck_bak/ next to the document.

Save ▾ also saves a copy of the document to share:

  • HTML: a single file that includes all its images, styles, scripts and fonts, so it opens anywhere, even offline. Resources loaded from the web (a CDN script, web fonts) are included too, unless you clear that option. From a terminal, run python -m htmldeck.export --file <file>.html --remote.
  • PDF: the document as a PDF file: a deck, a report or any page.

Review notes live beside each document in .htmldeck_notes/<name>.json. Scripts and agents read and resolve them with:

htmldeck-notes --file <file>.html             # list open notes
htmldeck-notes --file <file>.html --prompt    # the same, as a request ready to paste to an agent
htmldeck-notes --file <file>.html --done <id> # mark one done

A region note (drag from the slide background to select several blocks, then AI Feedback on the group's toolbar) also records the area in CSS pixels of its slide or section and the elements in it. Versions before 0.1.1 read it as a note on the whole slide, and drop the region if they rewrite the notes file.

What it supports

  • Formats: plain HTML pages and reports; decks of .slide blocks; hand-written Reveal.js decks, including vertical stacks, fragments, notes and backgrounds. Reveal's Markdown slides are read-only.
  • SVG diagrams: click a label in an inline <svg> (a <text> or <tspan>) and type over it; only that text changes in the file. Click a shape to select the whole diagram, for example to pin AI Feedback on it.
  • Safe editing: content that the page's own scripts create or change is locked, and the editor shows why. Animations are frozen while editing. You also get undo/redo and draft recovery.
  • Effects: set data-fx entrance effects (fade, zoom, slide, count-up) from the toolbar. HTML Deck also manages scenes, the document's own animation code. "Enable FX in the file" adds a small inline runtime, so effects still run when the file is opened on its own.
  • Isolation: presentations run on a second origin that has no access to the editor's API. The edit view blocks remote scripts (from a CDN, for example) unless you trust the file. Workspace files opened directly on the editor origin are sandboxed.
Develop
python3 -m venv .venv && .venv/bin/pip install -e '.[dev]'
npm install
npm run check        # eslint (editor modules) + pytest (server) + browser spec
  • htmldeck/server.py: HTTP server, workspace guards, save/backup/notes API, preview origin.
  • htmldeck/web/: the editor, as native ES modules with no bundler. js/core holds the model, serializer and history; js/runtime holds provenance and motion freeze; also js/policy, js/formats (Reveal), js/present and js/fx (the effects runtime, which is also inlined into documents).
  • tests/spec/characterization.spec.mjs: black-box Playwright spec over fixtures in a temporary workspace. To run it on another workspace's files too: HTMLDECK_REAL_ROOT=… HTMLDECK_REAL_FILES="a.html,b.html" npm run spec.
  • tools/align-report.mjs: npm run align -- <workspace> reports what share of a workspace's HTML files save as an in-place patch. The rest still save correctly, through a full rewrite that the editor asks you to confirm.
  • Plugin: .claude-plugin/, .codex-plugin/, .agents/plugins/ (marketplaces), skills/htmldeck/, commands/, and scripts/htmldeck-run[.cmd], which runs this copy with any Python 3.11+.
  • npm wrapper: packaging/npm/ bundles htmldeck/ at pack time and runs it with the user's Python.
  • Release: run python tools/bump_version.py X.Y.Z, commit, then tag vX.Y.Z and push the tag. .github/workflows/release.yml publishes to PyPI, then npm, then creates the GitHub Release.

License

MIT © Avis

Metadata

Release files for htmldeck 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for htmldeck 0.1.2
File Size Uploaded
htmldeck-0.1.2.tar.gz 175.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for htmldeck 0.1.2
File Interpreter ABI Platform
htmldeck-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 344.8 kB

Release files / htmldeck-0.1.2.tar.gz

Download URL htmldeck-0.1.2.tar.gz
Size 175.6 kB
Tags Source
SHA-256 checksum
How to use checksums
634ff30b5f326cfb4a133ef05163a69dfd160063a2ff788f5881114a6bc4b4c0
BLAKE2b-256 checksum
How to use checksums
62931f5fbb302c26506cbf2833b8e7fde1ef2c10fe51812089791deb70f8bc47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / htmldeck-0.1.2-py3-none-any.whl

Download URL htmldeck-0.1.2-py3-none-any.whl
Size 169.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e48aab7f18298ab82e6726ca8bbfbbfbb5a3c83034ca8a6e684c4663b8c729a6
BLAKE2b-256 checksum
How to use checksums
2f45bd58d18c205354c33e237e63dde0194b6892a501acbc477e28e601ab714d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page