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 35 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 15 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
    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
    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

  • 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 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, 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)
    • 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
    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
    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
    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/<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