The Visual Website Builder
You Actually Own. React + Next.js, low-code, self-hosted. Your data, your infrastructure, every feature included.
© ChaiBuilder. All rights reserved.

Released 2026-08-14. Upgrading from v0.3.2.
The largest release since the plugin architecture landed in v0.2.0, and ten days of work rather than the usual two. Three things carry it: repeater data becomes a real, declarative data source with filters and sorting, block variants and design tokens reach custom blocks, and a long run of SEO and JSON-LD regressions is repaired.
Read the breaking group before upgrading. Two feature flags are gone, one pipe is gone, and one theme property is gone.
bulkPublish and exportCode feature flags are removed. Both features are now
client plugins, matching how every other optional surface is registered since v0.2.0.
Delete the flags from your server config and register the bulk publish client plugin and
the export code client plugin instead. An unchanged config leaves both features missing
from the builder rather than failing loudly, so check the publish dropdown and the block
action menu after upgrading.money pipe is removed. Use currency, which covers formatted amounts and takes
a currency code. Any binding still calling money renders empty. See
Pipes.logos property and its theme type are removed from the editor props. Logos were
never read by the render path. Move them into your own site settings.repeaterData server config key replaces collections
with a declarative definition: a source, the filters an editor may apply, the sort
options, and a limit. The builder renders real filter and sort controls against that
definition instead of the free text it used to accept, and filter values can themselves
be data bindings, so a repeater can filter by something on the current page. The old
collections key still works and is deprecated, including its two spellings of the
collection type. See Data Providers.or falls back on any falsy value, where default only covers null,
undefined and empty; notEmpty is the boolean inverse of empty, for conditional
visibility; and telephone formats ten digit North American numbers and leaves anything
else untouched.$cacheTags extended to
page type data providers, so a page invalidates when the data behind it changes rather
than on a timer. See
Caching and Revalidation.analyzeChaiBindings, suggestChaiBindingConversion and applyRepeaterQuery are
exported for tooling that needs to inspect or migrate bindings.</script> could
break out of the JSON-LD block and inject markup into the page. All rendered JSON-LD is
escaped now.The SEO and metadata cluster, all of which affected published pages:
Elsewhere:
money pipe, the bulkPublish and exportCode feature flags, and the theme logos
property. See Breaking above.features.bulkPublish and features.exportCode from your server config.money pipe and replace it with currency. A binding
calling a removed pipe renders empty, and nothing warns you in production.logos value off the editor props and into your own site settings.collections still works. Migrating to repeaterData is worth doing for the filter
and sort controls, but it is not required by this release.