Visual editing for HTML and Vue

Designer

Beta

Design with the real DOM, not a picture of it. Edit website pages and the Vue output of app generators visually, then ship the same source.

Roadmap

Where this is going

Canvas is a Figma-style designer that renders real HTML instead of drawing to a canvas element. Because every layer is DOM, a design is already the shipped markup: Tailwind classes, theme tokens and live Vue components included. The canvas and the poster studio run on one editor model: a flat map of components by id, where each component type declares the properties the inspector shows and every edit is an undoable operation. The code view is two-way, so editing the Vue source updates the design. Studio moves onto the same core next, followed by live collaboration.

Complete editors

Tools

Full design apps, ready to open and use. Each one is assembled from the building blocks below, so you can copy its source as the starting point for your own.

Components the tools are made from

Building blocks

Small, focused Vue components. Use one on its own, such as a colour swatch in a settings form, or combine several into an editor of your own.

Assembly guideBuild your own designer →Working Vue examples and assembly documentation for combining these blocks into HTML editors, appearance controls and flowcharts.

Behaviour the tools share

Composables

The advanced behaviour of the Canvas, as composables. DomDesigner and the Social post studio are built from them, so a fix or a feature reaches every editor built on them, yours included.

How they fit together, with a small working editor →

@getdom/studio/designer

Embed the designer

The canvas is the DomDesigner component, so you can put it in your own product. Give it the components people may insert and a storage adapter: this browser by default, your API for a CMS (createHttpStorage), or project files (createFileStorage). The entry also exports the editor core: documents, operations, history, Vue import and export with source maps, and the composables above. It includes the Vue template compiler, so load it only on pages where people design.

vue
<script setup>
import * as studio from '@getdom/studio/vue';
import { DomDesigner, catalogFromExports, createHttpStorage } from '@getdom/studio/designer';

// Every DOM Studio component can be inserted; add your own to the same object.
const catalog = catalogFromExports(studio);
// Keep work in your database: GET and PUT /api/designs/:id with { value }.
const storage = createHttpStorage({ endpoint: '/api/designs' });
</script>

<template>
	<div class="h-dvh">
		<DomDesigner :catalog="catalog" :storage="storage" storage-key="home-page" title="Home page" />
	</div>
</template>

Ownership

A small, composable beta

Use the controls individually or combine them for social cards, banners and other creation tools. Normal HTML layout stays normal HTML. Enable absolute movement only on stages that need it. The host application owns undo, persistence, asset handling and publishing; the beta APIs may change.