Embed in any stack
Run the editor as a standalone iframe app and drive it from React, Vue, Svelte, or plain HTML — your host never imports the editor.
Drop a full page editor into any app over a tiny client — no framework lock-in in your host.

This is the actual editor running in an iframe, driven by the embed client — exactly the integration shown in the docs.
No editor code in your bundle — just an iframe and a typed postMessage client.
import { createUframeEditor } from '@dremchee/uframe/embed'
const editor = createUframeEditor({
target: document.querySelector('#editor'),
src: '/uframe/index.html',
document: page,
onSave: doc => persist(doc),
})uframe is the editor you embed in your own app — you own the data, the backend, and the experience around it.
Add an in-app page/content builder to a SaaS, CMS, or landing tool — embed it over the tiny client and host on any stack.
Extend the editor with your own blocks, plugins, toolbar buttons, and sidebar panels by importing the Vue component.
Offer white-label editing — rebrand the chrome with theme tokens, kept isolated behind the iframe boundary.
An isolated iframe, a typed message channel, and plain JSON out.
createUframeEditor() drops an isolated editor app into any element — vanilla JS, no framework required on the host.
Pass a document, theme and readonly in; a tiny typed protocol keeps the host and the editor in sync both ways.
Receive change / save callbacks carrying a plain PageDocument JSON. Persist it to any backend you like.
Embed-first, but not embed-only — pick the path that fits your host.
uframe/embedMount an iframe and drive it over a tiny typed postMessage protocol. Any host stack, full isolation, nothing heavy in your bundle.
<PageEditor>Import the editor directly when you need to register custom blocks, plugins, and panels. Pulls Vue into your bundle.
Design templates that bind to collection fields, then resolve them to static JSON on your server.

Build the page visually with blocks — once, then reuse it across every record.

Point blocks at collection fields with Data List / Data Item. The document stays pure design + bindings — no content baked in.

resolveDocument() merges your data on the server. Bring Directus, Strapi, Payload — or any source.
Embed it over a tiny client, keep your stack, own your data.