Skip to main content

Presentation

@webframp/presentationv2026.10.21.1· Apache-2.0· 4d agoBEHAVIORSWORKFLOWSREPORTS
01README

Build reveal.js presentations from Org or Markdown and keep every build, outline and PDF as versioned swamp data.

Org decks render through org-re-reveal, so #+REVEAL_ options, fragments, speaker notes and themes behave as they do in Emacs. Markdown decks render through pandoc, or in the browser through reveal.js's markdown plugin. Decks load reveal.js 6.0.1 from jsDelivr with subresource integrity, or carry every file inline (selfContained) and work offline. Local images are always inlined, so a stored deck never depends on files beside its source.

Every download is pinned to an exact version and SHA-256: reveal.js from jsDelivr, org-re-reveal 3.39.0 and htmlize 1.59 by commit. Nothing is read from your Emacs configuration. A deck is treated as untrusted: building it runs no code it names (Babel, eval macros, preamble functions) and reads no file outside its own directory.

Requirements

  • Emacs 27.2 or later for Org decks (its built-in Org, 9.4 or newer, is used)
  • pandoc 3 for the pandoc engine
  • Chromium or Chrome for export_pdf

Quick start

swamp extension pull @webframp/presentation
swamp model create @webframp/presentation/deck talks

swamp model method run talks build --input source=talk.org
swamp model method run talks outline --input source=talk.org
swamp model method run talks export_pdf --input name=talk

# The deck itself, ready to open in a browser:
swamp data query 'model("talks") && name == "html-talk"' \
  --select content > talk.html

Or outline, build and print in one run:

swamp workflow run @webframp/presentation-build \
  --input source=talk.org --input pdf=true
02Release Notes

2026.10.21.1

Added: First release. The @webframp/presentation/deck model builds reveal.js 6.0.1 presentations from Org or Markdown and stores each build as versioned swamp data.

  • build renders a deck with org-re-reveal (Org), pandoc (Markdown) or reveal.js's markdown plugin. Decks load reveal.js from jsDelivr with subresource integrity, or inline every file with selfContained and work offline. Local images are always inlined. A rebuild with identical output writes no new HTML version.
  • outline reads a source without rendering it: slides, speaker-notes coverage and missing images.
  • export_pdf prints the latest build with headless Chromium.
  • The @webframp/presentation-build workflow outlines, builds and optionally prints one deck.
  • The @webframp/presentation/deck-summary report summarises each method run.

Downloads are pinned by SHA-256: reveal.js files from jsDelivr, and org-re-reveal 3.39.0 and htmlize 1.59 by commit. Org decks build in Emacs -Q, so your configuration plays no part.

Decks are treated as untrusted. A build runs nothing the deck names: no Babel, #+BIND, file-local variables, (eval ...) macros or preamble functions. It reads and inlines files only from the source's own directory, outside .git and .swamp, within size limits, and Emacs, pandoc and Chromium each run under a timeout.

03Behaviors1
@webframp/presentation/deckv2026.10.21.1presentation/deck.ts

Global Arguments

ArgumentTypeDescription
emacs?stringEmacs executable for the org-re-reveal engine
pandoc?stringpandoc executable for the pandoc engine
chromium?stringChromium or Chrome executable for export_pdf
chromiumNoSandbox?booleanPass --no-sandbox to Chromium. Needed in some containers and WSL; leave off otherwise
buildTimeoutSeconds?numberLongest an Emacs or pandoc run may take before it is stopped
cacheDir?stringWhere pinned downloads are cached (default: $XDG_CACHE_HOME/webframp-presentation or ~/.cache/webframp-presentation)
fn build(selfContained?: boolean)
Render an Org or Markdown source to a reveal.js deck and store the HTML. Skips writing a new HTML version when the output is byte-identical to the last build
ArgumentTypeDescription
selfContained?booleanInline every reveal.js file so the deck works offline (larger file)
fn outline()
Read a source without rendering it: slide titles, speaker-notes coverage and missing images
fn export_pdf(source?: string, timeoutSeconds?: number)
Print the latest build of a deck to PDF with headless Chromium. Decks that load reveal.js from the CDN need network access
ArgumentTypeDescription
source?stringSource path, used only to derive the deck name
timeoutSeconds?numberLongest wait for reveal.js to lay out its print view

Resources

deck(infinite)— Build record of one deck: engine, pinned reveal.js, slides, HTML hash and version, warnings
outline(infinite)— Outline of a deck source: slides, speaker-notes coverage, missing images
pdfInfo(infinite)— Record of one PDF export: page count, hashes, versions

Files

html(text/html)— A reveal.js deck, named html-<name>
pdf(application/pdf)— A deck printed to PDF, named pdf-<name>
04Workflows1
@webframp/presentation-build8596b518-de49-4c55-b9b4-6f223f88fc9a

Build one deck: outline the source, render it, and optionally print it to PDF. Each step runs only if the one before it succeeded, so a source that fails to build never reaches the PDF step. Requires an @webframp/presentation/deck instance, named by the `deck` input (default `talks`): swamp model create @webframp/presentation/deck talks The deck's data name comes from the source file name. To choose another name or an engine other than the default, run the methods directly: swamp model m

deckOutline, build and optionally print one deck
1.outline${{ inputs.deck }}.outline— Read the source without rendering it
2.build${{ inputs.deck }}.build— Render the deck and store its HTML
3.pdf${{ inputs.deck }}.export_pdf— Print the build to PDF (skipped unless pdf is true)
05Reports1
@webframp/presentation/deck-summarymethod
deck_summary_report.ts

Summarises a deck build, outline or PDF export: slides, speaker-notes coverage, external resources and warnings

presentationreveal.jsslides
06Stats
A
100 / 100
Downloads
5
Archive size
66.6 KB
  • Has README or module doc2/2earned
  • README has a code example1/1earned
  • README is substantive1/1earned
  • Most symbols documented1/1earned
  • No slow types (deprecated)1/1earned
  • Dependencies pass trust audit2/2earned
  • Has description1/1earned
  • Platform support declared (or universal)2/2earned
  • License2/2earned
  • Verified public repository2/2earned
07Platforms
08Labels