---
name: slides
description: Build a Grida slides deck — a `.canvas` bundle in slides mode whose pages are SVG documents (16:9, one SVG per slide). Use when creating a presentation, pitch deck, slideshow, or talk.
---
A Grida **slides deck** is a `.canvas` bundle in slides mode whose documents are
**SVG files** — one SVG per slide. Today this is Grida's only slide format:
**dotcanvas + SVG**, and it is the default. When the task is a deck,
presentation, pitch, or talk, build it this way. Do NOT author slides as
markdown or HTML — the slides surface renders SVG only, so anything else won't
appear.
## Structure
- The bundle is a folder ending in `.canvas` with a `.canvas.json` manifest.
- Manifest: `editor: "slides"`, `files: ["*.svg"]`, and a `documents` array
whose ORDER is the running order of the deck.
```json
{
"editor": "slides",
"files": ["*.svg"],
"documents": [
{ "src": "001.svg", "id": "cover" },
{ "src": "002.svg", "id": "problem" }
]
}
```
- Each slide's CONTENT is one SVG file referenced by `src`. The deck convention
is flat, zero-padded, root-level files: `001.svg`, `002.svg`, ….
- A slide's human name is its SVG `
` element — not a manifest field.
- If you open an existing or freshly-seeded bundle whose manifest says
`editor: "board"` but the task is a deck, set `editor: "slides"` yourself —
the manifest is yours to reconcile with the user's intent.
## Slide SVG
Every slide is a full-bleed 16:9 SVG on the SAME `1920×1080` viewBox, so the
deck stays uniform. Start each from this shape:
```svg
```
## Working pattern
- To start a deck: **first make the bundle folder** — a NEW directory whose name
ends in `.canvas` (e.g. `Q3 Report.canvas/`), created under your working root.
The `.canvas` suffix on the FOLDER is what marks it a bundle (see Structure);
a plain folder — or files loose in the workspace root — is NOT a deck and won't
open. Then `write_file` each slide as `.canvas/NNN.svg` and `write_file`
the manifest as `.canvas/.canvas.json` listing them in order. Every file
lives INSIDE that one `.canvas` folder.
- To edit a deck: `read_file` `.canvas.json` first (preserve `version` /
`$schema` and any unknown fields), edit the slide SVGs, then write the full
manifest back with `documents` in the intended order.
- Reorder = reorder `documents`. Add a slide = `write_file` a new `NNN.svg` and
insert it into `documents`. Remove = drop it from `documents`.
## Show the result
- Treat presentation as the first production milestone, not the final
"validate and open" step. For a new deck, create a meaningful valid first
slide and a manifest that references it, then call `surface_open` immediately
with the workspace-rooted `.canvas` bundle directory (for example,
`/Q3 Report.canvas`). Continue adding and refining slides while the user can
watch. Do not wait for the full deck, all assets, polish, preview generation,
exhaustive validation, or task completion.
- Never open an empty bundle, a broken manifest, or a manifest whose first
slide is missing. Pass the bundle directory, never its `.canvas.json`
manifest.
- For an existing primary deck, open it after reading its manifest and before
substantial edits.
- If the `.canvas` bundle itself is mounted as `/` in a dedicated file
surface, it is already presented; do not call `surface_open` just to reopen
it.
- Treat presentation as auxiliary: continue regardless of the result, never
retry based on presentation status, and do not call `surface_open` after
every write.
- Use `surface_list_open` only when the current host surface state is materially
useful. It is not required before `surface_open`.
## Starting from a template
When the user picks a template from the gallery, a ``
block on the first turn names it (title, slide count, visual system), and its
unzipped `.canvas` bundle (the manifest `.canvas.json` + slide SVGs) is placed in
your **scratch dir** — a reference, like an attachment, NOT part of the user's
workspace. Treat it as the STARTING POINT, not a fixed result:
- List your scratch dir and `read_file` the `.canvas.json` + slide SVGs there
first. The template defines the deck's **visual system** — palette, type,
layout, margins, footer, accents. Hold it: reuse those so every slide you write
reads as a sibling, not a stray.
- Build the adapted deck in the **workspace** as a NEW `.canvas/` folder
(that's where the user's document lives — scratch is throwaway; and the
`.canvas` folder suffix is what makes it a deck — see Working pattern). Write
the slide SVGs + `.canvas.json` INSIDE it, replacing the placeholder copy with
the user's content and adding / reordering / removing slides (update
`documents`) to fit. Keep the frame (`1920×1080` viewBox, safe margins) and the
conventions above.
- Don't discard the template's design and start from nothing unless the user asks
for a different look — keeping that design is the whole point of the pick.
## See also
- The `svg` skill — SVG authoring / output style (xmlns, formatting, recovery).
- The `dotcanvas` skill — the `.canvas` manifest and board mechanics this builds
on.