Skip to content

Build Animations

Mark any bullet, image, code block, table, formula, diagram, blockquote, or a handful of other elements with <!-- step --> and it appears on its own click during a presentation, instead of the whole slide landing at once — build/reveal animations, the same idea as PowerPoint's "Animations" or reveal.js fragments.

A slide with no <!-- step --> markers behaves exactly as before — this is entirely opt-in.

Full worked example

examples/animations-demo.md in the app repo is a complete tour of every marker form across every supported content type — open it in Kova and step through it in Presentation mode.


Basic syntax

- Always visible from the start
- Appears on the first click <!-- step -->
- Appears on the second click <!-- step -->
- Appears on the third click <!-- step -->

<!-- step --> auto-increments in document order — no numbers to manage. Steps are scoped per slide; the count resets to 1 after every slide separator (---).

Grouping elements onto one click

Add an explicit number to group several elements onto the same click:

- Revealed alone, first click <!-- step -->
- These two <!-- step: 2 -->
- arrive together <!-- step: 2 -->
- Back to auto-increment <!-- step -->

A later bare <!-- step --> continues counting from the highest explicit number used so far, rather than colliding with it.

Placement

The marker either trails inline after a paragraph or list item, or — for a block element with no text to trail onto — sits alone on the line directly underneath it:

![A chart](chart.png)
<!-- step -->

This is the same "must directly follow" convention !caption already uses. A <!-- step --> with no eligible element directly above it, or a second one stacked on an element that already has one, reports a clear #ERR rather than silently vanishing.


What can be stepped

Element Notes
List items Nested/sub-bullets share the same per-slide click sequence as their parents
A whole list A marker placed after the list (not each item) gates every item as one unit — any per-item markers inside that list are cleared automatically
Images
Code blocks
Tables The whole table appears together — tables build as one unit, not row by row
Display math ($$...$$)
Mermaid diagrams
Blockquotes and callouts
!youtube, !video, !poll embeds
!progress bars
!toc

Paragraphs and list items take the marker trailing inline; every other type in the list above takes it on its own line directly underneath, per Placement.


Presenting

A "next" action (click, , Space, scroll down, …) advances through the current slide's remaining steps one at a time before it moves to the next slide. Going backward across a slide boundary lands on the previous slide fully revealed (its last step), not back at its start — the least surprising place to arrive from when stepping backward. See Keyboard Shortcuts — Presentation mode for the full key list.

This works identically in single-screen mode, the dual-screen presenter view (both the audience window and the presenter's own next-slide preview stay in sync), and the standalone HTML export — see Presenting and Exporting — Standalone HTML export.

Editor preview always shows everything

The live preview in the editor is for editing, not rehearsing — it always shows a slide fully revealed regardless of step markers. Use Presentation mode to see builds actually happen.


Editor support

Right-click a line and choose Reveal on click (or press Ctrl+Shift+R, Cmd+Shift+R on macOS) to toggle a step marker on it without typing the comment by hand. Selecting multiple lines toggles all of them together: if any already has a marker they're all removed, otherwise every line gets one, sharing a single step so they build together on one click.

Each marker shows a small · N badge next to it in the editor, computed the same way the presentation numbers its clicks — so what you see while editing can never drift from what the presentation actually does.


Export behaviour

PowerPoint export — steps become real, native click-triggered animations in the .pptx file (not a flattened, always-visible placeholder), built from hand-authored OOXML timing data.

Initial release — verified in LibreOffice, not yet in Microsoft PowerPoint

PPTX build animations have been manually verified in LibreOffice Impress. They have not yet been thoroughly tested in Microsoft PowerPoint itself. If a build animation doesn't play correctly there, please open an issue.

A <!-- step --> on the quote layout's hero quote, or on the video/poll embed in a full-slide media layout, is a known, bounded gap: it still gates the live preview, presentation, and HTML export normally, but exports to PowerPoint unanimated — visible immediately, the same as before this feature existed.

PDF export and Print — both capture each slide in its final, fully-revealed state as a single page; steps don't produce extra pages. See Exporting.


Errors

Situation Result
<!-- step --> with no eligible element directly above it #ERR <!-- step --> must directly follow a list, image, diagram, formula, table, blockquote, code block, YouTube embed, video, poll, progress bar, or table of contents
A second marker stacked on an element that already has one #ERR duplicate <!-- step --> marker

As with other Kova directives, an error is scoped to that one spot — the rest of the slide still renders normally.