Skip to content

Releases

PinDeck 3.4.0: formatted speaker notes, and the speaker view works

Choose a tag to compare

@ehabets ehabets released this 04 Nov 14:27

PinDeck is a local editor for HTML slide decks: pin elements on a slide, describe the change, and
Claude Code or OpenAI Codex edits the HTML and CSS.

New

  • Speaker notes show their formatting. The Notes field under the slide shows bold, italics, links
    and lists. ⌘B, ⌘I and ⌘U format the selection, Enter starts a new line, and pasted text
    comes in plain. Notes with markup the field cannot show safely are still edited as HTML, and nothing
    in them is lost on save.

Fixes

  • The speaker view works. Present opens the deck on localhost, so reveal.js's speaker view (S)
    shows the notes and the next slide instead of an empty window.
  • Claude's PinDeck commands are no longer refused. When a deck's CLAUDE.md names the CLI by
    another path (such as node ../pindeck/cli.mjs), Claude runs it by this server's path. A chat that
    used an old path is told the right one.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude or codex CLI signed in. The full list of
versions is at the end of the README.

PinDeck 3.3.0: fixes from a code audit

Choose a tag to compare

@ehabets ehabets released this 01 Nov 21:21

PinDeck is a local editor for HTML slide decks: pin elements on a slide, describe the change, and
Claude Code or OpenAI Codex edits the HTML and CSS.

Fixes

  • Imported pictures are kept. After a PowerPoint import, refining the slides no longer deletes
    pictures the deck still uses when the turn was stopped, failed or only changed theme.css. Undo
    brings removed pictures back.
  • No more broken characters in long texts. Large notes, tables or SVG with non-ASCII characters
    are saved as sent.
  • Claude reads only what it needs: the deck, its screenshots, attached PDFs and asset roots, as
    Codex already did. It also cannot create a .git file in the deck folder, which could have made
    git run a command.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude or codex CLI signed in. The full list of
versions is at the end of the README.

PinDeck 3.2.0

Choose a tag to compare

@ehabets ehabets released this 31 Oct 08:56

PinDeck is a local editor for HTML slide decks: pin elements on a slide, describe the change, and
Claude Code or OpenAI Codex edits the HTML and CSS.

PinDeck 3

3.2.0 is the first stable release of version 3: everything from the 3.0, 3.1 and 3.2 betas. Compared
with 2.11:

  • OpenAI Codex as a second assistant next to Claude Code, with the models and efforts each backend
    offers. Each deck keeps its own provider, model and effort.
  • Several decks on one port: a deck menu above the slide opens the other decks in the folder, each
    with its own chat, assistant session and Undo.
  • Sandboxed deck pages: a deck's script cannot use the API or read other decks.
  • Linux is no longer a beta. PinDeck runs there as a headless server, used from a Mac's browser
    through an SSH tunnel.

Coming from PinDeck 2

Version 3 keeps its settings and chats in ~/.pindeck-v3, apart from PinDeck 2's ~/.pindeck, and
copies nothing over; see "Models, providers and configuration" in the README for copying them by hand.
PinDeck 2 stays available as npx pindeck@2 /path/to/deck, and in git on the 2.x branch.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude or codex CLI signed in. The full list of
versions is at the end of the README.

PinDeck 2.11.0

Choose a tag to compare

@ehabets ehabets released this 31 Oct 08:32

PinDeck is a local editor for HTML slide decks: pin elements on a slide, describe the change, and
Claude Code edits the HTML and CSS.

What's new in 2.11.0

  • Screenshots in the chat: a screenshot sent with a message shows as a small picture of the
    slide, pins included, instead of a "📷 screenshot" label. Click it to see it larger; Esc or a click
    closes it.
  • What Claude looked at: when Claude reads one of PinDeck's screenshots, that step in the chat
    shows the picture too.
  • PinDeck keeps the 40 newest screenshots of a deck; an older one says "no longer kept". Chats from
    before 2.11 keep their plain label.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude CLI signed in. On Linux, see "Running on a
Linux server" in the README for the SSH tunnel. The full list of versions is at the end of the README.

PinDeck 3.2 beta 1: sandboxed deck pages, fixes from review and user tests

Choose a tag to compare

@ehabets ehabets released this 29 Oct 12:49

The second preview of PinDeck 3.x with several decks on one port. Deck pages now run sandboxed, and it brings fixes from a code review and a round of user tests. It is on npm's beta channel; npx pindeck installs 2.10.0.

What's new since 3.1.0-beta.1

  • Security: deck pages run sandboxed, so a deck's own script can no longer use PinDeck's API, read other decks or send messages. The login link's next stays on PinDeck. A deck's own script cannot use localStorage either (it throws).
  • Decks are .html files only; .htm decks open as pages.
  • On a Mac, Enter in the terminal opens PinDeck in the browser, with a new login link each time.
  • Several decks in one folder: a turn no longer records or undoes another deck's files, and deleting a picture keeps a file another deck uses. Subfolder decks are locked for the assistant.
  • Settings: each deck keeps its provider, model and effort, and a deck that never chose one keeps the model its conversation started with. config.json is merged, not overwritten, and unusable saved settings are fixed before the first message.
  • Many tabs on one port; a deck server that stops reconnects; pindeck login and cli.mjs find the right PinDeck; a deck opens in one PinDeck only.
  • Editing: typing survives another program saving the deck; text that cannot be saved because the deck changed meanwhile, including a new bullet, can be copied; Enter in a bullet leaves no copied ids; the deck menu works at every window width; the model and effort menus work from the keyboard.
  • Undo: New chat keeps Undo; undone changes stay marked after a restart; only the latest change offers Undo.
  • Screenshots show the pins of their own message; Stop works during a screenshot; failures reach the assistant with Chrome's own reason.
  • Robustness: large decks get their ids in linear time; symlinked decks; a deck that is gone while PinDeck runs; Chrome as root; a warning when PinDeck 2 writes to the same state folder; a deck page that cannot start says why, and Send no longer hangs.
  • From the code review: locked paths regardless of case (macOS) and .git/config restored after each turn; Codex reads PDFs of a deck reached through a symlink; "not signed in" only when Claude says so; betas tested before they are staged; model lists shared between decks; a faster deck list.

Try it

npx pindeck@beta path/to/deck

Or from the v3-beta branch. Requires macOS, or Linux (beta), Node 20 or later, and Claude Code (claude auth login) or Codex (codex login). Then open the login link PinDeck prints. Settings, chats and backups stay in ~/.pindeck-v3, apart from v2.

Known limits

  • A deck whose own script uses localStorage needs a change to run in PinDeck.
  • Two named decks in one folder share files such as theme.css. With both open, Undo refuses to overwrite a file the other deck changed.
  • Each open deck starts its own headless Chrome when it needs one.
  • The Codex integration uses OpenAI's experimental dynamicTools app-server extension, so a future Codex update may need a PinDeck update.
  • Try the beta on a copy of your deck.

Please report problems as issues and mention "v3 beta".

PinDeck 3.1 beta 1: several decks, screenshots from the chat

Choose a tag to compare

@ehabets ehabets released this 28 Oct 20:54

The first preview of PinDeck 3.1. It adds a deck menu, so one PinDeck serves several decks on one port, and screenshots you can open from the chat. It is on npm's beta channel; npx pindeck installs 2.10.0.

What's new since 3.0.0-beta.3

  • Open another deck from the editor (#9): click the deck's name above the slide to see the .html files in the deck's folder and its asset roots, and one folder down. Choose one to open it in the same tab (⌘-click for a new tab). Files PinDeck cannot open are greyed out with the reason. Listing decks changes no file; a deck gets its element ids only when it is first opened.
    • Each open deck keeps its own chat, assistant session and Undo. pindeck now starts a small front that holds the port and the login, and runs one deck server per open deck. Over SSH, one tunnel serves every deck.
    • A deck with no editor open for 30 minutes closes (its Undo history goes, as on a restart) and reopens when chosen again.
    • A folder without index.html opens a page listing its decks instead of failing.
    • pindeck login talk.html prints a link that opens that deck.
  • Open a screenshot from the chat (#10): a screenshot the assistant took shows as a small picture on its chat line; click it to see it large. A screenshot PinDeck no longer keeps says so.

Try it

npx pindeck@beta path/to/deck

Or from the v3-beta branch. Requires macOS, or Linux (beta), Node 20 or later, and Claude Code (claude auth login) or Codex (codex login). Then open the login link PinDeck prints. Settings, chats and backups stay in ~/.pindeck-v3, apart from v2.

Known limits

  • Two named decks in one folder share files such as theme.css. With both open, Undo refuses to overwrite a file the other deck changed, as with two PinDecks today.
  • Each open deck starts its own headless Chrome when it needs one.
  • The Codex integration uses OpenAI's experimental dynamicTools app-server extension, so a future Codex update may need a PinDeck update.
  • Try the beta on a copy of your deck.

Please report problems as issues and mention "v3 beta".

PinDeck 3.0 beta 3: decks made without reveal.js

Choose a tag to compare

@ehabets ehabets released this 26 Oct 10:46

The third preview of PinDeck 3. It brings in what 2.10.0 added after its first beta, for both assistants. It is on npm's beta channel; npx pindeck installs 2.10.0.

What's new since beta.2

  • Decks made without reveal.js: a deck with a script of its own, Shower, deck.js or a hand-written deck can be edited once it names its slides and their size in its <head>:

    <meta name="pindeck:slides" content="main.deck > section.slide">
    <meta name="pindeck:size" content="1440x1080">
    

    Selecting, moving, text editing, pins, notes, new, moved and hidden slides, layout checks, screenshots and PDF export then work as for a reveal.js deck. Claude and Codex are both told what the deck's slides are. Contributed by Zeyu Xu (#4); see "Decks made without reveal.js" in the README.

  • Screenshots fill the picture: headless Chrome lays the page out shorter than its window, which left the slide letterboxed in some Chrome versions (#5, reported by Zeyu Xu).

Try it

npx pindeck@beta path/to/deck

Or from the v3-beta branch. Requires macOS, or Linux (beta), Node 20 or later, and Claude Code (claude auth login) or Codex (codex login). Then open the login link PinDeck prints. Settings, chats and backups stay in ~/.pindeck-v3, apart from v2.

Known limits

  • The Codex integration uses OpenAI's experimental dynamicTools app-server extension, so a future Codex update may need a PinDeck update.
  • Decks made without reveal.js have no build steps (.fragment); whether presenting skips hidden slides is up to the deck's own script.
  • Try the beta on a copy of your deck.

Please report problems as issues and mention "v3 beta".

PinDeck 2.10.0

Choose a tag to compare

@ehabets ehabets released this 26 Oct 10:28

PinDeck is a local editor for HTML slide decks: pin elements on a slide, describe the change, and
Claude Code edits the HTML and CSS.

What's new in 2.10.0

  • Decks by file name: pindeck path/to/talk.html opens that deck (a folder still opens its
    index.html). Several decks can share a folder, each with its own chat and undo history.
  • Claude on the whole deck: Claude may edit and create the deck's other files (scripts, style
    sheets, notes), never brand.css, vendor/ or other decks in the folder. One Undo takes back
    everything a turn changed, created or deleted.
  • Shared files: --asset-root <folder> (or "assetRoots" in config.json) lets a deck use files
    outside its folder, such as ../shared/style.css, in the editor, screenshots and PDF exports.
    Symlinks that lead out of the deck are refused.
  • Shared instructions: the deck's CLAUDE.md and AGENTS.md may import other files with @path.
  • Decks made without reveal.js: a deck with its own script (or Shower, deck.js, a hand-written
    deck) that names its slides with <meta name="pindeck:slides" content="…"> and their size with
    <meta name="pindeck:size" content="1440x1080"> is edited like a reveal.js deck. Thanks to
    Zeyu Xu (#4). Decks of other frameworks without these tags are recognised and refused with their
    name, and the message says how to add the tags.
  • Screenshots fill the picture instead of being letterboxed in some Chrome versions (#5).
  • Linux: pictures of PDF pages with Poppler, the PowerPoint import with LibreOffice, and waveforms
    of non-WAV audio with ffmpeg, each when installed.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude CLI signed in. On Linux, see "Running on a
Linux server" in the README for the SSH tunnel. The full list of versions is at the end of the README.

PinDeck 3.0 beta 2: security fix, Linux, the whole deck

Choose a tag to compare

@ehabets ehabets released this 22 Oct 10:00

The second preview of PinDeck 3. It has everything from 2.9 and 2.10, including a security fix, so update from beta.1. It is on npm's beta channel; npx pindeck still installs 2.9.

Security

In 3.0.0-beta.1 the editor page contained the server's token, and the deck needed no token, so another user of the same machine could read both. Now PinDeck prints a one-time login link at start (pindeck login prints a new one), the browser keeps the token in an HttpOnly cookie, and no token appears in any page or on a command line.

What's new since beta.1

  • Everything from 2.9 and 2.10: Linux as a beta (a headless server used through an SSH tunnel), safe saving, Undo/Redo that refuses to overwrite outside changes, decks with their own file names (pindeck talk.html), --asset-root for shared files, @imports in the deck's CLAUDE.md and AGENTS.md, and recognising other slide frameworks.
  • Both assistants work on the whole deck: Claude and Codex may edit and create other files of the deck, never brand.css, vendor/, .git/ or other decks in the folder. One Undo takes back a whole turn.
  • Codex creates files with a new pindeck_write tool and saves through PinDeck's safe saving. It can read asset roots but not write them.
  • Claude may run only PinDeck's own commands (layout, shot, slides, pdf, pdf-figure), each named separately.
  • Fixes: --provider codex without a saved model now picks Codex's default model, also while model lists are still loading. Stopping PinDeck waits for every backend process.

Try it

npx pindeck@beta path/to/deck

Or from the v3-beta branch. Requires macOS, or Linux (beta), Node 20 or later, and Claude Code (claude auth login) or Codex (codex login). Then open the login link PinDeck prints. Settings, chats and backups stay in ~/.pindeck-v3, apart from v2.

Known limits

  • The Codex integration uses OpenAI's experimental dynamicTools app-server extension, so a future Codex update may need a PinDeck update.
  • Try the beta on a copy of your deck.

Please report problems as issues and mention "v3 beta".

PinDeck 2.9.0

Choose a tag to compare

@ehabets ehabets released this 22 Oct 06:56

PinDeck is a local editor for HTML slide decks (reveal.js): pin elements on a slide, describe the
change, and Claude Code edits the HTML and CSS.

What's new in 2.9.0

  • Linux (beta): PinDeck runs on a Linux server where the deck lives, with Claude Code there too,
    and you use the editor from your Mac's browser through an SSH tunnel. The tunnel may use another
    local port than the server. Screenshots, layout checks and PDF export work when Chrome or Chromium
    is installed; features a server cannot provide are switched off, with the reason shown in the editor.
  • Security fix: the editor page no longer contains the editor's token, and the deck needs it too,
    so other users of the same machine can no longer read the editor or the deck. PinDeck prints a
    one-time login link at start; pindeck login prints a new one. After a restart, log in again.
  • Safer saving: files are saved in one step, never half-written. An edit made on files that changed
    meanwhile is refused, and Undo/Redo no longer overwrite changes made outside PinDeck.
  • Audio and video in Safari: deck files are now sent the way Safari needs to play media, and ogg,
    opus, m4a, aac, flac and mov are recognised.
  • Decks anywhere: Claude gets the right command for PinDeck's layout checks wherever the deck sits,
    and the deck's AGENTS.md reaches Claude along with its CLAUDE.md.
  • Fixes: pictures of PDF pages on macOS have a white page instead of a transparent one, so dark
    text no longer disappears on a dark slide; screenshots and PDF exports are no longer now and then
    reported as failed; git-setup works for decks behind symlinks or with spaces in their path.

Install

npx pindeck path/to/deck

Requires macOS or Linux, Node 20 or later, and the claude CLI signed in. On Linux, see "Running on a
Linux server" in the README for the SSH tunnel. The full list of versions is at the end of the README.