All posts

Release · May 7, 2026

Canvas History: what changed.

Git-style versioning for canvases. Save milestones, compare any milestone with the live canvas via a visual overlay, see every operation in an AI-summarized activity feed, and undo any AI agent run with a single button.

Deniss Alimovs5 min read
Canvas History — a person looking at a constellation of canvas cards connected by light

Why we built it

Canvases are powerful precisely because they are freeform. But that freedom has a cost. When you let an AI agent rearrange 30 cards, or a teammate moves a key insight off-screen, or you yourself drag everything around and lose the layout you liked an hour ago, there is no Cmd-Z that scales to that level of work.

We watched users hesitate before AI agent runs. We watched them avoid drag-heavy reorgs. We watched them give up on this is good, let me save it because there was no way to mark the moment.

Canvas History fixes that, without giving up freeform speed.

What's in v1

Recent-changes pill

Top of every canvas. Shows what is pending since your last milestone (or since your last visit). Click to see the diff. One click to apply.

Save Milestone

Open the recent-changes pill, optionally name what this snapshot represents, and hit Save. AI generates a summary in the background. Milestones show up in the History dropdown and in the activity feed.

Compare Mode

Overlay any milestone on the live canvas. Green outlines for added, amber for modified, sky-blue arcs for moved-from positions, rose dashes for removed. Hover any moved card to see its previous position via a curved arc.

Activity Feed

Chronological timeline of every operation: manual edit, drag, agent run, restore, revert. Each row has an AI-generated headline (“Restructured product roadmap into 4 quarterly themes”) and per-category counts. The Notable filter hides single-drag noise.

Restore Milestone

Replace the live canvas with any milestone's saved state. Atomic. Undoable. An auto-checkpoint captures the pre-restore state automatically.

Revert Agent Operation

Surgical undo. Roll back exactly the changes one AI run made, leaving every other change intact. Safe-by-default: entities edited by other people after the run are kept.

Auto-checkpoints

The system quietly saves the canvas before and after every AI run, and around every restore. You never see these in your History list (they would drown out the milestones you actually named), but they are what powers the Undo button. The safety net you do not have to think about.

The problems this solves

Three patterns kept showing up in user research, and all three shared the same root cause: there was no durable record of the canvas over time.

  • The canvas was a black box for collaborators. Open the canvas Monday, see a different layout, ask in Slack. Synchronous interruption for asynchronous work.
  • AI agents felt risky on real work. Letting an agent rearrange 30 cards was a leap of faith. Bad result meant manual cleanup. People only ran agents on scratch canvases, which defeated the point.
  • No way to mark a “this is good, save it” state. Canvases drift. Workarounds were screenshots, pasted backups, or just abandoning a canvas once it looked good enough.

What we deliberately left out

A few things we chose not to build. The simpler version covers the work we saw people actually doing, and the extra surface area would have cost more than it gave back.

  • · Branching milestones. Linear history only.
  • · Cherry-picking individual changes from one milestone into another.
  • · A conflict-resolution UI for concurrent edits. Last-write-wins.

How safe is this?

Every snapshot carries a fingerprint. If a snapshot ever gets corrupted, the fingerprint will not match, and we refuse to restore rather than put a broken state on your canvas.

Old snapshots stay restorable even after the product changes underneath them. Each one remembers the shape it was saved in, and the system walks it forward to today's shape automatically.

And every action is reversible. Restoring a milestone is itself undoable. Reverting an AI run is itself undoable. You can't get into a state you can't get out of.

The success metric

We will know we got this right when users start running more AI agent runs per week, and when “what changed?” stops being a Slack question.

Try it on your own canvas.

Open any canvas, make a change, and look for the recent-changes pill at the top. Click it to save your first milestone.

Sign in to try it