Canvas sind die React-Dashboards neben dem Chat in Cursor. Sie liegen statt im Projekt in einem Ordner im Benutzerprofil, dessen Name aus dem Workspace-Pfad entsteht. Wer einen Projektordner umbenennt, verliert den Zugriff. Im Praxisbeispiel des Autors lagen 65 Canvas in 13 Projektordnern, 45 davon in einem einzigen, bei fast 500 Cursor-Projektordnern. Der Artikel zeigt den Soll-Zustand mit sechs Bausteinen: Inventar, Master im Projektordner, Versionierung, Umzug, Vorlagen und Veröffentlichung. Dazu gehören zwei kurze PowerShell-Skripte für Inventar und Synchronisation.
Inhalt 12 Abschnitte
- Auf einen Blick
- Das Problem: Dashboards in versteckten Ordnern
- Soll-Zustand: sechs Bausteine
- Schritt 1: Inventar
- Schritt 2: Master im Projekt, Arbeitskopie im Profil
- Schritt 3: Hooks verbinden beide Seiten
- Parameter des Inventar-Skripts
- Typische Fehler
- Grenzen
- Einordnung: Was das für Teams mit Cursor heisst
- Fazit
- Änderungshistorie

Im Praxisbeispiel lagen 65 Canvas in 13 Projektordnern, 45 davon in einem einzigen. Bei fast 500 Projektordnern von Cursor findet sie ohne Inventar niemand mehr. Dazu gibt es kein Backup und keine Versionierung.
Auf einen Blick
- Cursor speichert Canvas im Benutzerprofil statt im Projektordner. Der Pfad lautet
%USERPROFILE%\.cursor\projects\<workspace-pfad>\canvases\. - Der Ordnername entsteht aus dem Workspace-Pfad. Wer ein Projekt verschiebt oder umbenennt, verliert die Canvas aus dem Blick, sie liegt weiter im alten Ordner.
- Ein Inventar-Skript macht den Bestand sichtbar. Es listet alle
*.canvas.tsxmit Workspace, Datum und Grösse und liest keine Inhalte. - Der Projektordner wird zum Master. Sync-Hooks kopieren beidseitig, jede Änderung legt vorher einen Snapshot an.
Das Problem: Dashboards in versteckten Ordnern
Canvas gehören zu den stärksten Werkzeugen von Cursor. Es sind React- und TSX-Dashboards neben dem Chat: Projektübersichten, Kundenpläne, Kampagnen, Forecasts. Sie lassen sich per Prompt bauen und aktualisieren, und genau das macht sie so nützlich.
Die Ablage ist das Gegenteil. Fünf Punkte erschweren den Alltag:
- Falscher Ort: Cursor legt Canvas im Profil ab, nicht im Projekt.
- Fragiler Ordnername: Er ist der umgeschriebene Workspace-Pfad. Ein umbenannter Ordner erzeugt einen neuen, leeren Canvas-Ordner.
- Kein Überblick: «Open Canvas» zeigt nur die Canvas des aktuellen Workspaces.
- Kein Backup: Der Profilordner wird nicht synchronisiert.
- Keine Versionierung: Ein Prompt, der ein Dashboard verschlechtert, lässt sich nicht zurücknehmen.
Im Beispiel des Autors waren das 65 Canvas in 13 Ordnern, davon 45 in einem Projekt. Wo die übrigen 20 lagen, wusste ohne Suche niemand.
Soll-Zustand: sechs Bausteine
Einige Teile der Lösung existieren bereits als einzelne Skripte: ein Snapshot-Skript, das vor jeder Änderung eine Version nach canvas-history\ kopiert, ein Generator, der ein Canvas aus JSON-Caches neu baut, ein Sync-Skript und ein Render-Skript (HTML nach PNG oder PDF mit Playwright). Dazu kommt eine Regel, die das Datum zur Laufzeit berechnet statt als festen «HEUTE»- oder «MORGEN»-Text.
Daraus entsteht der Soll-Zustand:
- Inventar als CSV oder Markdown, damit der Bestand sichtbar bleibt.
- Master im Projektordner. Der Cursor-Ordner ist nur die Arbeitskopie, beide Seiten werden abgeglichen.
- Versionierung für jede Canvas, nicht nur für einzelne.
- Umzug: Nach dem Umbenennen eines Projektordners wandern die Canvas in den neuen Cursor-Ordner mit.
- Vorlagen für Kundenplan, Kampagne und Forecast.
- Veröffentlichung als HTML oder PDF für alle, die kein Cursor haben. Warum diese Variante oft der schnellste Weg ist, zeigt der Artikel Cursor ohne eigenes Abo: Vier Wege für Copilot-Nutzer.
Schritt 1: Inventar
Das Inventar läuft in Windows PowerShell 5.1 und braucht keine Anmeldung. Es sammelt die Dateien, gruppiert sie nach Workspace und schreibt auf Wunsch einen Index.
$items = Get-ChildItem -LiteralPath $Root -Recurse -Filter '*.canvas.tsx' -File -ErrorAction SilentlyContinue | ForEach-Object { $rel = $_.FullName.Substring($Root.Length + 1) [pscustomobject]@{ Workspace = $rel.Split('\')[0] Canvas = $_.Name -replace '\.canvas\.tsx$', '' KB = [math]::Round($_.Length / 1KB, 1) Geaendert = $_.LastWriteTime.ToString('yyyy-MM-dd HH:mm') Pfad = $_.FullName } } if ($ProjectFilter) { $items = $items | Where-Object { $_.Workspace -like "*$ProjectFilter*" } } $items | Group-Object Workspace | Sort-Object Count -Descending | ForEach-Object { $newest = ($_.Group | Sort-Object Geaendert -Descending | Select-Object -First 1).Geaendert '{0,4} {1} (neueste {2})' -f $_.Count, $_.Name, $newest } 'Total: {0} Canvas in {1} Workspaces' -f @($items).Count, @($items | Select-Object -Unique -ExpandProperty Workspace).Count
$Root zeigt auf %USERPROFILE%\.cursor\projects. Mit -OutCsv entsteht ein Index, mit -ProjectFilter lässt sich auf ein Projekt eingrenzen. Danach lassen sich verwaiste Canvas markieren, also solche, deren Workspace-Ordner nicht mehr existiert.
Schritt 2: Master im Projekt, Arbeitskopie im Profil
Für jedes Projekt entsteht ein Ordner canvases\ im Projekt. Dort liegen die Master-Dateien, und dieser Ordner gehört in die normale Ablage (zum Beispiel OneDrive oder Git, sofern keine Kundendaten drin sind). Das Sync-Skript berechnet den Cursor-Ordner aus dem Projektpfad und kopiert, wenn die Projektdatei neuer ist.
# Cursor benennt den Workspace-Ordner nach dem Pfad (je Version prüfen) $slug = ($ProjectPath -replace '[^A-Za-z0-9]+', '-').Trim('-') $slug = $slug.Substring(0,1).ToLower() + $slug.Substring(1) $ide = Join-Path $Config.CursorProjectsRoot ("{0}\canvases" -f $slug) $src = Join-Path $ProjectPath 'canvases' $hist = Join-Path $ProjectPath 'canvas-history' foreach ($f in Get-ChildItem -LiteralPath $src -Filter '*.canvas.tsx') { $dst = Join-Path $ide $f.Name if ((Test-Path -LiteralPath $dst) -and ((Get-Item -LiteralPath $dst).LastWriteTime -gt $f.LastWriteTime)) { Write-Warning ("Cursor-Kopie ist neuer: {0} -> zuerst zurück ins Projekt holen" -f $f.Name) continue } if ($PSCmdlet.ShouldProcess($dst, 'Canvas kopieren')) { Copy-Item -LiteralPath $f.FullName -Destination (Join-Path $hist ((Get-Date -Format 'yyyyMMdd-HHmmss') + '__' + $f.Name)) Copy-Item -LiteralPath $f.FullName -Destination $dst -Force } }
Die Regel lautet: Die neuere Datei gewinnt, und vorher entsteht ein Snapshot. Das Skript ist ein Entwurf und gehört zuerst mit -WhatIf getestet. Die Namensbildung des Cursor-Ordners kann sich mit Updates ändern.
Schritt 3: Hooks verbinden beide Seiten
Damit niemand daran denken muss, übernehmen Hooks den Abgleich. Beim Start einer Sitzung (sessionStart) kopiert ein Hook die Master in den Cursor-Ordner. Nach jeder Dateiänderung (afterFileEdit) kopiert ein zweiter Hook die Arbeitskopie zurück ins Projekt und legt einen Snapshot an. Wie Hooks in Cursor aufgebaut sind, zeigt der Artikel Cursor als Arbeitsplatz: Rules, Skills und Hooks.
Vorlagen für Kundenplan, Kampagne und Forecast entstehen, indem man eine gelungene Canvas bereinigt und in Templates\canvas ablegt. Ein neuer Kunde startet dann aus der Vorlage und ergänzt nur die JSON-Daten.
Parameter des Inventar-Skripts
| Parameter | Bedeutung | Bemerkung |
|---|---|---|
-Root |
Cursor-Projektordner |
Standard %USERPROFILE%\.cursor\projects |
-OutCsv |
Pfad der Index-Datei |
Ohne Angabe erscheint nur die Konsolenausgabe |
-ProjectFilter |
Filter auf den Workspace |
Platzhalter * sind erlaubt |
Typische Fehler
- Canvas nach dem Umbenennen «weg»: Sie liegt noch im alten Cursor-Ordner. Das Inventar findet sie.
- Änderungen nur im Projektordner: Cursor zeigt den alten Stand, solange der Sync nicht lief.
- Typografische Unicode-Zeichen: Sie erzeugen beim Export Mojibake. Dasselbe Problem kennt jede PowerShell-5.1-Datei ohne BOM.
- Feste Datumstexte: Sie sind schon am nächsten Tag falsch. Das Datum gehört zur Laufzeit berechnet.
Grenzen
Das Ablageformat von Cursor kann sich mit Updates ändern, und die beschriebene Namensbildung ist dann anzupassen. Canvas enthalten oft Kundendaten und gehören deshalb nicht in öffentliche Repositories. Die Skripte sind Entwürfe, die zuerst mit -WhatIf laufen sollten.
Einordnung: Was das für Teams mit Cursor heisst
Wer Canvas als Arbeitsmittel nutzt, behandelt sie am besten wie Code: im Projekt abgelegt, versioniert und gesichert. Der Aufwand ist klein, ein Inventar und zwei Hooks genügen. Der Nutzen zeigt sich am Tag, an dem ein Dashboard nach einem Umzug oder einem verunglückten Prompt wieder da ist. Vor allem Teams, in denen mehrere Personen Kundenpläne pflegen, brauchen einen gemeinsamen Master und eine Änderungsgeschichte. Beachte dabei den Datenschutz, denn eine Canvas mit Kundendaten gehört in den geschützten Ablageort der Firma.
Fazit
Cursor-Canvas liegen im falschen Ordner. Ein Inventar macht den Bestand sichtbar, ein Master im Projektordner mit Sync-Hooks und Snapshots sichert ihn. Veröffentlichung als HTML oder PDF bringt die Ergebnisse zu allen, die kein Cursor haben. Starte mit dem Inventar-Skript und schau nach, wo deine Dashboards liegen.
Quellen: Skripte und Beispiele aus eigener Praxis. Das Ablageformat von Cursor und die Namensbildung der Workspace-Ordner können sich ändern, bitte je Version prüfen. Cursor-Dokumentation, Playwright. Zuletzt geprüft: 24. Oktober 2026.
Geschrieben von Andreas Brauckmann
Änderungshistorie
- — Artikel veröffentlicht: Cursor-Canvas inventarisieren, sichern und versionieren.