Embed the editor
The full editor, chat included. Nothing to build — mount it and you're done.
init({ id, sessionToken,
chatEnabled: true })You own: a div.
npm or CDN · TypeScript types · no runtime dependencies
Welcome aboard.
You're in. Set up your workspace in two minutes and invite your team whenever you're ready.
Get started<div> in your app. You style it, you own the data, and your users never see our name.Three ways in
The same package covers all three. Start at the top and move down when you want more control.
The full editor, chat included. Nothing to build — mount it and you're done.
init({ id, sessionToken,
chatEnabled: true })You own: a div.
Keep your interface and your product's voice. Stream drafts into it over server-sent events.
editor.chat(msg, {
onReplyChunk })You own: the chat UI.
No chat at all. Wire any input in your app straight to the editor and apply the result.
editor.chatAndApply( 'make the CTA bigger')
You own: the trigger.
MCP
Point Claude Desktop, Cursor, or VS Code at the Dezignee MCP servers — scaffold the embed, inspect a workspace, or edit a live email straight from your agent.
Setup & inspection
For Cursor and VS Code. Detects your stack, scaffolds the embed component and init() config, and reads a workspace without changing anything.
detect_projectinstall_bridgecreate_embed_componentconfigure_initworkspace_overviewdiagnosticsDesign & commands
For Claude Desktop. Suggests copy, layout, and styles, then emits the same typed commands your editor does — versioned, and undoable.
suggest_copysuggest_layoutsuggest_stylesgenerate_commandsapply_commandsFeels like yours
Pass CSS variable overrides plus light, dark, or system. Change them at runtime with setTheme() — no reload, no re-init.
Give us upload, delete, and list callbacks and every image goes to your bucket. Nothing touches ours.
Your backend mints short-lived session tokens from a key that never enters the browser. Expired tokens refresh in place.
Quickstart
Install. One package, no peer dependencies to reconcile.
Mint a session server-side from your API key, so the key stays out of the browser.
Mount it into any element and export email-safe HTML whenever you publish.
import { init } from 'dezignee-plugin'
const editor = await init({
id: 'editor',
sessionToken, // minted by your server
chatEnabled: true,
theme: { '--primary': '#6366f1' },
})
// email-safe HTML on publish
const { results } = await editor.exportHTML({ mode: 'single' })Included
Everything below ships inside the embed. You don't design it, build it, or maintain it against a decade of email clients.
Start with the quickstart, or talk to an engineer about your integration.