Skip to content

v2.4.0

Version 2.4.0
Released 2026-10-09

🚀 Highlights

  • Export a play as a video
    (#418) Demo Time plays your demo on its own in a separate VS Code window, records it, and writes an MP4, with an optional GIF, captions, chapters, and title and end cards. Run it from VS Code, or from a terminal or CI with npx @demotime/video export.

  • Preflight check
    (#459) Find the broken moves before you are on stage. The preflight check goes through the whole play without running it and reports missing files, patches that don’t apply, unknown scene ids, unset variables and more in the Problems panel and in the act editor.

  • AI skills
    (#419) GitHub Copilot, Claude Code and other assistants that support SKILL.md can now plan your talk, create slides and slide themes, and script live coding demos with act files that load and run.

  • Speaker notes in your slides
    (#421) Write the notes of a slide in the slide itself with a <!-- notes ... --> block. The presenter view, the remote control and the PDF export show them.

  • Help while writing slides
    (#420, #427, #442) Completion, hover and diagnostics for every front matter property, a warning when content doesn’t fit the slide, and the new autoFit property to scale it down.

  • New settings view
    (#463) The Demo Time: Settings view has categories, search, a Modified only filter, a reset per setting, and now includes every Demo Time setting.

✨ New & Notable Features

Video Export

  • Demo Time: Export play as video Command (#418) – Export the whole play or one act in 16:9, 1:1 or 9:16. Add a GIF for a README, SRT captions from the scene titles or notes, chapters, and title and end cards made from the first and last slide. The files go to .demo/exports, and Export again reuses your choices.

  • @demotime/video CLI – Export from any terminal or in CI with npx @demotime/video export, without opening VS Code or installing Demo Time first. Pick a range like --range act:2/scenes:3-5, a --preset, captions, a GIF and more.

  • Unattended run – The Demo Time: Run play unattended for recording and Demo Time: Stop unattended run commands play the whole play or an act in the current window, so you can record it with your own tool.

  • Settings – demoTime.videoExport.command, demoTime.videoExport.extension and demoTime.videoExport.options.

Preflight Check

  • Demo Time: Run preflight check Command (#459) – Checks every move in the play without running it. It reports:

    • missing path, contentPath, patch and notes files
    • copy, move and rename destinations that already exist
    • patches that don’t apply to their snapshot
    • moves without a property they need, or with an unknown action
    • runDemoById moves for scene ids that don’t exist
    • openSlide moves for a slide number the file doesn’t have
    • {STATE_...} and {SCRIPT_...} variables that no earlier move sets
    • snippet arguments that the args don’t set

    The check follows the play in order, so a file that an earlier move creates, copies, moves or deletes is taken into account.

  • Go to the move – Each problem links to its scene and move, like Scene 3 · Move 2, and opens the act editor with that move selected.

  • Problems in the act editor – The act editor shows the problems of its act while you edit, also before you run the check: a count of errors and warnings in the header, counts on the scenes and moves, and the message below the field it’s about.

  • Create file – Problems about a missing file have a Create file action, in the act editor and as a quick fix in the Problems panel.

AI Skills

  • Four skills (#419) – demotime-talk-plan, demotime-slides, demotime-slide-theme and demotime-code-demo. Their references are generated from the documentation and the act file JSON schema, so they match the release you have installed.

  • GitHub Copilot in VS Code – Copilot loads the skills from the extension; there is nothing to install.

  • Demo Time: Install or update AI skills Command – Install the skills for GitHub Copilot, Claude Code or other agents in the project or user skills folder. After an update, Demo Time offers to update the skills that an older version installed.

  • Claude Code plugin – Install the skills with /plugin marketplace add estruyf/vscode-demo-time and /plugin install presentation-skills@demotime. Every release also has the skills as demotime-skills.zip for other assistants.

Writing Slides

  • Front matter completion and hover (#427) – Completion suggests the properties a slide doesn’t set yet, with the properties of its layout first, and the values of layout, theme, transition, controlsPosition, progress and the true/false properties. Hover shows the description, values, default and layouts of a property.

  • Front matter diagnostics (#420) – The Problems panel shows invalid YAML, misspelled properties with a “did you mean” quick fix, unused properties, invalid values, missing image, video, svgFile, customTheme and customLayout files, invalid Handlebars in layouts, headers and footers, and a Word: text line that hides slide content.

  • Slide front matter JSON schema (#427) – Available at https://demotime.show/slide.schema.json, generated from the same definitions as the completion, hover and diagnostics.

  • Content that doesn’t fit (#442) – The slide preview shows a Content doesn’t fit the slide badge with how much the content is too tall or too wide, and marks every edge where it is cut off. Slides of the file that don’t fit also show in the Problems panel and in the Go to slide overview.

  • autoFit Property (#442) – Scales the content of a slide down, to at most 50%, when it doesn’t fit. It works in the preview, presentation mode, the overview, the PDF export and the presenter view, and the quick fix of the overflow warning adds it for you.

  • Preview and editor sync (#443) – Moving the cursor to another slide shows that slide in the preview, the preview opens at the slide under the cursor, and double-clicking a slide moves the cursor to its source. Turn it off with the demoTime.slidePreviewSync setting.

  • background and class Properties (#424) – Change the look of one slide without a custom layout. background takes a colour, a gradient, or an image path or URL, and class adds CSS classes for your custom theme to style. Set them in the document front matter to use them for the whole deck. They also apply in the overview, the PDF export and the presenter view.

  • dt-action Component (#440) – Run a scene by its id from a slide, like a “Run it” button next to a code sample or an agenda that jumps to each act. It renders as a button, or as a link with variant="link", and is styled with the --demotime-action-* CSS variables. A dt-action without an id, or with an id no scene uses, shows a warning.

Presenting Slides

  • Speaker notes in slides (#421) – A <!-- notes ... --> block is removed from the slide and shown in the presenter view, the remote control and the /api/notes endpoint, updating on every slide change. Slides without notes fall back to the notes file of the scene. Write them from the preview with Add speaker notes in the More actions menu.

  • Hidden slides (#444) – The hide front matter property keeps a slide in the file without presenting it. Next/previous, auto-advance and the presenter view skip it, and {{crntSlideIdx}} and {{totalSlides}} don’t count it. Toggle it from the preview with Hide slide while presenting.

  • Header and footer placeholders (#447) – {{slideTitle}}, {{sceneTitle}}, {{actTitle}}, {{presentationTitle}} and {{date}}, with {{date "d MMM yyyy"}} to format it. Set the presentation title with the demoTime.presentationTitle setting.

  • Progress bar (#447) – Show a thin progress bar at the top or bottom of the slides with the demoTime.slideProgressBar setting or the progress front matter property, styled with the --demotime-progress-* CSS variables.

  • Reduced motion (#451) – Slide transitions become a short crossfade, text animations and animated SVGs show their end state, and zoom and the laser pointer no longer animate. It follows the workbench.reduceMotion setting of VS Code, or set it with demoTime.slideReducedMotion (auto, on, off). Custom themes can follow it with the data-reduced-motion attribute.

  • Clicker support (#436) – PageDown and PageUp run Demo Time: Start and Demo Time: Previous in presentation mode, for presenter clickers that send these keys. dt-list has a new clicks attribute to set the click on which its first item appears.

PDF Export

  • Speaker notes (#421) – The demoTime.pdfExport.notes setting adds the notes below each slide or on a separate page.

  • Hidden slides (#444) – Hidden slides are left out by default. Include them with the demoTime.pdfExport.includeHiddenSlides setting.

Moves and Status Bar

  • waitTimeout Property (#400) – Let the executeTerminalCommand move wait longer than 5 seconds for a long-running command, like a build or a test run, before the next move runs. Thanks to @88871.

  • demoTime.nextSceneButtonText Setting (#380) – Show a fixed text, like Next, on the next scene button in the status bar, so the button no longer changes width with every scene.

  • Secondary side bar – demoTime.presentationViewToggles has a new secondarySideBar option, on by default, so presentation view also closes the side bar where VS Code shows Chat.

Settings View

  • New layout (#463) – Settings are grouped in categories with a navigation list, a search box (Cmd/Ctrl+F), a Modified only filter, markers for modified and unsaved settings, and a Reset to default link per setting.

  • Every setting – The settings that were missing from the view are now there, including the zoom, remote, analytics, recording, PDF export, redaction and video export settings.

  • Highlight colors – Pick a VS Code theme color, a custom color with opacity, or no color for demoTime.highlightBorderColor and demoTime.highlightBackground, with a preview in the colors of your theme.

🛠 Improvements & Fixes

  • Reveal slide source (#443) – The Open slide source action of the slide controls is now Reveal slide source, and puts the cursor on the current slide instead of at the top of the file.
  • Click steps (#436) – dt-show, dt-hide and dt-list now advance with the remote, the API, auto-advance, the Next button and PageDown, not only the right arrow key. Clicks on the slide controls no longer count as a step.
  • PDF export of click steps (#437) – The PDF shows the final state of each slide instead of empty dt-list lists and hidden dt-show content.
  • PDF export themes – Themes that target [data-theme] now also apply in the PDF.
  • Front matter parsing (#428, #429) – Document front matter followed directly by --- no longer shows as an extra slide, a slide starting with a Word: line (like Note: remember this) is no longer read as front matter, and --- inside a ~~~ code block no longer splits the slide.
  • Front matter help in every block (#438) – Hover and completion work in the front matter of every slide, not only the first.
  • Video autoplay (#430) – Video slides respect autoplay: false.
  • Custom layout errors (#431) – A missing customLayout file or invalid Handlebars now shows an error on the slide and in the Demo Time output channel instead of failing silently.
  • Mermaid diagrams (#432) – Diagrams with double quotes or a < in their code, like A["Start here"] or a <br/> in a label, render on the slide and in the PDF.
  • Escape while zoomed (#433) – The first Escape only leaves zoom and no longer turns off presentation view.
  • Presenter view next-slide preview (#434, #435) – The preview uses the slide of the next openSlide move, scenes without an id no longer share a cached preview, /preview returns HTML instead of a cached screenshot, and the card refreshes when the next slide has no H1.
  • Go to slide overview (#442) – Slides show with their own theme and all click steps revealed, and no longer add click steps to the current slide.
  • Slide numbers in headers and footers (#447) – {{crntSlideIdx}} and {{totalSlides}} work in a slide’s own header and footer, and in the presenter view’s next-slide preview.
  • Remark plugins (#453) – transformMarkdown runs remarkPlugins before remark-rehype, so they see the markdown tree.
  • Zoom moves (#463) – zoomIn and zoomOut respect the demoTime.zoom setting.
  • Act file JSON schema (#419) – An act without version is no longer validated as a version 3 act, and positionCursor no longer requires an endPlaceholder.

📚 Documentation

🔗 See Also