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 33 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, comfortable, compact
    body markdown Yes 3000
    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
    • Two 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

  • 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
    images items No Repeats, each item with: src, alt, fit, focusX, focusY
    caption string No 160
    alt string No 180
    imageRole enum No content, decorative
    imageSide enum No left, right
    imageWidth enum No half, narrow, wide
    layout enum No split, corner, duo, row-top, row-bottom
    textColumns enum No 1, 2
    imageFit enum No cover, contain
    imageBackground enum No white, match
    focusX number No
    focusY number No
    density enum No auto, comfortable, compact
    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
    • Row above
    • Row below
    • Two beside text
    • Corner image

    Reach for it when

    • Content where a photo/image adds value
    • Product or feature showcases
    • Person introductions with photo
    • Location or event context
    • A small set of 2-3 related images with one shared story (rows/duo)

    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)
    • Many images without text (use gallery-slide)

    Item shape: images[]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
    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
    quote string Yes 400
    authorName string Yes 80
    authorTitle string Yes 120
    authorImage1 image No
    authorImage1Alt string No 180
    authorImage2 image No
    authorImage2Alt string No 180
    quotes items No Repeats, each item with: quote, authorName, authorTitle, authorImage, authorImageAlt, 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
    background enum No lime, mist

    Reach for it when

    • A vs B comparisons (products, approaches)
    • Pros and cons analysis
    • Before vs after transformations
    • Option evaluation and decision support

    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

  • Custom HTML custom-html-slide Your own HTML and CSS, for anything else Fields and detail

    Fields

    Key Type Required Limit Options
    html code No 20000
    css code No 10000
    background enum No lime, mist

    Item shape: Scalar fields only Identity: eu.deckyard.slide.custom-html Tier: 2 Runtime: static Falls back to: content-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 string No 120
    contactPhone string No 40
    contactUrl string No 200
    social1Label string No 40
    social1Url string No 200
    social2Label string No 40
    social2Url string 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 12 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
    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

  • 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, name, byline, linkedin
    background enum No mist, lime, calm
    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
    cardCount enum No 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
    card1Image image No
    card1Alt string No 180
    card1ImageFocusX number No
    card1ImageFocusY number No
    card1Name string No 80
    card1Byline string No 120
    card1Linkedin string No 300
    card2Image image No
    card2Alt string No 180
    card2ImageFocusX number No
    card2ImageFocusY number No
    card2Name string No 80
    card2Byline string No 120
    card2Linkedin string No 300
    card3Image image No
    card3Alt string No 180
    card3ImageFocusX number No
    card3ImageFocusY number No
    card3Name string No 80
    card3Byline string No 120
    card3Linkedin string No 300
    card4Image image No
    card4Alt string No 180
    card4ImageFocusX number No
    card4ImageFocusY number No
    card4Name string No 80
    card4Byline string No 120
    card4Linkedin string No 300
    card5Image image No
    card5Alt string No 180
    card5ImageFocusX number No
    card5ImageFocusY number No
    card5Name string No 80
    card5Byline string No 120
    card5Linkedin string No 300
    card6Image image No
    card6Alt string No 180
    card6ImageFocusX number No
    card6ImageFocusY number No
    card6Name string No 80
    card6Byline string No 120
    card6Linkedin string No 300
    card7Image image No
    card7Alt string No 180
    card7ImageFocusX number No
    card7ImageFocusY number No
    card7Name string No 80
    card7Byline string No 120
    card7Linkedin string No 300
    card8Image image No
    card8Alt string No 180
    card8ImageFocusX number No
    card8ImageFocusY number No
    card8Name string No 80
    card8Byline string No 120
    card8Linkedin string No 300
    card9Image image No
    card9Alt string No 180
    card9ImageFocusX number No
    card9ImageFocusY number No
    card9Name string No 80
    card9Byline string No 120
    card9Linkedin string No 300
    card10Image image No
    card10Alt string No 180
    card10ImageFocusX number No
    card10ImageFocusY number No
    card10Name string No 80
    card10Byline string No 120
    card10Linkedin string No 300
    card11Image image No
    card11Alt string No 180
    card11ImageFocusX number No
    card11ImageFocusY number No
    card11Name string No 80
    card11Byline string No 120
    card11Linkedin string No 300
    card12Image image No
    card12Alt string No 180
    card12ImageFocusX number No
    card12ImageFocusY number No
    card12Name string No 80
    card12Byline string No 120
    card12Linkedin string No 300
    card13Image image No
    card13Alt string No 180
    card13ImageFocusX number No
    card13ImageFocusY number No
    card13Name string No 80
    card13Byline string No 120
    card13Linkedin string No 300
    card14Image image No
    card14Alt string No 180
    card14ImageFocusX number No
    card14ImageFocusY number No
    card14Name string No 80
    card14Byline string No 120
    card14Linkedin string No 300
    card15Image image No
    card15Alt string No 180
    card15ImageFocusX number No
    card15ImageFocusY number No
    card15Name string No 80
    card15Byline string No 120
    card15Linkedin string No 300
    card16Image image No
    card16Alt string No 180
    card16ImageFocusX number No
    card16ImageFocusY number No
    card16Name string No 80
    card16Byline string No 120
    card16Linkedin string No 300
    card17Image image No
    card17Alt string No 180
    card17ImageFocusX number No
    card17ImageFocusY number No
    card17Name string No 80
    card17Byline string No 120
    card17Linkedin string No 300
    card18Image image No
    card18Alt string No 180
    card18ImageFocusX number No
    card18ImageFocusY number No
    card18Name string No 80
    card18Byline string No 120
    card18Linkedin string No 300
    card19Image image No
    card19Alt string No 180
    card19ImageFocusX number No
    card19ImageFocusY number No
    card19Name string No 80
    card19Byline string No 120
    card19Linkedin string No 300
    card20Image image No
    card20Alt string No 180
    card20ImageFocusX number No
    card20ImageFocusY number No
    card20Name string No 80
    card20Byline string No 120
    card20Linkedin string No 300
    card21Image image No
    card21Alt string No 180
    card21ImageFocusX number No
    card21ImageFocusY number No
    card21Name string No 80
    card21Byline string No 120
    card21Linkedin string No 300
    card22Image image No
    card22Alt string No 180
    card22ImageFocusX number No
    card22ImageFocusY number No
    card22Name string No 80
    card22Byline string No 120
    card22Linkedin string No 300
    card23Image image No
    card23Alt string No 180
    card23ImageFocusX number No
    card23ImageFocusY number No
    card23Name string No 80
    card23Byline string No 120
    card23Linkedin string No 300
    card24Image image No
    card24Alt string No 180
    card24ImageFocusX number No
    card24ImageFocusY number No
    card24Name string No 80
    card24Byline string No 120
    card24Linkedin string No 300
    card25Image image No
    card25Alt string No 180
    card25ImageFocusX number No
    card25ImageFocusY number No
    card25Name string No 80
    card25Byline string No 120
    card25Linkedin string No 300

    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)
    • 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
    logoCount enum No 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    logos items No Repeats, each item with: image, name, alt, link
    logo1Image image No
    logo1Name string No 80
    logo1Alt string No 180
    logo1Link string No 500
    logo2Image image No
    logo2Name string No 80
    logo2Alt string No 180
    logo2Link string No 500
    logo3Image image No
    logo3Name string No 80
    logo3Alt string No 180
    logo3Link string No 500
    logo4Image image No
    logo4Name string No 80
    logo4Alt string No 180
    logo4Link string No 500
    logo5Image image No
    logo5Name string No 80
    logo5Alt string No 180
    logo5Link string No 500
    logo6Image image No
    logo6Name string No 80
    logo6Alt string No 180
    logo6Link string No 500
    logo7Image image No
    logo7Name string No 80
    logo7Alt string No 180
    logo7Link string No 500
    logo8Image image No
    logo8Name string No 80
    logo8Alt string No 180
    logo8Link string No 500
    logo9Image image No
    logo9Name string No 80
    logo9Alt string No 180
    logo9Link string No 500
    logo10Image image No
    logo10Name string No 80
    logo10Alt string No 180
    logo10Link string No 500
    logo11Image image No
    logo11Name string No 80
    logo11Alt string No 180
    logo11Link string No 500
    logo12Image image No
    logo12Name string No 80
    logo12Alt string No 180
    logo12Link string No 500

    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
    cardCount enum No 1, 2, 3, 4, 5, 6
    items items No Repeats, each item with: icon, title, body, link
    card1Icon string No 40
    card1Title string No 80
    card1Body markdown No 700
    card1Link string No 500
    card2Icon string No 40
    card2Title string No 80
    card2Body markdown No 700
    card2Link string No 500
    card3Icon string No 40
    card3Title string No 80
    card3Body markdown No 700
    card3Link string No 500
    card4Icon string No 40
    card4Title string No 80
    card4Body markdown No 700
    card4Link string No 500
    card5Icon string No 40
    card5Title string No 80
    card5Body markdown No 700
    card5Link string No 500
    card6Icon string No 40
    card6Title string No 80
    card6Body markdown No 700
    card6Link string No 500

    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

  • 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
    bottomSubheading string No 200
    rows items No Repeats, each item with: title, color, arrow, blocks
    row1Count enum No 1, 2, 3, 4, 5, 6
    row1Color enum No yellow, black
    row1Block1Title string No 80
    row1Block1Body markdown No 500
    row1Block2Title string No 80
    row1Block2Body markdown No 500
    row1Block3Title string No 80
    row1Block3Body markdown No 500
    row1Block4Title string No 80
    row1Block4Body markdown No 500
    row1Block5Title string No 80
    row1Block5Body markdown No 500
    row1Block6Title string No 80
    row1Block6Body markdown No 500
    arrow1 enum No none, down, up
    row2Enabled enum No no, yes
    row2Title string No 120
    row2Count enum No 1, 2, 3, 4, 5, 6
    row2Color enum No yellow, black
    row2Block1Title string No 80
    row2Block1Body markdown No 500
    row2Block2Title string No 80
    row2Block2Body markdown No 500
    row2Block3Title string No 80
    row2Block3Body markdown No 500
    row2Block4Title string No 80
    row2Block4Body markdown No 500
    row2Block5Title string No 80
    row2Block5Body markdown No 500
    row2Block6Title string No 80
    row2Block6Body markdown No 500
    arrow2 enum No none, down, up
    row3Enabled enum No no, yes
    row3Title string No 120
    row3Count enum No 1, 2, 3, 4, 5, 6
    row3Color enum No yellow, black
    row3Block1Title string No 80
    row3Block1Body markdown No 500
    row3Block2Title string No 80
    row3Block2Body markdown No 500
    row3Block3Title string No 80
    row3Block3Body markdown No 500
    row3Block4Title string No 80
    row3Block4Body markdown No 500
    row3Block5Title string No 80
    row3Block5Body markdown No 500
    row3Block6Title string No 80
    row3Block6Body markdown No 500

    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
    steps items No 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[]steps[] 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
    stages items No 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[]stages[] 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
    stages items No 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[]stages[] 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 3 types

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.

Two of these do not keep to it yet: poll-slide and likert-slide carry option1..optionN as separate scalars rather than an array, because they never got the migration the other collections did. They are listed here rather than quietly rounded up.

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

    Fields

    Key Type Required Limit Options
    question string Yes 200
    option1 string Yes 120
    option2 string Yes 120
    option3 string No 120
    option4 string No 120
    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: Scalar fields only 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
    option1 string Yes 120
    option2 string Yes 120
    option3 string No 120
    option4 string No 120
    option5 string No 120
    option6 string No 120
    option7 string No 120
    option8 string No 120
    option9 string No 120
    option10 string No 120
    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: Scalar fields only Identity: eu.deckyard.slide.likert Tier: 2 Runtime: live (likert) Falls back to: list-slide JSON Schema

  • 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
    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

Retired types

These are no longer offered when you add a slide, but they still render, because decks that use them still exist and a deck that stops opening is a deck you have lost. They have no layout glyph on purpose: nothing should be inviting you to use one.

  • lead-capture-slide Lead Capture Retired

Each type's schema is also served live, by any running instance:

https://sandbox.deckyard.eu/api/v1/schema/slide-types/<type>.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