Recording demos
Instead of writing scenes and moves by hand, you can record what you do in the editor and let Demo Time turn it into an act for you. Click record, create a file, type some content, save and highlight a few lines, then click stop — Demo Time writes a version 3 act file with the matching create, open, applyPatch, save and highlight moves.
Start and stop recording
The recorder is controlled from the Acts & Scenes view in the Demo Time activity bar:
- Click the ● Record button in the view title bar to start. The button changes to a ■ Stop button while recording.
- Do your thing in the editor — create files, type, save, switch files.
- Click ■ Stop to finish. Demo Time asks for a title and creates a new act file in the
.demofolder.
You can also use the command palette: Demo Time: Record demo and Demo Time: Stop recording.
What gets captured
| You do… | Recorded move |
|---|---|
| Have a file open when you start recording | open |
| Create a new file | create followed by open |
| Type or edit a file | applyPatch (edits are coalesced — see segmentation) |
| Save a file | save (can be disabled, see settings) |
| Switch to another file | flushes the pending edits into a move |
Highlights, move boundaries and new scenes are added on demand through the recording actions.
How edits become moves
While recording, your edits to a file are coalesced: everything you type piles up and only becomes a single applyPatch move when a boundary is reached. The boundaries are:
- Switching to another file
- Saving the file
- The Split move action (a manual boundary, see below)
- The New scene action
- Stopping the recording
This keeps the result clean — one move per meaningful chunk instead of one move per keystroke. Use Split move when you want to break a long edit into several steps within the same scene.
Recording actions
While recording, right-click in the editor to open the Demo Time submenu. The same actions are available via the command palette and through keybindings. The menu only appears while a recording is active.
| Action | Keybinding | What it does |
|---|---|---|
| Mark highlight | Cmd/Ctrl+Alt+H | Capture the current selection as a highlight move. With no selection it highlights the current line. |
| Split move | Cmd/Ctrl+Alt+M | End the current move and start a new one — without leaving the file or saving. |
| New scene | Cmd/Ctrl+Alt+N | End the current scene and start a new one. You are prompted for the scene title. |
| Stop recording | — | Finish recording and create the act file. |
Generated files
When you stop, Demo Time creates:
- A new act file in the
.demofolder (in JSON or YAML, depending on yourdemoTime.defaultFileTypesetting). - A snapshot and patch per edit move, under
.demo/snapshots/recording-<timestamp>/and.demo/patches/recording-<timestamp>/. These are referenced by theapplyPatchmoves and use the same format as the Patch actions.
Here is an example of what a recorded act looks like:
{ "$schema": "https://demotime.show/demo-time.schema.json", "title": "Recorded demo 20260625-101500", "description": "Recorded with Demo Time", "version": 3, "scenes": [ { "title": "Scene 1", "moves": [ { "action": "create", "path": "/src/app.ts" }, { "action": "open", "path": "/src/app.ts" }, { "action": "applyPatch", "path": "/src/app.ts", "contentPath": "/.demo/snapshots/recording-20260625-101500/001-app.ts", "patch": "/.demo/patches/recording-20260625-101500/001-app.ts.patch" }, { "action": "highlight", "path": "/src/app.ts", "position": "1:3" }, { "action": "save" } ] } ]}title: Recorded demo 20260625-101500description: Recorded with Demo Timeversion: 3scenes: - title: Scene 1 moves: - action: create path: /src/app.ts - action: open path: /src/app.ts - action: applyPatch path: /src/app.ts contentPath: /.demo/snapshots/recording-20260625-101500/001-app.ts patch: /.demo/patches/recording-20260625-101500/001-app.ts.patch - action: highlight path: /src/app.ts position: "1:3" - action: saveSettings
| Setting | Description | Default |
|---|---|---|
demoTime.recording.captureSaves | When recording a demo, capture file saves as save moves. | true |