Skip to content
Features

Everything in the box

A production-ready email builder with the extensibility, theming, and backend control that real apps need.

Self-contained by design

No Pinia, no global plugin install, no directive registration. Every instance owns its own state, so you can mount multiple independent editors on a single page.

Custom blocks

defineBlock() pairs a Vue render component, an inspector schema, and an email-safe HTML exporter. Pass them via :blocks or register at runtime with api.registerBlock().

15 inspector controls

Compose inspector panels from text, number, slider, color, select, align, spacing, border, font, link, image, background, list, and toggle controls.

Token-based theming

A 28-token --cvee-* system, per-instance light/dark via the theme prop, and overrides that survive even hostile host CSS (e.g. WordPress admin).

Light & dark mode

colorMode of 'light' | 'dark' | 'auto' (auto follows the OS), two-way via v-model:colorMode, plus a built-in theme toggle in the top bar.

Template variables

Insert {{ merge-tag chips in text, heading, and button blocks. Read/write the registry via the API; export keeps {{{name}}} tokens or bakes in fallbacks.

Standalone TextEditor

The same rich-text engine exported on its own — fixed or bubble toolbar, optional variables — with no additional package to install.

Backend-agnostic persistence

storage="none" hands persistence to you. Wire onLoad / onSave / onImageUpload and listen to change / export. The design is plain JSON — store it in one column.

Email-safe export

Table-based HTML with inlined styles, Outlook (MSO) conditional comments, and mobile media queries. Columns stack on small screens.

Customizable top bar

Show/hide actions, rename labels, swap the logo via #header-brand, push buttons via #header-actions, or replace the whole bar with #header.

Import & export

Export email-safe HTML, download or import design JSON, and get a debounced change event (~300ms) for autosave.

Host-CSS hardening

Editor styles are marked !important so a host page can't break the layout; tokens flow to portaled UI and pierce a Shadow DOM boundary.

Released under the MIT License.