Zoomdeck
Zooming presentations written in Markdown and played entirely in the browser.
What Zoomdeck does#
A Zoomdeck presentation is a tree of slides. Each slide has its own logical canvas and a small animation program; child slides sit inside their parent's canvas as viewports. Presenting means visiting the tree in pre-order: the camera zooms into each child, plays its steps and zooms back out, so the audience always sees where a detail belongs.
You write slides in a Markdown dialect: prose, LaTeX formulas, images, video, shapes, arrows, code listings, live web pages, fragments that appear on clicks, and animations such as moves, morphs and effects. When the dialect is not enough, a slide can be a small TypeScript class with the full animation engine at hand. Everything runs live on a WebGL canvas in the browser: a deck loads, records itself once, and then plays forwards and backwards instantly, with an outline, deep links, a pen, a highlighter, a spotlight and configurable keys. The same deck previews while you edit it and exports to a static folder or to a single HTML file that plays from disk.
Requirements#
| Needed | Notes |
|---|---|
| Node.js 20 or newer, with npm | to install, preview, export and build the documentation |
| A browser with WebGL 2 | Chrome, Edge, Firefox and Safari of the last few years; this is where decks run |
npm install |
fetches the only runtime dependencies: the manim-web rendering engine (Three.js and MathJax inside), markdown-it for the dialect, gifuct-js for GIFs, and Vite for the preview and exports |
Nothing else is required: no Python, no LaTeX installation (formulas render through MathJax in the browser), no video encoder, no font installation (the Latin Modern text face is bundled). Exported decks are plain HTML and need no server to be viewed.
cd Zoomdeck
npm install
npm run dev # opens the guide deck at http://localhost:5173/
Getting started continues from here with a first deck and the command line.
The guide#
The guide deck is Zoomdeck's own demonstration and the companion of this documentation: a
presentation in which every chapter shows a feature next to the listing that produces it.
Open the guide — it is a single self-contained HTML file next to these pages,
exported from examples/guide/ when you run npm install (and again by npm run docs); it runs
from disk or from any web server, and npm run dev opens the same deck live. Each chapter has its own link:
| Chapter | Opens |
|---|---|
| Slides form a tree | containers, includes, nested zooming |
| Prose and inline styling | emphasis, colors, breaks, lists, links |
| Mathematics | inline and display formulas, macros, colored LaTeX |
| Images and animated images | SVG, raster, APNG and GIF playback |
| Shapes and connections | rectangles, circles, polylines, arrows, lines |
| More shapes, braces, boxes and opacity | dots, ellipses, polygons, arcs, attachments |
| Positioning and relative layout | flow, coordinates, relative constraints |
| Anchors, offsets and timing | anchor=, dx/dy, run_time, lag |
| Anchor expressions and styles | at=, classes, roles, style sheets |
| Groups | elements laid out in local coordinates |
| Fragments and click steps | step, hide, show, next, skip_next |
| Decorations visible only in focus | focus_only panels and captions |
| Children, visit order and placeholders | visit steps, skip_return, undefined slides |
| Code-authored slides | a TypeScript Slide imported into Markdown |
| Code listings | fenced code with syntax colors |
| Animations from markup | animate, effect, transform, move_along |
| Video, live pages and going back | video, iframes, reverse playback |
| The player and deck.json | keys, pointer tools, configuration, command line |
The project lives at github.com/puppis/zoomdeck; this site
and the guide are published from it at puppis.github.io/zoomdeck.
The guide's sources are in examples/guide/: slides.md, deck.json, code-slides.ts and a
few generated assets. Copying that folder is a good way to start a deck; exporting your own deck
the same way (zoomdeck build <deck> -o <folder> --one-file) gives a file like guide.html.
Documentation#
at= expressions.
FragmentsSteps, show and hide, timing, automatic advancement.
AnimationsMove, rotate, scale, recolor, effects, morphs and paths.
Code-authored slidesTypeScript slides with the full engine, mixed into Markdown decks.
The playerKeys, settings, pen and spotlight, reverse playback.
Exporting a deckA static folder, or one HTML file that plays anywhere.
ConfigurationEvery key of deck.json and the command line.
ReferenceEvery directive and attribute on one page.