Skip to content

Instantly share code, notes, and snippets.

@aculich
Last active June 17, 2026 13:51
Show Gist options
  • Select an option

  • Save aculich/eff6f360372c18fbc773e79af7750efd to your computer and use it in GitHub Desktop.

Select an option

Save aculich/eff6f360372c18fbc773e79af7750efd to your computer and use it in GitHub Desktop.
Cursor Canvases & MagicPath brief — preview links at top of canvas.md + HTML

Cursor Canvases & MagicPath

Quick previews: htmlpreview → · gisthost → · markdown (this gist) · interactive fork

Format Open
Styled HTML (htmlpreview) Open preview →
Styled HTML (gisthost) Open preview →
Markdown (this file) Gist canvas.md tab →
Interactive (open-canvas) aculich/open-canvasbun install && bun run dev
Raw HTML source gist raw file

Deep dive · Visual agent layer

What each tool is for, when to reach for it, and when to skip it. Companion to the agent releases brief (Jun 2026 tab research).

One-sentence split: Cursor Canvas is where your agent puts analytical results beside your code. MagicPath is where your team and agents co-design product UI in a shared visual workspace — including from Cursor, but not limited to it.

Stat Value
Cursor Canvas shipped Apr 2026
Design Mode Jun 2026
MagicPath v2.0

Cursor Canvases — what you need to know

Agents render interactive React artifacts next to chat instead of markdown walls. Each canvas is a durable .canvas.tsx file you can reopen, edit, iterate on, or publish to your team.

How it works

  1. You ask for a dashboard, audit, report, or visual analysis — or the agent decides one fits.
  2. Cursor builds a canvas and shows a card at the end of the response.
  3. Open from the card, Command Palette (Open Canvas), or Agents Window tab.
  4. Refine by prompting the agent, using Design Mode to point at UI elements, or editing source directly.
  5. Canvases save to your workspace list — no rerun needed to revisit layout.

Components & features (built-in)

  • Tables, stats, charts, callouts, collapsible sections
  • Diff views, todo lists, DAG-style diagrams
  • Design Mode — select UI, annotate, agent edits in place
  • Context usage report canvas with Debug with Agent
  • Embed buttons that run a prompt when clicked
  • Publish → shareable URL (Pro / Teams / Enterprise)

Repeatable workflows (skills)

Package a canvas workflow as a skill with four parts:

  • Trigger — when to use it (e.g. quarterly revenue report)
  • Layout — sections, stats, tables to include
  • Data — SQL, API, shell command, MCP source
  • Formatting — units, date range, sort order

Marketplace example: Docs Canvas — interactive repo architecture diagrams.

When Cursor Canvas earns its place

  • Incident triage joining Datadog, Databricks, Sentry, or local logs in one chart
  • Large PR reviews — grouped diffs, prioritized sections, pseudocode for tricky logic
  • Eval / rollout analysis — cluster failure modes across many request IDs
  • Context usage debugging — token breakdown by rules, skills, tools
  • Repeatable reports — package as a canvas skill (trigger + query + layout)
  • Architecture walkthroughs — Docs Canvas skill from Marketplace

When it is overkill or wrong tool

  • One-line answer or single file edit — chat is enough
  • You need a production dashboard in Datadog/Grafana — build it there
  • Freeform whiteboarding or Figma-style design exploration
  • Artifact must live in Slack/Notion async — publish shared canvas or export manually
  • No structured data — prose explanation beats an empty chart frame

Docs: cursor.com/docs/agent/tools/canvas · announcement blog


MagicPath — beyond Cursor

MagicPath is a separate product: a multiplayer design canvas where humans and AI agents work on the same visual file. Cursor is one of several agents you can plug in — not the host environment.

What it enables that Cursor Canvas does not

  • Real-time co-editing — see teammates and agents on the canvas live
  • Parallel design — one request spawns multiple agents producing screen variations
  • Cloud-native — agents continue while app is closed; changes appear on reopen
  • Repo round-trip — design files sync back to your codebase
  • External agent hub — Codex, Claude Code, Cursor via skill + MCP/Linear/repo
  • Product UI focus — components, screens, design systems — not diagnostic dashboards

Install for external agents: npx skills add https://github.com/magicpathai/agent-skills --skill magicpath. Works from terminal or phone — not only inside Cursor chat.

When MagicPath is worth it

  • Building product UI with humans and agents co-editing the same design file
  • Multiple screens or variations from one prompt (parallel agent designers)
  • Design must round-trip to your codebase — not just view-only agent output
  • Team needs real-time multiplayer on a visual canvas (see cursors move live)
  • External agents (Cursor, Claude Code, Codex) should work while you are offline
  • Linear/MCP/repo-connected design workflow outside the IDE chat pane

When MagicPath is overkill

  • You only need agent analysis output beside code — Cursor Canvas is enough
  • Solo dev, no design collaborators, no visual product surface
  • Backend/data work with no UI component library to maintain
  • Adding another SaaS + skill install for a one-off diagram
  • You want IDE-native artifacts with zero context switch — stay in Cursor

Site: magicpath.ai


Side-by-side

Dimension Cursor Canvas MagicPath
Primary job Agent output & analysis artifacts Collaborative product/design canvas
Where it lives Cursor IDE — Agents Window, .canvas.tsx files Cloud app (browser or macOS) — magicpath.ai
Who edits You + Cursor agent (prompt or Design Mode) Humans + multiple agents, multiplayer
Output type Dashboards, reports, audits, diff UIs Design components, screens, variations
Persists as Workspace canvas list; optional published URL MagicPath design files; syncs to repo
Extensibility Canvas skills + Marketplace (e.g. Docs Canvas) magicpath skill: npx skills add …/magicpath
Best paired with MCP tools, repo context, terminal Cursor/Claude Code/Codex, Linear, MCP
Overkill when You need a quick text answer You only need an in-IDE report

Decision guide

Stay in Cursor Canvas only

You are an engineer debugging, reviewing, or reporting inside the repo. Output is analytical (metrics, diffs, evals). No design teammates. No need for Figma-like canvas or repo design sync.

Add MagicPath

You are shipping UI with designers or PMs. Multiple agents should explore layouts in parallel. Design must land in code via a shared file. Team works async on visual components outside IDE chat.

Use both

Cursor Canvas for engineering artifacts (incident dashboard, arch diagram, context audit). MagicPath for product screens and component library. Cursor agent connects to MagicPath via skill when design work leaves the IDE.

Use neither

Quick Q&A, small code fix, or work that belongs in your real observability/design tool of record. Do not canvas a two-row table.


Practical next steps

Try Cursor Canvas this week

  • Open Agents Window → ask for a context usage report canvas
  • Run Docs Canvas skill on a repo you do not own mentally
  • On next incident: ask agent to join MCP observability data in one chart
  • Publish one canvas to test team sharing (requires Pro + team)

Evaluate MagicPath only if

  • You have recurring product UI work with visual iteration
  • Non-engineers need to see and edit what agents produce
  • You already use Cursor/Claude Code and want design outside chat
  • Skip if your work is data/backend/docs with no UI surface

Addendum — Sharing, format & export

How Cursor's built-in share works, what it costs, and what you can do as an individual without the Publish button.

Built-in sharing (Publish)

Publish uploads a live snapshot of the rendered canvas and returns a URL teammates open in the browser — same layout, charts, and tables, without rerunning the agent or digging through chat. Browse team publishes from Shared Canvases on the dashboard.

Constraint Detail
Free plan Cannot create shared canvas links
Paid plans Pro, Teams, and Enterprise can publish
Team membership Required — Pro solo without a team cannot share per docs
Privacy mode Legacy Privacy Mode blocks sharing (needs storage-allowed mode)
Admin control Teams/Enterprise admins can disable Shared Canvases org-wide
What gets shared Live snapshot upload — not a live-editing session
Recipient access Browser link; dashboard lists team shares read-only
Refresh Re-publish from toolbar to update the snapshot

Warning: Publish is not a substitute for git. The URL is a team-visible snapshot hosted by Cursor — not a portable artifact you own. Free accounts and Legacy Privacy Mode users need another path (below).

The .canvas.tsx format

A canvas is a single React TSX file compiled by the Cursor IDE. It is not a standard npm React app — the cursor/canvas import resolves only inside Cursor's canvas host.

File rules (from Cursor canvas skill):

  • Single file per canvas — no helper modules or separate CSS
  • import only from cursor/canvas (Stack, Card, Table, charts, useHostTheme, etc.)
  • Default export one React component
  • All data inline in the file — no fetch(), no network calls
  • Filename must end in .canvas.tsx inside the managed canvases/ directory
  • Cursor host compiles the file — cursor/canvas is not a public npm package (open-canvas vendors the runtime for browser preview)

Typical path on disk: ~/.cursor/projects/<workspace>/canvases/<name>.canvas.tsx. Subfolders and other extensions are not picked up by the IDE.

Export & share options (individual user)

Method Renders where? Notes
Commit .canvas.tsx to git In Cursor only Place file at ~/.cursor/projects/<workspace>/canvases/name.canvas.tsx (no subfolders). Clone repo, open workspace in Cursor.
GitHub Gist (raw .canvas.tsx) In Cursor only (gist UI = source) Portable source. Recipient copies into Cursor canvases/ or open-canvas canvases/.
open-canvas (aculich fork) Browser — full interactive (self-hosted) Vite host with vendored SDK. Copy file, register in registry.ts, bun run dev or deploy dist/.
Gist + HTML preview proxy Browser — static read-only Self-contained .html gist + htmlpreview or gisthost
Gist + canvas.md Gist native markdown Open gist — static formatted doc
Cursor Publish (toolbar) Browser — interactive snapshot Best native share. Requires paid plan + team + compatible privacy mode.
Ask agent to port content Anywhere you deploy Convert to standalone React, HTML, or MDX. Loses cursor/canvas SDK.
Screenshot / PDF Static image Full-screen browser view helps presentations. Loses interactivity.
Regenerate via canvas skill In Cursor Share skill + data sources; teammate reruns for fresh data.

Import back into Cursor

  • Copy the .canvas.tsx into your project's canvases/ folder
  • Path must be exactly …/canvases/foo.canvas.tsx (flat, no subdirs)
  • Open from chat link, Command Palette → Open Canvas, or Agents Window
  • Edit source or prompt agent to iterate
  • Works across machines via git clone or gist download

Render outside Cursor today

  • No public cursor/canvas npm package — TSX does not run in CodeSandbox as-is
  • Static HTML + gist → htmlpreview or gisthost (zero deploy, read-only)
  • This gist's canvas.md — native gist markdown preview (static)
  • open-canvas — vendored SDK + Vite host; deploy dist/ for full interactive URL
  • Cursor Publish URL — native share if you have Pro + team + compatible privacy mode
  • Port: ask agent to rebuild layout with React + your UI lib + inline data
  • Static: screenshot or print full-screen published view
  • Semantic: export data as JSON/MD in repo; regenerate canvas from skill

open-canvas — browser preview without Cursor Publish

mergd/open-canvas runs .canvas.tsx files in a browser by vendoring the Cursor canvas SDK runtime into a Vite app.

Quick start:

  1. git clonebun installbun run devhttp://localhost:5173
  2. Copy your .canvas.tsx into open-canvas/canvases/
  3. Add an entry to canvases/registry.ts
  4. bun run build → deploy dist/ to Vercel, Netlify, or Cloudflare Pages

Gist? A gist alone does not render the canvas — just the source file. Pair gist + open-canvas: download raw TSX, drop into canvases/, register, deploy.

Limitations: useCanvasAction is a no-op outside Cursor; useCanvasState persists in dev only on static hosts; SDK extracted from Cursor.app.

Gist previewers — static HTML path (zero deploy)

GitHub Gist renders markdown, notebooks, and geojson natively. For arbitrary React/TSX it shows source only. Two community proxies render a static .html file from a gist:

Service Open this export Pattern
htmlpreview Open preview → htmlpreview.github.io/?<raw-html-url>
gisthost Open preview → gisthost.github.io/?<gist-id>/<file>.html
Gist markdown Open gist canvas.md tab → native — no proxy

Recipe:

  1. Export canvas as single self-contained HTML (inline CSS, inline data)
  2. Create a gist with .html and optionally canvas.md
  3. Share: htmlpreview or gisthost for HTML; gist canvas.md tab for markdown

Does not work: raw .canvas.tsx gist; open-canvas dist/ multi-file SPA; HTML with relative asset paths.

Recommended workflow: share via GitHub as an individual

  1. Commit canvases/my-report.canvas.tsx to a repo
  2. README: "Open in Cursor → place under ~/.cursor/projects/<workspace>/canvases/"
  3. For non-Cursor viewers: deploy open-canvas, or export canvas.md + HTML to gist
  4. Optional: package a canvas skill for fresh data regeneration

Sharing docs: canvas docs · shared canvases changelog · dashboard · open-canvas fork · gist + previews

Sources: cursor.com/docs/agent/tools/canvas, cursor.com/blog/canvas, cursor.com/changelog (Apr 15 & Jun 4 2026), magicpath.ai. Part of agent releases research — Jun 2026.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Cursor Canvases &amp; MagicPath — Brief</title>
<style>
:root {
--bg: #181818;
--surface: #222222;
--border: #2e2e2e;
--text: #e4e4e4;
--muted: #a0a0a0;
--tertiary: #707070;
--accent: #6eb6ff;
--warning-bg: #2a2218;
--warning-border: #5c4a20;
--info-bg: #18222a;
--info-border: #204a5c;
--pill-bg: #2a2a2a;
--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
--mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
--max: 960px;
--gap: 24px;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: var(--font);
background: var(--bg);
color: var(--text);
line-height: 1.55;
font-size: 15px;
}
.wrap {
max-width: var(--max);
margin: 0 auto;
padding: var(--gap);
}
.pills { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.pill {
display: inline-block;
padding: 2px 10px;
border-radius: 999px;
background: var(--pill-bg);
font-size: 12px;
color: var(--muted);
border: 1px solid var(--border);
}
h1 { font-size: 28px; font-weight: 600; margin: 0 0 8px; letter-spacing: -0.02em; }
h2 { font-size: 20px; font-weight: 600; margin: 0 0 12px; }
h3 { font-size: 16px; font-weight: 600; margin: 16px 0 8px; }
p { margin: 0 0 12px; }
.subtitle { color: var(--muted); margin-bottom: 0; }
hr { border: none; border-top: 1px solid var(--border); margin: var(--gap) 0; }
.callout {
padding: 14px 16px;
border-radius: 8px;
border: 1px solid var(--border);
margin-bottom: 12px;
font-size: 14px;
}
.callout.info { background: var(--info-bg); border-color: var(--info-border); }
.callout.warn { background: var(--warning-bg); border-color: var(--warning-border); }
.stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 12px;
margin: 16px 0;
}
.stat {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
padding: 12px 14px;
}
.stat-label { font-size: 12px; color: var(--muted); margin-bottom: 4px; }
.stat-value { font-size: 18px; font-weight: 600; }
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 8px;
overflow: hidden;
height: 100%;
}
.card-h {
padding: 12px 14px;
font-weight: 600;
font-size: 14px;
border-bottom: 1px solid var(--border);
}
.card-b { padding: 14px; font-size: 14px; }
.grid-2 {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 12px;
}
ul.compact { margin: 0; padding-left: 0; list-style: none; }
ul.compact li { margin-bottom: 6px; font-size: 14px; color: var(--muted); }
ul.compact li.plus::before { content: "+ "; color: var(--accent); }
ul.compact li.minus { color: var(--tertiary); }
ul.compact li.minus::before { content: "− "; }
ul.compact li.dash::before { content: "— "; color: var(--tertiary); }
table {
width: 100%;
border-collapse: collapse;
font-size: 14px;
margin: 12px 0;
}
th, td {
border: 1px solid var(--border);
padding: 10px 12px;
text-align: left;
vertical-align: top;
}
th { background: var(--surface); font-weight: 600; }
td.muted { color: var(--muted); }
details {
border: 1px solid var(--border);
border-radius: 8px;
margin-bottom: 8px;
background: var(--surface);
}
summary {
padding: 12px 14px;
cursor: pointer;
font-weight: 600;
font-size: 14px;
list-style: none;
}
summary::-webkit-details-marker { display: none; }
summary::before { content: "▸ "; color: var(--muted); }
details[open] summary::before { content: "▾ "; }
.details-body { padding: 0 14px 14px; font-size: 14px; color: var(--muted); }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
code, .mono { font-family: var(--mono); font-size: 13px; }
.footer { font-size: 13px; color: var(--tertiary); margin-top: var(--gap); }
.banner {
font-size: 13px;
color: var(--muted);
padding: 10px 14px;
border-bottom: 1px solid var(--border);
background: #141414;
}
</style>
</head>
<body>
<div class="banner">
Static export of <code>cursor-canvas-magicpath-brief.canvas.tsx</code> —
<a href="https://gist.github.com/aculich/eff6f360372c18fbc773e79af7750efd">gist</a>
(<a href="https://gist.github.com/aculich/eff6f360372c18fbc773e79af7750efd">canvas.md</a> renders on GitHub) ·
<strong>HTML preview:</strong>
<a href="https://htmlpreview.github.io/?https://gist.githubusercontent.com/aculich/eff6f360372c18fbc773e79af7750efd/raw/cursor-canvas-magicpath-brief.html">htmlpreview</a> ·
<a href="https://gisthost.github.io/?eff6f360372c18fbc773e79af7750efd/cursor-canvas-magicpath-brief.html">gisthost</a> ·
<a href="https://github.com/aculich/open-canvas">interactive fork</a>
</div>
<div class="wrap">
<div class="pills">
<span class="pill">Deep dive</span>
<span class="pill">Visual agent layer</span>
</div>
<h1>Cursor Canvases &amp; MagicPath</h1>
<p class="subtitle">What each tool is for, when to reach for it, and when to skip it. Companion to the agent releases brief (Jun 2026 tab research).</p>
<div class="callout info">
<strong>One-sentence split:</strong> Cursor Canvas is where your agent puts analytical results beside your code. MagicPath is where your team and agents co-design product UI in a shared visual workspace — including from Cursor, but not limited to it.
</div>
<div class="stats">
<div class="stat"><div class="stat-label">Cursor Canvas shipped</div><div class="stat-value">Apr 2026</div></div>
<div class="stat"><div class="stat-label">Design Mode</div><div class="stat-value">Jun 2026</div></div>
<div class="stat"><div class="stat-label">MagicPath</div><div class="stat-value">v2.0</div></div>
</div>
<hr />
<h2>Cursor Canvases — what you need to know</h2>
<p>Agents render interactive React artifacts next to chat instead of markdown walls. Each canvas is a durable <strong>.canvas.tsx</strong> file you can reopen, edit, iterate on, or publish to your team.</p>
<div class="card" style="margin-bottom:12px">
<div class="card-h">How it works</div>
<div class="card-b">
<ol style="margin:0;padding-left:20px;color:var(--muted);font-size:14px">
<li>You ask for a dashboard, audit, report, or visual analysis — or the agent decides one fits.</li>
<li>Cursor builds a canvas and shows a card at the end of the response.</li>
<li>Open from the card, Command Palette (Open Canvas), or Agents Window tab.</li>
<li>Refine by prompting the agent, using Design Mode, or editing source directly.</li>
<li>Canvases save to your workspace list — no rerun needed to revisit layout.</li>
</ol>
</div>
</div>
<div class="grid-2">
<div class="card">
<div class="card-h">Components &amp; features</div>
<div class="card-b">
<ul class="compact">
<li class="dash">Tables, stats, charts, callouts, collapsible sections</li>
<li class="dash">Diff views, todo lists, DAG-style diagrams</li>
<li class="dash">Design Mode — select UI, annotate, agent edits in place</li>
<li class="dash">Context usage report canvas with Debug with Agent</li>
<li class="dash">Embed buttons that run a prompt when clicked</li>
<li class="dash">Publish → shareable URL (Pro / Teams / Enterprise)</li>
</ul>
</div>
</div>
<div class="card">
<div class="card-h">Repeatable workflows (skills)</div>
<div class="card-b">
<p style="font-size:14px;margin-bottom:8px">Package a canvas workflow as a skill with four parts:</p>
<ul class="compact">
<li class="dash"><strong>Trigger</strong> — when to use it</li>
<li class="dash"><strong>Layout</strong> — sections, stats, tables</li>
<li class="dash"><strong>Data</strong> — SQL, API, shell, MCP</li>
<li class="dash"><strong>Formatting</strong> — units, date range, sort</li>
</ul>
</div>
</div>
</div>
<h3>When Cursor Canvas earns its place</h3>
<ul class="compact">
<li class="plus">Incident triage joining Datadog, Databricks, Sentry, or local logs in one chart</li>
<li class="plus">Large PR reviews — grouped diffs, prioritized sections, pseudocode</li>
<li class="plus">Eval / rollout analysis — cluster failure modes across request IDs</li>
<li class="plus">Context usage debugging — token breakdown by rules, skills, tools</li>
<li class="plus">Repeatable reports — package as a canvas skill</li>
<li class="plus">Architecture walkthroughs — Docs Canvas skill from Marketplace</li>
</ul>
<h3>When it is overkill or wrong tool</h3>
<ul class="compact">
<li class="minus">One-line answer or single file edit — chat is enough</li>
<li class="minus">Production dashboard in Datadog/Grafana — build it there</li>
<li class="minus">Freeform whiteboarding or Figma-style design exploration</li>
<li class="minus">Artifact must live in Slack/Notion async — publish or export manually</li>
<li class="minus">No structured data — prose beats an empty chart frame</li>
</ul>
<p class="footer">Docs: <a href="https://cursor.com/docs/agent/tools/canvas">cursor.com/docs/agent/tools/canvas</a></p>
<hr />
<h2>MagicPath — beyond Cursor</h2>
<p>MagicPath is a separate product: a <strong>multiplayer design canvas</strong> where humans and AI agents work on the same visual file. Cursor is one of several agents you can plug in.</p>
<div class="card" style="margin-bottom:12px">
<div class="card-h">What it enables that Cursor Canvas does not</div>
<div class="card-b">
<ul class="compact">
<li class="dash">Real-time co-editing — see teammates and agents live</li>
<li class="dash">Parallel design — multiple agents, screen variations</li>
<li class="dash">Cloud-native — agents continue while app is closed</li>
<li class="dash">Repo round-trip — design files sync to codebase</li>
<li class="dash">External agent hub — Codex, Claude Code, Cursor via skill</li>
<li class="dash">Product UI focus — components, screens, design systems</li>
</ul>
</div>
</div>
<div class="callout warn">
Install: <code class="mono">npx skills add https://github.com/magicpathai/agent-skills --skill magicpath</code>
</div>
<h3>When MagicPath is worth it</h3>
<ul class="compact">
<li class="plus">Building product UI with humans and agents co-editing</li>
<li class="plus">Multiple screens or variations from one prompt</li>
<li class="plus">Design must round-trip to your codebase</li>
<li class="plus">Real-time multiplayer on a visual canvas</li>
<li class="plus">External agents work while you are offline</li>
<li class="plus">Linear/MCP/repo-connected design outside IDE chat</li>
</ul>
<h3>When MagicPath is overkill</h3>
<ul class="compact">
<li class="minus">You only need agent analysis beside code — Cursor Canvas is enough</li>
<li class="minus">Solo dev, no design collaborators, no visual product surface</li>
<li class="minus">Backend/data work with no UI component library</li>
<li class="minus">Another SaaS for a one-off diagram</li>
<li class="minus">IDE-native artifacts with zero context switch</li>
</ul>
<hr />
<h2>Side-by-side</h2>
<table>
<thead><tr><th>Dimension</th><th>Cursor Canvas</th><th>MagicPath</th></tr></thead>
<tbody>
<tr><td><strong>Primary job</strong></td><td>Agent output &amp; analysis artifacts</td><td>Collaborative product/design canvas</td></tr>
<tr><td><strong>Where it lives</strong></td><td>Cursor IDE — Agents Window, .canvas.tsx</td><td>Cloud app — magicpath.ai</td></tr>
<tr><td><strong>Who edits</strong></td><td>You + Cursor agent</td><td>Humans + multiple agents, multiplayer</td></tr>
<tr><td><strong>Output type</strong></td><td>Dashboards, reports, audits, diff UIs</td><td>Design components, screens, variations</td></tr>
<tr><td><strong>Persists as</strong></td><td>Workspace canvas list; optional published URL</td><td>MagicPath design files; syncs to repo</td></tr>
<tr><td><strong>Extensibility</strong></td><td>Canvas skills + Marketplace</td><td>magicpath skill</td></tr>
<tr><td><strong>Best paired with</strong></td><td>MCP tools, repo context, terminal</td><td>Cursor/Claude Code/Codex, Linear, MCP</td></tr>
<tr><td><strong>Overkill when</strong></td><td>Quick text answer</td><td>In-IDE report only</td></tr>
</tbody>
</table>
<hr />
<h2>Decision guide</h2>
<details open><summary>Stay in Cursor Canvas only</summary><div class="details-body">Engineer debugging, reviewing, or reporting inside the repo. Analytical output. No design teammates.</div></details>
<details><summary>Add MagicPath</summary><div class="details-body">Shipping UI with designers or PMs. Parallel layout exploration. Design must land in code via shared file.</div></details>
<details><summary>Use both</summary><div class="details-body">Cursor Canvas for engineering artifacts. MagicPath for product screens. Connect via skill when design leaves the IDE.</div></details>
<details><summary>Use neither</summary><div class="details-body">Quick Q&amp;A, small fix, or work that belongs in your real tool of record.</div></details>
<hr />
<h2>Addendum — Sharing, format &amp; export</h2>
<h3>Export options (summary)</h3>
<table>
<thead><tr><th>Method</th><th>Renders where?</th></tr></thead>
<tbody>
<tr><td>Commit .canvas.tsx to git</td><td class="muted">In Cursor only</td></tr>
<tr><td>Gist raw .canvas.tsx</td><td class="muted">Source only in gist UI</td></tr>
<tr><td><a href="https://github.com/mergd/open-canvas">open-canvas</a></td><td>Browser — full interactive (self-hosted)</td></tr>
<tr><td>Gist + HTML + htmlpreview/gisthost</td><td class="muted">Browser — static read-only</td></tr>
<tr><td>Gist + <strong>canvas.md</strong></td><td>Gist native markdown render</td></tr>
<tr><td>Cursor Publish</td><td>Browser — interactive snapshot (paid + team)</td></tr>
</tbody>
</table>
<details open>
<summary>Gist previewers — static HTML path</summary>
<div class="details-body">
<p><a href="https://htmlpreview.github.io">htmlpreview.github.io</a> — prepend to raw HTML URL.</p>
<p><a href="https://gisthost.github.io">gisthost.github.io</a> — <code>?&lt;gist-id&gt;/&lt;file&gt;.html</code></p>
<p>Does <em>not</em> work on raw .canvas.tsx or open-canvas dist/ bundles.</p>
</div>
</details>
<details open>
<summary>open-canvas — browser preview without Publish</summary>
<div class="details-body">
<p>Clone mergd/open-canvas → copy .canvas.tsx → register in registry.ts → bun run dev or deploy dist/.</p>
</div>
</details>
<p class="footer">
Sources: cursor.com/docs/agent/tools/canvas, magicpath.ai, mergd/open-canvas. Jun 2026.
</p>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment