Spec

Slide types

The vocabulary a deck is written in. Each type declares its own fields, and that declaration is what you see below.

A slide type is a small contract: a name, a set of fields, and a shape. It is not a template you fill in and then push around, which is why the same deck can render at any size, on any theme, into HTML or PDF, and be read by something that is not a person. Core ships 34 of them, all declared in one registry; the glyph on each card below is the abstract diagram the editor draws in its own slide picker, from the same description of the layout.

The grid is grouped by the structure each type declares: the shape of its primary content, independent of what the slide is about and how it looks. Six values cover all of them, with no "other" bucket, and this is the axis a second implementation builds against - support a structure and you support every type in it.

A type also declares a runtime: what the presenting session has to do for it beyond serving the slide. For nearly the whole catalogue the answer is nothing - a static type renders with no server in the picture. The 4 live types are the exception: the audience answers, and the session collects and aggregates those answers as state the presenter opens and closes. One type, the countdown, is timed - its clock runs in the presenting window and asks nothing of the session.

Singleton 14 types

A fixed set of scalar slots.

A fixed set of scalar slots. Read the keys the type declares; there is no repetition to walk.

  • Title slide title-slide Big title and subtitle to open with Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 160 —
    meta string No 160 —
    background enum No — lime, mist
    logoCorner enum No — left, right
    titleBlockAlign enum No — left, center

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Opening/first slide of any deck

    Reach for something else when

    • Anything other than the deck opening

    Item shape: Scalar fields only Identity: eu.deckyard.slide.title Tier: 1 Runtime: static JSON Schema

  • Section title chapter-title-slide Section divider between topics Fields and detail

    Fields

    Key Type Required Limit Options
    titleBlockAlign enum No — left, center
    title string Yes 140 —
    subheading string No 160 —
    layout enum No — top, center, bottom

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Introducing a new major section or topic
    • Creating visual breaks between different parts of the presentation
    • Helping audience understand the structure

    Reach for something else when

    • Content that needs explanation (use content slides after this)
    • Minor sub-topics within a section

    Item shape: Scalar fields only Identity: eu.deckyard.slide.chapter-title Tier: 1 Runtime: static JSON Schema

  • Text slide content-slide A heading with body text Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    layout enum No — two-column, one-column
    density enum No — auto, compact
    body markdown Yes 3000 —
    asideVariant enum No — none, note, tip, warning
    asideText markdown No 300 —
    background enum No — lime, mist
    actions items No — Repeats, each item with: label, url, style

    Layout variants

    • One column
    • Text in two columns
    • Image 1/3
    • Image 1/2
    • Image 2/3
    • Row above
    • Row below
    • Beside text
    • Corner image

    Reach for it when

    • General explanatory text that does not fit other slide types
    • Mixed content (some bullets + some paragraphs)
    • Content that is truly freeform

    Reach for something else when

    • Lists with title+description pairs (use list-slide)
    • Parallel items/categories with no causal relationship (use list-slide, or icon-card-grid-slide if each needs an icon)
    • Timelines or sequences (use timeline-slide)
    • Tables (use table-slide or chart-slide)
    • Genuine cause→effect / input→output flows between groups (use text-blocks-slide)

    Item shape: actions[] Identity: eu.deckyard.slide.content Tier: 1 Runtime: static JSON Schema

  • Callout callout-slide One insight, warning or definition on its own slide Fields and detail

    Fields

    Key Type Required Limit Options
    variant enum Yes — insight, warning, definition, note, tip
    label string No 80 —
    body markdown Yes 600 —
    source string No 160 —
    background enum No — lime, mist

    Reach for it when

    • A single key takeaway you want to land on its own slide
    • A warning or gotcha the audience must not miss
    • Defining one term before you use it (variant: definition)
    • A short aside or tip that would clutter a content slide

    Reach for something else when

    • A full argument or several points (use content-slide or list-slide)
    • A pull quote with a named speaker (use quote-slide)
    • Two options weighed against each other (use comparison-slide)
    • A section divider between chapters (use chapter-title-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.callout Tier: 2 Runtime: static Falls back to: content-slide JSON Schema

  • Image + text image-text-slide An image beside text Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    body markdown Yes 3000 —
    image image No — —
    imageRole enum No — content, decorative
    alt string No 180 —
    caption string No 160 —
    focusX number No — —
    focusY number No — —
    fit enum No — cover, contain
    imageSide enum No — left, right
    imageWidth enum No — half, narrow, wide
    layout enum No — split, corner
    imageBackground enum No — white, match
    density enum No — auto, compact
    asideVariant enum No — none, note, tip, warning
    asideText markdown No 300 —
    background enum No — lime, mist
    actions items No — Repeats, each item with: label, url, style

    Layout variants

    • Text only
    • Image 1/3
    • Image 1/2
    • Image 2/3
    • Corner image
    • Beside text
    • Row above
    • Row below

    Reach for it when

    • Content where a photo/image adds value
    • Product or feature showcases
    • Person introductions with photo
    • Location or event context

    Reach for something else when

    • Content without a meaningful image to pair
    • Heavy text content (use content-slide or split into multiple)
    • Long bodies on the "wide" or "corner" layouts (little text room)
    • Two or three images with one shared story (use image-set-slide)
    • Many images without text (use gallery-slide)

    Item shape: actions[] Identity: eu.deckyard.slide.image-text Tier: 1 Runtime: static JSON Schema

  • Video video-slide An embedded video Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 100 —
    source string Yes 400 —
    transcript markdown No 20000 —
    background enum No — lime, mist
    autoplay enum No — off, on
    watchUrl string No 400 —
    bunnyLibraryId string No 20 —

    Reach for it when

    • Embedded video content

    Reach for something else when

    • Content without a video URL

    Item shape: Scalar fields only Identity: eu.deckyard.slide.video Tier: 2 Runtime: static Falls back to: content-slide JSON Schema

  • Quote quote-slide A pull quote with attribution Fields and detail

    Fields

    Key Type Required Limit Options
    quoteAlign enum No — left, center
    quotes items Yes — Repeats, each item with: quote, authorName, authorTitle, authorImage1, authorImage1Alt, authorImage2, authorImage2Alt

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Direct quotes from interviews
    • Memorable one-liners or punchy statements
    • Testimonials or endorsements
    • Key takeaways phrased as quotes

    Reach for something else when

    • Long passages (summarize or use content-slide)
    • Multiple quotes (use one quote-slide per quote, spaced apart)
    • Back-to-back placement (space them out in the deck)

    Item shape: quotes[] Identity: eu.deckyard.slide.quote Tier: 1 Runtime: static JSON Schema

  • Image slide image-slide A single full-bleed image Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 80 —
    subheading string No 140 —
    bottomSubheading string No 200 —
    image image No — —
    imageRole enum No — content, decorative
    alt string No 180 —
    caption string No 160 —
    focusX number No — —
    focusY number No — —
    fit enum No — cover, contain
    bleed boolean No — —
    layout enum No — full, bleed, centered
    background enum No — lime, mist
    zoomSteps enum No — , corners, horizontal, vertical, quadrants, custom
    zoomLevel number No — —
    zoomPositions string No 500 —

    Reach for it when

    • Powerful standalone visuals
    • Full-bleed photos or screenshots
    • Visual breaks in the presentation

    Reach for something else when

    • Content that needs text explanation (use image-text-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.image Tier: 1 Runtime: static JSON Schema

  • Embed embed-slide Embed an external page or iframe Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    embedUrl string Yes 500 —
    aspectRatio enum No — 16:9, 4:3, 1:1, auto
    sandbox enum No — restricted, permissive
    background enum No — lime, mist

    Reach for it when

    • Showing a live prototype, board, or dashboard during the talk
    • Content that must stay current between rehearsal and delivery

    Reach for something else when

    • A video (use video-slide)
    • A static picture of a tool (use image-slide)
    • Any case where you would have to invent the URL

    Item shape: Scalar fields only Identity: eu.deckyard.slide.embed Tier: 2 Runtime: static Falls back to: content-slide JSON Schema

  • Countdown timer Audience countdown-slide A countdown timer Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    durationMinutes number No — —
    durationSeconds number No — —
    autoStart enum No — off, on
    flashOnZero enum No — on, off
    soundOnZero enum No — off, on
    zeroText string No 60 —
    background enum No — lime, mist, dark, accent, brand-1, brand-2, custom

    Reach for it when

    • Breaks with a stated length ("15 minutes")
    • Timeboxed exercises in a workshop deck

    Reach for something else when

    • Marking a section boundary (use chapter-title-slide)
    • A deck that is presented straight through without pauses

    Item shape: Scalar fields only Identity: eu.deckyard.slide.countdown Tier: 2 Runtime: timed Falls back to: content-slide JSON Schema

  • Likert slider (1–10) Audience likert-slider-slide A 1–10 slider rating Fields and detail

    Fields

    Key Type Required Limit Options
    question string Yes 200 —
    minLabel string No 120 —
    maxLabel string No 120 —
    background enum No — lime, mist

    Reach for it when

    • "Rate from 1 to 10" questions
    • "How likely are you to..." questions
    • Confidence or intensity ratings

    Reach for something else when

    • Labeled categories (use likert-slide)
    • Multiple choice (use poll-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.likert-slider Tier: 2 Runtime: live (likert) Falls back to: content-slide JSON Schema

  • Feedback Audience feedback-slide Collect open text feedback Fields and detail

    Fields

    Key Type Required Limit Options
    question string Yes 200 —
    placeholder string No 120 —
    background enum No — lime, mist

    Reach for it when

    • Open feedback prompts
    • "What should we improve?" questions
    • Collecting ideas or suggestions

    Reach for something else when

    • Structured questions (use poll or likert slides)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.feedback Tier: 2 Runtime: live (feedback) Falls back to: content-slide JSON Schema

  • Comparison comparison-slide Two options side by side Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    leftTitle string Yes 100 —
    leftBody markdown Yes 2000 —
    rightTitle string Yes 100 —
    rightBody markdown Yes 2000 —
    verdict string No 100 —
    variant enum No — versus, before-after, pros-cons, tradeoff
    background enum No — lime, mist

    Reach for it when

    • A vs B comparisons (products, approaches)
    • Pros and cons analysis (variant: pros-cons, pros on the left)
    • Before vs after transformations (variant: before-after, before on the left)
    • Option evaluation and decision support (variant: tradeoff)

    Reach for something else when

    • More than 2 options (use table-slide or icon-card-grid-slide)
    • 2x2 matrices like SWOT (use matrix-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.comparison Tier: 2 Runtime: static Falls back to: table-slide JSON Schema

  • End / Contact end-slide A closing slide with contact details Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    body markdown No 500 —
    contactName string No 80 —
    contactEmail email No 120 —
    contactPhone string No 40 —
    contactUrl url No 200 —
    social1Label string No 40 —
    social1Url url No 200 —
    social2Label string No 40 —
    social2Url url No 200 —
    background enum No — lime, mist

    Reach for it when

    • Final slide with contact information
    • Thank you / closing slide
    • Slides where the audience needs follow-up details

    Reach for something else when

    • Brand-only closing without contact info (use payoff-slide)
    • Content slides mid-deck

    Item shape: Scalar fields only Identity: eu.deckyard.slide.end Tier: 1 Runtime: static JSON Schema

Collection 15 types

n items of one repeated shape.

One array of items that all share a shape. Walk the array, render the item, repeat.

  • List list-slide A bulleted or numbered list Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 160 —
    variant enum No — bullets, numbers
    layout enum No — auto, one-column, two-column
    density enum No — auto, comfortable, compact
    asideVariant enum No — none, note, tip, warning
    asideText markdown No 300 —
    background enum No — lime, mist
    items items Yes — Repeats, each item with: title, text
    headerAlign enum No — left, center

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Tips, recommendations, or best practices
    • Meeting agendas (not roadmaps - those are timeline)
    • Steps with short explanations
    • Do/don't lists
    • Key takeaways or highlights
    • Any list where items have both a title AND a brief explanation

    Reach for something else when

    • NUMERIC HIGHLIGHTS like "220 trajectories" or "10,000 professionals" (use kpi-metrics-slide!)
    • Output targets or deliverables with specific numbers (use kpi-metrics-slide)
    • Parallel categories that should be compared side-by-side (use card slides)
    • Timeline/roadmap with phases over time (use timeline-slide)
    • Simple bullets without title+text structure (use content-slide)

    Item shape: items[] Identity: eu.deckyard.slide.list Tier: 1 Runtime: static JSON Schema

  • KPI kpi-metrics-slide Big numbers with deltas Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    background enum No — lime, mist
    accent enum No — none, highlight-best, highlight-risk
    countUp enum No — off, on
    metrics items No — Repeats, each item with: value, unit, label, note
    headerAlign enum No — left, center

    Layout variants

    • Left
    • Centred

    Reach for it when

    • NUMERIC OUTPUT TARGETS: "220 research trajectories", "10,000 professionals"
    • Programme deliverables with specific numbers
    • Key performance indicators and goals
    • Budget figures or funding amounts
    • Statistics and metrics that should STAND OUT
    • Before/after comparisons with change indicators
    • Any 1-4 numbers that are the KEY POINT of the slide

    Reach for something else when

    • More than 4 metrics (split into multiple slides or use table/chart)
    • Qualitative descriptions without clear numeric values
    • Lists of activities or processes (use list-slide or text-blocks-slide)

    Item shape: metrics[] Identity: eu.deckyard.slide.kpi-metrics Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Images + text image-set-slide Two or three images with text Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    body markdown Yes 3000 —
    images items Yes — Repeats, each item with: src, alt, fit, focusX, focusY
    caption string No 160 —
    imageRole enum No — content, decorative
    layout enum No — beside, top, bottom
    imageSide enum No — left, right
    imageWidth enum No — half, narrow, wide
    textColumns enum No — 1, 2
    imageBackground enum No — white, match
    density enum No — auto, compact
    asideVariant enum No — none, note, tip, warning
    asideText markdown No 300 —
    background enum No — lime, mist
    actions items No — Repeats, each item with: label, url, style

    Layout variants

    • Beside text
    • Row above
    • Row below
    • Image 1/2
    • Text only

    Reach for it when

    • A small set of 2-3 related images with one shared story
    • Before/after or step-by-step visuals that belong on one slide
    • A product or location shown from a few angles

    Reach for something else when

    • One image beside text (use image-text-slide)
    • Many images without text (use gallery-slide)
    • Heavy text content (use content-slide or split into multiple)

    Item shape: images[]actions[] Identity: eu.deckyard.slide.image-set Tier: 2 Runtime: static Falls back to: image-text-slide JSON Schema

  • Image blocks team-cards-slide Image blocks in a grid Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 220 —
    bottomSubheading string No 200 —
    subheading2 string No 220 —
    members items No — Repeats, each item with: image, alt, imageFocusX, imageFocusY, name, byline, body, linkedin
    background enum No — lime, mist
    textPosition enum No — below, split
    imageShape enum No — rounded, square, circle
    imageAspect enum No — square, original
    showPhotoFrame enum No — off, on
    columnSplit enum No — , 1, 2, 3, 4, 5

    Reach for it when

    • Multiple screenshots / UI captures in one slide (imageAspect: original)
    • Testimonials or mixed image grids with short labels
    • Team introductions and speaker panels (name + role, optional bio in body)
    • Advisory boards or committees (up to 25, imageShape: circle)
    • Any set of separate images that each want a small Title/Caption

    Reach for something else when

    • A single hero image (use image-slide)
    • One image beside a paragraph of text (use image-text-slide)
    • A curated photo gallery with masonry/featured layout (use gallery-slide)
    • More than 25 blocks (split into multiple slides)

    Item shape: members[] Identity: eu.deckyard.slide.team-cards Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Logo wall logo-wall-slide A wall of logos Fields and detail

    Fields

    Key Type Required Limit Options
    headerAlign enum No — left, center
    title string No 120 —
    subheading string No 220 —
    background enum No — lime, mist
    logos items No — Repeats, each item with: image, name, alt, link

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Partner organizations
    • Sponsors and funding bodies
    • Client logos
    • Supporter acknowledgments
    • Consortium or coalition members

    Reach for something else when

    • Detailed partner descriptions (use content-slide or icon-card-grid-slide)
    • People (use team-cards-slide)
    • Screenshots or photos that want captions (use team-cards-slide or gallery-slide)

    Item shape: logos[] Identity: eu.deckyard.slide.logo-wall Tier: 2 Runtime: static Falls back to: image-slide JSON Schema

  • Icon cards icon-card-grid-slide Cards with an icon and label Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    layout enum No — cards, tiles
    bottomSubheading string No 200 —
    items items No — Repeats, each item with: icon, title, body, link

    Reach for it when

    • 4-6 parallel categories or pillars
    • Focus areas or strategic priorities
    • Company values or principles
    • Product features or capabilities
    • Workstreams, departments, or teams
    • Service offerings
    • Benefits or advantages
    • Any set of 4-6 things that can each have a meaningful icon

    Reach for something else when

    • Time-based sequences (use timeline-slide)
    • Items that need very long descriptions or bullets (use text-blocks-slide)
    • Cause-effect relationships (use text-blocks-slide)
    • Simple lists without icons (use list-slide)

    Item shape: items[] Identity: eu.deckyard.slide.icon-card-grid Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Poll Audience poll-slide A live audience poll Fields and detail

    Fields

    Key Type Required Limit Options
    question string Yes 200 —
    options items Yes — Repeats, each item with: text
    background enum No — lime, mist
    onClose enum No — stay, next, goto
    onCloseTarget string No 100 —

    Reach for it when

    • Audience questions with discrete options
    • "Which do you prefer?" style questions
    • Quick pulse checks

    Reach for something else when

    • Open-ended questions (use feedback-slide)
    • Scale ratings (use likert slides)

    Item shape: options[] Identity: eu.deckyard.slide.poll Tier: 2 Runtime: live (poll) Falls back to: list-slide JSON Schema

  • Likert (agree/disagree) Audience likert-slide An agree/disagree rating Fields and detail

    Fields

    Key Type Required Limit Options
    question string Yes 200 —
    options items Yes — Repeats, each item with: text
    background enum No — lime, mist
    onClose enum No — stay, next, goto
    onCloseTarget string No 100 —

    Reach for it when

    • Agreement/disagreement questions
    • Satisfaction ratings
    • Any question with a labeled scale

    Reach for something else when

    • Multiple choice (use poll-slide)
    • Numeric 1-10 rating (use likert-slider-slide)

    Item shape: options[] Identity: eu.deckyard.slide.likert Tier: 2 Runtime: live (likert) Falls back to: list-slide JSON Schema

  • Text blocks text-blocks-slide Several labelled text blocks Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    rows items No — Repeats, each item with: title, color, blocks, arrow
    bottomSubheading string No 200 —
    headerAlign enum No — center, left

    Layout variants

    • Centred
    • Left

    Reach for it when

    • Cause→effect: activities/programmes (A, B, C) that PRODUCE specific outputs
    • Input→processing→output flows
    • Problem→solution or challenge→response structures
    • Before→after transformations
    • Strategy→tactics→results chains
    • Any 2-3 row structure where each row LEADS TO the next
    • Consequence chains: X causes Y, which causes Z. Prefer this over process-slide when nobody performs the steps -- the items are outcomes, not actions

    Reach for something else when

    • Plain enumerations or lists of points (use list-slide or content-slide)
    • Parallel items/categories with NO causal or sequential relationship — use list-slide, or icon-card-grid-slide if each needs an icon
    • A single row of blocks used just to group text (use list-slide)
    • Single items without grouping (use content-slide)
    • Sequential timelines with dates (use timeline-slide)
    • Items that each need an icon (use icon-card-grid-slide)

    Item shape: rows[] Identity: eu.deckyard.slide.text-blocks Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Process process-slide Sequential steps with arrows Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    direction enum No — horizontal, vertical
    items items Yes — Repeats, each item with: title, text
    background enum No — lime, mist

    Reach for it when

    • Step-by-step procedures
    • Onboarding processes
    • Implementation methodologies
    • How-to guides with sequential steps
    • Project phases

    Reach for something else when

    • Recurring/cyclical processes (use cycle-slide)
    • Timelines with specific dates (use timeline-slide)
    • Narrowing conversions (use funnel-slide)
    • Chains where each item CAUSES the next rather than being carried out in order (use text-blocks-slide). Test: can you name who performs each step? If yes it is a process; if the items are consequences nobody performs, it is a causal chain

    Item shape: items[] Identity: eu.deckyard.slide.process Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Timeline timeline-slide Events along a timeline Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    items items Yes — Repeats, each item with: date, title, text
    background enum No — lime, mist

    Reach for it when

    • Roadmaps with phases (Q1/Q2/Q3, Year 1/2/3, Phase 1/2/3)
    • Company history and milestones
    • Project retrospectives and future plans
    • Historical event sequences
    • Product evolution timelines
    • Future development plans
    • Now/Next/Later timelines

    Reach for something else when

    • Meeting agendas (use list-slide)
    • Non-sequential items (use icon-card-grid-slide or list-slide)
    • More than 10 items (split into multiple slides)
    • Processes without dates/phases (use process-slide)
    • Undated summary/total lines as items (put them in bottomSubheading)

    Item shape: items[] Identity: eu.deckyard.slide.timeline Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Funnel funnel-slide Stages narrowing to a goal Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    items items Yes — Repeats, each item with: label, value, text
    background enum No — lime, mist

    Reach for it when

    • Sales funnels (Leads > Qualified > Closed)
    • Marketing funnels (Awareness > Interest > Conversion)
    • Recruitment funnels
    • Any narrowing process with decreasing numbers

    Reach for something else when

    • Hierarchies without quantity reduction (use pyramid)
    • Processes that don't narrow (use process-slide)
    • Circular processes (use cycle-slide)

    Item shape: items[] Identity: eu.deckyard.slide.funnel Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Pyramid pyramid-slide A layered hierarchy pyramid Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    levels items Yes — Repeats, each item with: label, text
    background enum No — lime, mist

    Reach for it when

    • Maslow-style need pyramids
    • Priority levels (Critical > High > Medium > Low)
    • Organizational hierarchies
    • Skill progression pyramids

    Reach for something else when

    • Narrowing funnels with metrics (use funnel-slide)
    • Linear processes (use process-slide)
    • Circular processes (use cycle-slide)

    Item shape: levels[] Identity: eu.deckyard.slide.pyramid Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Cycle cycle-slide A repeating cycle of stages Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    centerLabel string No 60 —
    items items Yes — Repeats, each item with: label, text
    background enum No — lime, mist

    Reach for it when

    • PDCA (Plan-Do-Check-Act) cycles
    • Agile/Scrum sprint cycles
    • Continuous improvement processes
    • Feedback loops
    • Any process that repeats indefinitely

    Reach for something else when

    • Linear one-time processes (use process-slide)
    • Timelines with dates (use timeline-slide)
    • Narrowing funnels (use funnel-slide)

    Item shape: items[] Identity: eu.deckyard.slide.cycle Tier: 2 Runtime: static Falls back to: list-slide JSON Schema

  • Gallery gallery-slide A grid of images Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    layout enum No — grid, masonry, featured
    images items Yes — Repeats, each item with: src, focusX, focusY, caption, alt
    background enum No — lime, mist

    Reach for it when

    • Several screenshots or UI captures in one slide (use layout: masonry)
    • A photo gallery or set of related images
    • 2-6 images shown together where the images tell the story
    • Mixed aspect-ratio images that must not be cropped (masonry)

    Reach for something else when

    • A single hero image (use image-slide)
    • One image beside a paragraph of text (use image-text-slide)
    • More than 6 images, or images each needing a Title + Caption (use team-cards-slide)
    • Partner/sponsor logos (use logo-wall-slide)

    Item shape: images[] Identity: eu.deckyard.slide.gallery Tier: 2 Runtime: static Falls back to: image-slide JSON Schema

Fixed collection 1 type

Exactly n items; the count carries meaning.

The same item contract as a collection, with the count fixed because the count carries meaning: four quadrants is what makes a matrix a matrix.

  • Matrix matrix-slide A 2×2 quadrant matrix Fields and detail

    Fields

    Key Type Required Limit Options
    title string No 120 —
    subheading string No 200 —
    bottomSubheading string No 200 —
    cells items Yes — Repeats, each item with: title, body, tone
    xAxis string No 60 —
    yAxis string No 60 —
    background enum No — lime, mist

    Reach for it when

    • SWOT analysis
    • Risk vs Impact matrices
    • Urgent vs Important (Eisenhower)
    • Any 2x2 framework or quadrant analysis

    Reach for something else when

    • Simple A vs B (use comparison-slide)
    • More than 4 categories (use text-blocks or table)

    Item shape: cells[] Identity: eu.deckyard.slide.matrix Tier: 2 Runtime: static Falls back to: table-slide JSON Schema

Tabular 1 type

Rows and columns.

Rows of cells. The row is the item; the columns are positions inside it.

  • Table table-slide A data table Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    caption string No 240 —
    headerRow enum No — on, off
    tableStyle enum No — plain, panel, soft
    cornerCell enum No — label, header
    animateByCell enum No — off, on
    rows items No — Repeats, each item with: c1, c2, c3, c4, c5, c6, c7, c8, c9, c10
    colCount enum No — 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    background enum No — lime, mist

    Reach for it when

    • Comparison tables
    • Feature matrices
    • Schedules or structured data
    • Country/region benchmarks
    • Side-by-side metrics

    Reach for something else when

    • Numeric data that would visualize better (use chart-slide)
    • Large datasets (summarize or link externally)
    • More than 10 columns (simplify or split)

    Item shape: rows[] Identity: eu.deckyard.slide.table Tier: 1 Runtime: static JSON Schema

Dataset 1 type

Data points plus an encoding.

Data points plus an encoding. The payload is an encoded blob rather than named fields, so this is the one shape a renderer cannot walk generically.

  • Chart chart-slide A bar, line or pie chart Fields and detail

    Fields

    Key Type Required Limit Options
    title string Yes 120 —
    subheading string No 220 —
    bottomSubheading string No 200 —
    chartType enum Yes — bar, line, pie
    data csv Yes 20000 —
    pieLabelMode enum No — none, value, %, both
    showLegend enum No — yes, no
    showValues enum No — yes, no
    xLabel string No 80 —
    yLabel string No 80 —
    series1Label string No 80 —
    series2Label string No 80 —
    background enum No — lime, mist
    headerAlign enum No — left, center

    Layout variants

    • Left
    • Centred

    Reach for it when

    • Trends over time (line chart)
    • Category comparisons (bar chart)
    • Parts of a whole (pie chart)
    • Any numeric data that benefits from visualization

    Reach for something else when

    • Non-numeric comparisons (use table-slide)
    • Complex multi-dimensional data
    • Data that needs exact values shown (use table-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.chart Tier: 2 Runtime: static Falls back to: table-slide JSON Schema

Chrome 2 types

No content fields at all.

No content fields at all. The slide is its own furniture, so there is nothing to read out of it.

  • Payoff payoff-slide A closing payoff statement Fields and detail

    Reach for it when

    • Final slide of a presentation
    • Brand reinforcement

    Reach for something else when

    • Content that needs explanation
    • Anything mid-deck
    • Slides that need contact details (use end-slide)

    Item shape: Scalar fields only Identity: eu.deckyard.slide.payoff Tier: 2 Runtime: static Falls back to: end-slide JSON Schema

  • Follow-along invite Audience follow-invite-slide A QR code to follow along Fields and detail

    Item shape: Scalar fields only Identity: eu.deckyard.slide.follow-invite Tier: 2 Runtime: static Falls back to: content-slide JSON Schema

The fields every type carries

Nine fields are added to every slide type rather than declared on each one: two for what a screen reader announces, six for a per-slide background image and how it is treated, and one for the theme logo.

Key Type Options
a11yTitle string —
a11ySummary string —
slideBgImage image —
slideBgFit enum cover, contain
slideBgFocusX number —
slideBgFocusY number —
slideBgOverlay enum auto, none, light, dark, gradient-top, gradient-bottom
slideBgText enum auto, light, dark
slideLogo enum none, top-right

A running instance serves schemas for its installed version, which may differ from this catalogue. For example, the sandbox exposes:

https://sandbox.deckyard.eu/api/v1/schema/slide-types/<id>.json

Nothing on this page is typed by hand: the list, the counts, the field tables and the glyphs are generated from the core registry. The same registry as one flat, searchable table is in the documentation. Full reference