Skip to content

Engine API

Everything below is from @liebstoeckel/engine unless noted.

ExportKindPurpose
Presentcomponentthe entry; routes to Deck / PresenterView / CaptureView
Deck · DeckPropscomponentthe audience/standalone view
PresenterViewcomponentthe #presenter window
CaptureViewcomponentbuild-time thumbnail render
normalizeSlides · SlideInputfn / typenormalize slide modules
ExportKindPurpose
Stepcomponenta progressive reveal
StepsProvidercomponentper-slide step tracker (the engine mounts this)
useRevealState(count)hookclaim count-1 reveal slots, get the active state index (for CodeMagic-like components)
CodeMagiccomponentanimated code; steps, title?, lang?
TokenizedStep · CodeTokentypesshape of macro output
MagiccomponentMagic Move via shared layoutId
Atmospherecomponentanimated gradient background (still?)
Present/Deck transition proppropdeck-wide slide transition; a slide can export const transition to override
Present/Deck mobileTransitions proppropre-enable slide transitions on mobile (coarse pointer); off by default
Present/Deck brandThemes proppropTheme[] of deck-defined brands, injected as [data-brand] CSS; reference by name in brands (see theming)
resolveTransition · TRANSITIONS · DEFAULT_TRANSITIONfn/constresolve a name/custom spec → Motion variants; the built-in presets; the default ("fade")
SlideTransition · SlideTransitionName · SlideTransitionSpec · SlideDirectiontypestransition config (preset name fade/blur/slide/zoom/none, or a custom { variants, transition })
Slot · PersistentProvider · PersistentLayer · PersistentItemcomponents/typepersistent stateful elements
ExportKindPurpose
ScaledStagecomponentfit the 1280×720 canvas to its parent
SlideFramecomponentbrand bg + atmosphere + padded content
STAGE_W · STAGE_Hconst1280 · 720
ExportKindPurpose
Plugincomponentplace a plugin (id, props?, components?)
LiveProvider · useLive · LiveContextValuecomponent/hook/typethe live context
detectLive · LiveInfofn/typeis a live server connected?
connectLive · LiveConnectionfn/typeconnect to a session over WebSocket
useLiveDeck · getDeckIndex · setDeckIndex · DeckControllerhooks/fns/typethe synced slide/step controller
getParticipantIdfnstable (or ephemeral) per-browser id
mergeUifnmerge author surface overrides

useDeckNav (keyboard) plus pure helpers: stepForward, stepBack, clampIndex, accumulateDigits, fullscreenAction, toggleFullscreen.

readThumbnails()ThumbnailSet | null: the embedded thumbnail manifest, used by the overview grid.

ImportExports
@liebstoeckel/engine/buildbundleDeck (browser-free build primitive), buildPluginManifest, buildServerBundle
@liebstoeckel/engine/code (macro)codeStory, code (import with { type: "macro" })
@liebstoeckel/engine/build/thumbnailsembedThumbnails, extractThumbnails, stripThumbnails (the manifest format)
@liebstoeckel/thumbnailswithThumbnails (gated, never-fatal capture+embed), captureThumbnails, addThumbnailsToFile, thumbnailsEnabled
@liebstoeckel/thumbnails/buildbuildDeck, the default build: bundleDeck + slide thumbnails

Comments

liebstoeckel

Code-first presentations your agent can author. One file out, no server.

© 2026 Leon Kaucher