Install any skill in seconds. Free to start, no credit card required.
Get Started Free →A Cursor Canvas is a live React app (.canvas.tsx) that the user can open beside the chat. Use a canvas when the agent produces a standalone analytical artifact — quantitative analyses, billing investigations, security audits, architecture reviews, data-heavy content, timelines, charts, tables, interactive explorations, or any response that benefits from visual layout. Must read this skill when creating, editing, or debugging any .canvas.tsx file.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 38% | 0% |
A canvas is a single .canvas.tsx file the IDE compiles so the user can open it beside the chat.
The trigger is user intent, not response shape. Ask: would the user benefit from viewing this output as its own standalone artifact, separate from the chat?
Use a canvas when the agent produces new standalone analytical output:
Do NOT use a canvas when:
Location. Canvases live at /Users/<user>/.cursor/projects/<workspace>/canvases/<name>.canvas.tsx. The IDE only detects canvases in that exact directory — subfolders and other locations are not picked up.
File rules:
.canvas.tsx file per canvas. Never create helper files or supporting modules.cursor/canvas. No relative imports, no npm packages, no Node built-ins.fetch(), no network calls.Never render empty states. If a section has no data, omit it entirely.
Label every plot. Charts and tables must be self-describing:
Be creative. The SDK gives you expressive building blocks. But avoid slop: no gradients, no emojis, no box-shadows, no rainbow coloring. Cursor canvases are flat, minimal, and purposeful.
Primary content gets more space, larger headings, and accent color. Supporting content stays compact.
Color. All colors from useHostTheme() tokens. No hardcoded hex. Use accent color deliberately.
linear-gradient, radial-gradientbox-shadow. Flat surfaces only.Before returning canvas code, verify:
Always include a markdown link to the .canvas.tsx file using its full absolute path. When you create a canvas, add a short note telling the user they can open it beside the chat.
If a canvas appears blank or missing, the most common cause is that it was not written under the correct canvases/ path. Every canvas edit returns a Canvas TypeScript check line reporting current type errors — treat that as authoritative diagnostics.
Other measured skills in the registry, with their headline benchmark lift.