Repository navigation
Releases: avis309/html-deck
Release list
v0.1.12
Features
-
Manage slides from the filmstrip, and a version history that restores saved versions
To manage slides, right-click a thumbnail (Duplicate slide, Move left, Move right, Delete slide), drag
thumbnails to reorder them, or use the keys on a focused thumbnail (Ctrl/Cmd+D duplicate,
Delete, Alt+arrows move). Each action is one undo step, and a save still patches only that
slide's bytes in the file: a moved slide keeps its exact source text and indentation, and a
copy that was not edited is written as the original's text. A Reveal vertical stack moves,
copies and deletes as one unit; read-only, generated and Markdown slides are refused with the
reason, and the last slide cannot be deleted. Adding a blank slide comes later.Version history (Save ▾ → Version history…) lists the 5 kept backups of the document, each with the
time that version was saved and its size, and Restore. A restore is written as a save: the
current file is backed up first, and a tab that is behind the file gets the conflict message.
Unsaved edits are downloaded as a copy before they are replaced.Backups kept in save order. Two saves in the same second could prune the newest backup and keep an older one (the
name's sub-second part came from a second clock reading); a backup of another document named
like this one (deck.html.v2.html) could be counted and pruned as its own. Names now carry a
UTC time with nanoseconds, so the order also holds when the clocks go back an hour.
Bug Fixes
-
plugin: The listing shows HTML Deck (displayName); the plugin branch can be republished by hand
The directory titles a listing from displayName, else it capitalises name (Htmldeck). Publishing the plugin tree is its own workflow (plugin.yml): the release calls it, and Actions → plugin → Run workflow republishes the manifests without a release. -
Private log folder for the session key, GET bodies end keep-alive, SemVer order on the plugin branch
Documentation
-
Privacy policy (everything stays on the machine; what is read, written and fetched)
Shipped in the plugin tree too, for the plugin directory's privacy question. -
Screenshots with the new logo and the FX v4 effects
Full Changelog: v0.1.11...v0.1.12
v0.1.11
Features
-
FX v4 effects, the new logo, and a plugin tree for the plugin directory
FX runtime v4 (Canva-like): wipe, baseline, zoom & blur, tumble, stomp, scrapbook, flicker
(entrances), wiggle and blink (loops). Entrances take transform keyframes, an opacity profile
of the author's opacity and a clip-path that opens to inset(0); wipe follows the reading
direction. Refused where they cannot work (an authored clip-path or filter, inline text, SVG
shapes for clips), with the reason on the tile. zoom-out is now called Zoom out: Stomp is a
real stomp. Tiles, hover drawings and names in EN / VI / ZH / zh-Hant; a v3 file using a v4
preset asks for Update FX.New logo (HTML brackets with a folded document) in the editor and the README, also the
plugin icon (.claude-plugin/icon.png, 1024 px).Plugin directory: the plugin is published from a
pluginbranch built by
tools/build_plugin.py on each release (htmldeck/, scripts/, skills/, manifests, icon) — the
root's package.json + lockfile (dev tooling) would make every install run npm ci, and its
tests were screened as plugin code. The marketplace points at that branch. The session key
is named a key (?key=), and the npm launcher puts the bundled package on sys.path itself
instead of passing the environment with PYTHONPATH.
Full Changelog: v0.1.10...v0.1.11
v0.1.10
Features
- security: The API answers only this run's editor (session key in the printed link)
Host, Origin and Sec-Fetch-Site stop web pages, but another program on the machine can send
any header. Each run now makes a session key; the printed link (HTMLDECK_URL=…/?token=)
hands it to the editor in the address fragment (never sent to a server again, nor in a Referer),
the editor keeps it in its origin's storage and sends it with every API call (X-HtmlDeck-Key; the
watch stream, an EventSource, in its query). Not a cookie: a browser sends a cookie of 127.0.0.1
to every port, so any other local server it calls would get the key. A wrong key gets a page
saying which link to open; a tab without the key says so. The redirect holding the key is
no-store and keys never reach the log.
Full Changelog: v0.1.9...v0.1.10
v0.1.9
Features
- Effects side bar (Canva-like): ▶ opens a side bar with effect tiles grouped by category (Basic / Data & charts / Extra). Tiles preview on hover, and effects that can't apply are dimmed with the reason. Two tabs: Effects and Slide timeline.
- New effects (runtime v3): fade-down, slide-right, zoom-out, blur-in, pop, grow-x/y, draw (SVG), spin/float/pulse loops.
- Animate this slide / page: assigns effects to every block in one undoable step.
- Timing in plain words: Start after, Speed (Slow/Normal/Fast), One by one. The editor warns when the file's own player is too old for an effect.
- Leaner side rail: Outline removed, Colors merged into Text, block background only in Box. Opacity button shows a checkerboard.
Security
- Workspace scripts run in the edit view only after you trust the workspace (asked once, or use
--trust). - Export embeds only web assets and never reaches local or private addresses (DNS rebinding blocked, 100 MB cap).
- Backups and notes never follow symlinks or junctions out of the document's folder. Backups keep the document's permissions.
Fixes
- Effects: a child's own effect beats its parent's stagger. Count-up only on real figures ("Aug 12" stays). Page delays restart per section. Many grow/draw edge cases fixed.
- Side bar: a running preview no longer disables tiles. Choosing an effect and each timing change are separate undo steps.
- Windows: socket buffer exhaustion fixed (HTTP/1.1 keep-alive, closed tabs' watch streams released at once).
v0.1.8
Features
-
editor: Drag a block or a swept group to move it, no move icon needed
A press on the words of a text block still edits it; beside them (the rest of the line, the padding of a card, a picture, a diagram) it picks the block up and a drag moves it. A swept group moves as one: drag any of its blocks, the arrows nudge it, one undo puts it back. -
plugin: The skill is now /htmldeck:open (was /htmldeck:htmldeck)
-
feedback: A shorter AI Feedback panel, without the copy-request button and the agent command
-
sync: The editor shows an agent's edit of the open file at once, no F5
With nothing unsaved it loads the new version where you were (slide, scroll, zoom); with unsaved edits a dialog asks which version to keep and downloads yours before taking the agent's. Notes an agent marks done show up in the feedback list. Saves check the file's content revision, so a change that kept the mtime is caught.
Full Changelog: v0.1.7...v0.1.8
v0.1.7
Bug Fixes
-
server: The editor no longer opens blank when its files load all at once
Opening the editor (or several tabs) loads many small files in one burst; the server queued only
5 waiting connections, so the rest were reset, one editor file failed to load and the page stayed
blank with no error. It now queues 128, on Linux, macOS and Windows. -
fx: Enable FX keeps the rest of the file as it was on Windows
With the editor installed from a git checkout on Windows (the Claude Code / Codex plugin), its
files had Windows line ends; Enable FX then inserted them into the document and the save
rewrote the whole file instead of adding one script. The inserted script is now always LF, and
the editor's files are checked out with LF on every OS.
Documentation
- readme: Shorter README on what HTML Deck saves you, in English, Tiếng Việt, 简体中文 and 繁體中文
Full Changelog: v0.1.6...v0.1.7
v0.1.6
Bug Fixes
- feedback: AI Feedback on files opened from the computer, and an agent command that runs anywhere
A file opened with "Open from computer" or dropped in has no place on disk for
its notes, and the AI button was silently disabled (reported on Windows 11).- The button stays clickable and explains, with an action that opens the
workspace list filtered to the file; the Files panel lists the workspace first. - A note is reported saved only once the server has it; on failure the popup
and its text stay; read-only while sending; no double submit; a slow request
never blocks feedback on the next document. - Switching documents clears the previous one's notes, pins, badge and command
at once, even when the new one is slow to open or fails. - The copied command is built by the server: this Python and this copy of
notes.py by absolute path, with --root, so no htmldeck-notes on PATH is
needed (plugin, npm, uvx). Windows gets PowerShell and Git Bash forms,
curly apostrophes included. - htmldeck-notes exits 1 for a --file that does not exist.
- SKILL.md: PowerShell / cmd / Git Bash launcher forms. README: feedback scope.
- The button stays clickable and explains, with an action that opens the
Full Changelog: v0.1.5...v0.1.6