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.
75
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
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.
.canvas with a .canvas.json manifest.editor: "slides", files: ["*.svg"], and a documents array
whose ORDER is the running order of the deck.
{
"editor": "slides",
"files": ["*.svg"],
"documents": [
{ "src": "001.svg", "id": "cover" },
{ "src": "002.svg", "id": "problem" }
]
}src. The deck convention
is flat, zero-padded, root-level files: 001.svg, 002.svg, ….<title> element — not a manifest field.editor: "board" but the task is a deck, set editor: "slides" yourself —
the manifest is yours to reconcile with the user's intent.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 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
<title>Cover</title>
<rect width="1920" height="1080" fill="#0b1220"/>
<text x="160" y="560" font-family="Inter, Arial, sans-serif" font-size="120" font-weight="700" fill="#ffffff">Your title</text>
</svg>.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 <name>.canvas/NNN.svg and write_file
the manifest as <name>.canvas/.canvas.json listing them in order. Every file
lives INSIDE that one .canvas folder.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.documents. Add a slide = write_file a new NNN.svg and
insert it into documents. Remove = drop it from documents.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..canvas.json
manifest..canvas bundle itself is mounted as / in a dedicated file
surface, it is already presented; do not call surface_open just to reopen
it.surface_open after
every write.surface_list_open only when the current host surface state is materially
useful. It is not required before surface_open.When the user picks a template from the gallery, a <user_template_selection>
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:
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.<name>.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.svg skill — SVG authoring / output style (xmlns, formatting, recovery).dotcanvas skill — the .canvas manifest and board mechanics this builds
on.2e0d276
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.