Bob: AI assistant
One prompt builds a page. The same conversation then keeps editing it, and writes the design tokens, page scripts, DocTypes and form wiring that go with it.
bob-aurelle-jewellery.mp4
Editing works through the same conversation. Select a block on the canvas and it joins as context.
bob-edit-cycle.mp4
- Build a full page from a prompt, streamed into the canvas as it is written, against a design system it mints first
- Edit surgically or page-wide, with the blocks you select on the canvas as context
- Style by token, so a retheme is a token edit rather than a rebuild
- Script a page, CSS and JavaScript kept as separate page scripts
- Wire data: inspect the site's DocTypes, propose new ones, seed sample rows, write the page's data script, and connect a form so submissions actually save
- Read the site as reference, and research facts online, so a new page follows the design language already there
- Look at its own work: screenshot the draft and review it before finishing
Anything sensitive (a new DocType, sample data, the home page, global code, form wiring) stops and asks first. Every turn leaves a trail you can open, with a revert for that turn alone.
Settings → AI walks through connecting a provider. Presets ship for OpenRouter, Anthropic, OpenAI, ChatGPT (through a Codex subscription rather than a key) and Google Gemini, plus a custom option for any OpenAI-compatible gateway.
Design tokens
Builder Variable is now Builder Token, with Font and Dimension tokens alongside colours. Token doc names are untouched, so existing var(--id) references keep resolving, and a patch migrates existing sites.
design-tokens-demo.1.mp4
The Design System manager gets Colors, Fonts and Dimensions tabs, with light and dark values, search, and per-row copy of the var(--id) handle.
Font tokens render as type specimens, and Typography lists them first:
Editing one token rethemes every block bound to it:
Focus point for images
Adjusting an image's crop meant hand-typing object-position. The image popover is now a small card: fit tabs (Fill & crop / Fit / Stretch), a preview that doubles as a focal-point picker for cover fits (drag the dot, the crop follows live on the canvas), and a zoom slider that crops in around the focal point. Blocks with a cover background image get the same picker in the Background popover.
focus-point-demo.mp4
Editor performance
Two memory leaks, measured on a real 743 KB page:
| Before | After | |
|---|---|---|
| DOM nodes after 20 select/copy/delete/paste cycles | +56,420 | +0 |
| Event listeners, same run | +12,633 | +0 |
| Heap kept by undo history after 120 edits | +185.6 MB | +41.6 MB |
| Undo stack ceiling on this page | ~775 MB | 20 MB |
CodeMirror views are now destroyed on unmount. Selecting any block with innerHTML opens that editor on the block's source, so every selection used to leave another one behind, still watching the selection. Canvas history is now bounded by bytes as well as entry count, and it no longer holds a reference to the live selection, which made undo restore the wrong blocks.
Oversized inline SVGs can also move out of the page and become files, on paste or from the HTML Options panel. On that same page it cut the autosave payload from 767 KB to 104 KB.
Translatable UI
The editor is translatable end to end: user-facing strings are wrapped, translations are served from boot data, and 35 language catalogs are synced from Crowdin.
Editor improvements
The font picker previews fonts in their own typeface, in the dropdown rows, the field itself, and the design token rows.
now.mp4
The colour picker surfaces recently used colours. The last 8 persist across every picker in the tab, with the static palette backfilling unused slots.
Now.color.palette.mp4
Published status is now glanceable, on dashboard grid cards and next to the page title in the editor toolbar.
v2.mp4
Gap can be split per axis, row and column, in the Flex and Grid panels.
After.mp4
Client scripts show how many pages use them, and clicking through opens the list.
Also in the editor:
- Pasting a page brings its images and fonts into the site with it
- Stored images are capped at 2048px on the long edge
- The dashboard sidebar, tabs and analytics empty states are rebuilt on frappe-ui
- The editor UI is extendible through registries for property sections and settings panes
- Settings panes warm while the editor idles
Fixes and maintenance
- Repeaters with an empty data key render as a plain container instead of failing
builder_filesstays in sync when pages and scripts are renamed or deleted- The site analytics chart works again under echarts 6
- Autocomplete lists stay full while filtering, and collapse instead of showing a blank sliver
- The bubble menu stays open while the colour picker popover is active
- Search reports the number of blocks changed, not a replacement count
- All open Dependabot alerts cleared, plus vite 8, prettier 3 and vitest 4
Full diff: v1.32.0...v1.33.0



