A Svelte 5/SvelteKit visual page builder designed to be embedded into other Svelte applications. It provides an Elementor-style editing experience while keeping persistence, media storage, auth, dynamic data, and AI provider settings owned by the host app.
The reference studio includes the full editing shell: canvas preview, left inspector, structure navigator, responsive/status controls, import tools, AI actions, draft/publish states, and host-owned page context.
Watch the simple editing workflow demo
Selected containers expose compact canvas controls, layout context, action rails, and resize/layout affordances without requiring the user to leave the visual surface.
The AI create dialog accepts a prompt, target location, style preference, theme options, and expandable context before generating HTML/CSS through an OpenAI-compatible provider.
While AI is generating, the full dialog collapses to a compact progress window and the canvas shows an HTML preview placeholder/stand-in for streamed output before it is parsed into editable Builder nodes.
Watch the Create with AI realtime preview demo
This is a pnpm monorepo.
apps/
reference-studio Demo/editor development app
embed-smoke-host Minimal host app proving public SDK embedding
packages/
schema Project, document, node, style, media, and revision schemas
core Editor engine, mutations, history, selection, persistence state
plugin-api Element registry, controls, default widget definitions
runtime-svelte Published/runtime rendering and CSS compilation
editor-svelte Svelte editor UI, controller, import, AI, media, SDK helpers
elementor-import Elementor JSON conversion
adapter-sveltekit SvelteKit integration helpers
Install dependencies:
pnpm install
Run the reference studio:
pnpm dev
Run checks and tests:
pnpm check
pnpm test
pnpm test:e2e
Run the embedding validation gate:
pnpm embed:validate
Host apps should import from package roots only:
import { BuilderCanvas, createBuilderHostSdk } from '@builder/editor-svelte';
import { BuilderRenderer, renderPublishedDocument } from '@builder/runtime-svelte';
import { createSvelteKitBuilderIntegration } from '@builder/adapter-sveltekit';
import { createBuilderHostAdapter } from '@builder/plugin-api';
Do not import internal files such as @builder/editor-svelte/src/lib/....
The host app owns:
See docs/sdk-embedding.md for the full integration guide.
The importer accepts Elementor-style JSON payloads and converts supported structures, widgets, layout, spacing, backgrounds, borders, responsive styles, hover states, IDs, classes, media references, and diagnostics into Builder documents.
Unsupported but visually important styles are preserved where possible as scoped custom CSS, with warnings/parity gaps surfaced to the user.
The HTML importer accepts full HTML documents or fragments, extracts style blocks and inline styles, scopes imported CSS, and converts common tags into editable Builder nodes:
main, section, article, header, footer, nav, divh1-h6, pimghtml nodes for complex or unknown markupThe AI assistant supports OpenAI-compatible /chat/completions endpoints, including custom endpoints such as OpenRouter, Gemini-compatible gateways, local providers, and OpenAI-compatible proxies.
Current AI flows:
API keys are stored through the configured host/browser settings adapter and are not saved into project JSON.
Dynamic values can drive:
The builder ships host-agnostic provider definitions inspired by common CMS/site/product fields. Real data resolution stays in the host adapter.
Use apps/embed-smoke-host as the confidence fixture for real integrations. It demonstrates:
Before embedding in a production app:
pnpm embed:validate,