Reference
Changelog
Notable changes. Follows Keep a Changelog · the project is on semver.
0.6.0 · 2026-06-19
Added
- Slide zoom. Ctrl/⌘ + wheel, trackpad pinch and
+/-/0magnify the active slide around the cursor and pan it (drag or wheel), fixed-canvas only, on by default. Scales fonts and layout together (no reflow). Opt out withno-zoomon<deck-root>. - Per-slide fluid escape. A single slide can carry its own
fluidattribute to escape the fixed canvas and use the real viewport, while the rest of the deck stays on the canvas · for one slide that embeds a live interactive demo. The canvas is restored on navigation away. - Plugin hook API.
<deck-root>exposes a publicuse(plugin)method and aDeckPlugin/DeckContextcontract so plugins extend the deck through a stable surface instead of patching engine internals.setDeckCodeHighlighter()is the matching hook for<deck-code>syntax highlighting; all three are re-exported fromdist/index.js. - Presenter multi-screen placement. With the Window Management API the deck goes fullscreen on the external screen (the projector) and the speaker window opens on the speaker's current screen, released when the presenter closes.
- Preview (inert) mode.
previewon<deck-root>renders and letterboxes a deck but wires no input, autoplay or presenter handlers · used so the presenter's Current preview acts as a control surface. Ano-counterattribute hides the slide counter outright.
Changed
- Presenter Current preview is a live control surface. Keyboard, click and wheel events on the Current preview are forwarded to the projected deck, with an opt-in advance-on-click. The preview renders the inert
previewdeck. - Slide counter is hidden on cover, overview and blank screens (in addition to the new
no-counteropt-out). - Default slide typography scaled up for projection. Body, lead and heading sizes step up the type scale (body ≈32px on the 1080 canvas) in both shipped themes so text reads from the back of a room; the hierarchy stays monotonic.
- Presenter Current/Next previews are constrained to 16:9, so the laptop thumbnail matches the projected slide's geometry regardless of window shape, and presenter mode auto-hides the projected window's key-hint chips and nav arrows while the speaker window is open.
- Click-stages and Shiki plugins migrated to the hook API. They no longer monkey-patch prototypes.
installClickStages()andinstallShiki()keep working as back-compat shims; a deck created dynamically after the call must register the plugin itself viadeckRoot.use().
Fixed
- Wheel navigation no longer swallows browser zoom. Ctrl/⌘ + wheel and trackpad pinch are left for the browser instead of being
preventDefaulted for slide navigation. - Shiki-highlighted code keeps its colors. The vendored Shiki emits token colors as inline styles, so stripping them left every token monochrome · the palette is now preserved while the
class="line"wrappers survive for step dimming. - Presenter places the speaker window on the right screen on the first press and closes its
BroadcastChannelon teardown, so reopening no longer doubles forwarded input.
0.5.0 · 2026-06-12
This release reworks the rendering model. Every deck now renders into a fixed logical canvas scaled uniformly to fit the viewport, with an opt-in fluid mode for decks that should reflow like a web page, and embedded decks no longer disturb the page that hosts them.
Added
- Opt-in fluid mode.
<deck-root fluid>makes a deck fill its box and reflow like a web page · no logical canvas, no zoom-to-fit scale, no letterbox. It can be toggled at runtime; the default stays zoom-to-fit. - Playwright render net. A browser-level test suite (smoke, navigation, scaling, embedding) loads every fixture deck and asserts the engine upgrades, slides render, navigation works and the host page is left intact.
Changed
- Uniform zoom-to-fit is now the default. Every deck renders into a fixed logical canvas (1920×1080 by default, set via
width/height) scaled uniformly to fit, so a slide's layout is identical at any window size and letterboxed when the aspect differs. Author fluid layouts now opt in withfluid. - Embedded decks leave the host page alone. The global baseline (scroll lock, rem sizing) is scoped to full-page decks, so a
<deck-root>inside a larger document no longer hijacks the page's scroll or typography. - Zoom-to-fit measures the deck's own box (via a
ResizeObserveron the host, not the window), so an embedded deck scales to its container and re-fits on container resize.
Removed
- The
fixedattribute. Zoom-to-fit is now the only canvas mode, sofixedno longer has any effect and has been removed. Decks that still carry it render identically.
Fixed
- Letterbox bands now match slides whose background has a zero blue channel (black, red, yellow). The opacity check parsed the blue channel as the alpha, so those slides wrongly fell back to the page surface for their bands.
- The deck no longer leaves marks on the host page. Removing the last deck restores the page's scroll and rem baseline; changing
width/heightafter first render re-fits the canvas; a deck moved or re-attached in the DOM keeps rescaling on resize.
0.4.0 · 2026-06-12
Added
- Release tooling:
npm run bumprewrites every version surface at once, backed by a Vitest suite (npm test) that fails when any surface drifts. - The docs now declare which release they document via a
rikiki v<version>stamp.
Changed
- The npm package now ships the LLM docs (
llms.txt+docs/llms), so the reference is available afternpm install rikiki-deck.
0.3.1 · 2026-06-09
Fixed
- Presenter mode showed un-styled slides in single-file bundled decks (the mirror iframe failed to re-load the bundle from a
data:URI). The presenter now inlines the bundle when served from a data URL.
0.3.0 · 2026-06-08
Added
- Mouse navigation · click / Shift-click, scroll wheel (yields
to scrollable content, advances at the edge), bottom-right chevrons, and
mouse back/forward buttons. Tune with the
mouse-navattribute. - Click-stages plugin reveals (
installClickStages()) ·data-click,data-click-hide,data-click-auto,data-click-stagger,data-click-children, per-elementdata-anim*, anddata-morphMagic Move (View Transitions, FLIP fallback on Firefox). - Overview grid (O) · viewport-faithful thumbnails (Mermaid diagrams included), type-to-filter search, click-to-jump.
- Clickable hint chips · the bottom-left ← → O P ? now run their action.
Fixed
- Overview SVG styling · Mermaid thumbnails rendered black because cloned-SVG ids were namespaced but their
<style>selectors were not. Diagrams now keep their styling. - Deep links clamp to the nearest valid slide/step instead of snapping to slide 1 (survives iterating with hot reload).
- Wheel yields to scrollable descendants (including inline
<svg>) and navigates at the scroll edge instead of trapping the wheel. - Click-stages edge cases ·
data-click-stagger="0"flips together, stagger children honordata-click-hide/data-anim-delay, no double delay, no flicker during a morph transition, unified step counting.
Changed
- 2D navigation is opt-in via
nav="2d"(was auto-enabled on any sectioned deck). Arrows stay linear by default.
0.2.0 · 2026-06-02
Added
- Click-stages plugin · the first cut of per-element
v-click-style reveals, opt-in viainstallClickStages(). - Multi-file deck assembly ·
build/vite-deck.mjsstitches ordered.html/.mdpartials from adeck.config; a single.mdsplits on---. ?liveopt-in · the core lazy-imports the livereload poller, watching the document's own stylesheets.- LLM-facing reference (
docs/llms/rikiki-reference.md) and arikiki-deckauthoring skill.
Fixed
- Presenter window showed slides unstyled; the bundle URL is now derived from
import.meta.url. deck-rootno longer throws in a sandboxed /srcdociframe (guardedhistory.replaceState).
0.1.0 · 2026-05-21
Added
- Initial public release.
- 23
<deck-*>Web Components · 6 layouts (cover, section, hero, hero-detail, split, hook) and 17 atoms (md, code, callout, card, mermaid, stat, badge, metric, tier-list, step-list, kicker, stack, grid, punch, shortcut, kbd, plus root). - Two ship-ready themes ·
rikiki(tropical palette on dark) andsiliceum(warm paper with a yellow accent). Each is fully token-driven · ~100 CSS custom properties. - 2D keyboard navigation · ←/→ between sections, ↑/↓ within a section, Space for linear, with linear fallback at boundaries so no arrow ever feels dead.
- Path-style overview mode (O) à la reveal.js, one row per chapter, sub-slides flowing right.
- Lazy-loaded modules ·
deck-overview.jsanddeck-help.jsfetch on demand · -12 % on the initial bundle. - Live-reload helper (
?live) · ~70 lines, no WebSocket, polls Last-Modified. - TypeScript-first sources · the framework is built from
.tswith@customElement/@propertydecorators · consumer-side stays zero-build.
Performance budget
- 11.3 KB gzip ·
dist/index.js(everything in one import) - 1.6 KB gzip · lazy overview module
- 1.4 KB gzip · lazy help module
- Lit + decorators externalized to jsdelivr (~21 KB gzip, cached across decks).