BuilderJS

Add a Visual Builder to Your SaaS Product

Your users want a drag-and-drop editor inside your product — for email templates, landing pages, or onboarding content. Building one from scratch is a multi-quarter project nobody asked your roadmap to absorb. BuilderJS is the embeddable editor you drop in instead. It's a framework-agnostic, vanilla-JS library (~140KB) that mounts in any DOM node — React, Vue, Svelte, Angular, Next.js, Laravel, or plain HTML — and builds both HTML email and web/landing pages from the same canvas. Everything is JSON-first: getData() and load() give you lossless round-trips, so persistence stays inside your stack. It's multi-tenant capable — instances are closure-captured, while your app keeps ownership of tenant isolation, seats, and billing. To be clear about scope: BuilderJS is the editor your users design in. It produces the template or markup; you bring the sending, hosting, and ESP. One-time CodeCanyon license, full source, self-hosted — no monthly platform bill scaling with your user count.

Embed it where your users already work

BuilderJS is a DOM-mount bundle — dist/builder.js plus dist/builder.css — not a published npm React or Vue component. You mount it client-side wherever your UI lives: in useEffect for React, onMounted for Vue, ngAfterViewInit for Angular, or onMount for Svelte. In Next.js, use a dynamic import with ssr:false inside a 'use client' component, since the editor is browser-only. Persistence is entirely yours: call getData() to capture the design as JSON, POST it to your own route, and call load() to restore it. Because the surface is plain DOM mounting, it slots into whatever frontend your SaaS already ships without forcing a framework migration or a new build pipeline. Try the live editor at builder.emotsy.com to see the canvas before you wire anything up.

Two outputs, one editor: email and pages

Most SaaS products end up needing both — transactional/marketing email templates and customer-facing landing or onboarding pages. BuilderJS covers both from one canvas with 42 element types, 59 controls, and 31 overlays. Its dual export gives you clean page HTML or Outlook-safe email HTML through the EmailExportPipeline, which converts flexbox to tables, rasterizes SVG to PNG, adds @media mobile-stacking, MSO conditionals, and inlines CSS. The library ships 30+ templates and 200+ samples that have been Litmus-tested across 22 clients, so your users start from layouts that already render. BuilderJS builds the markup — your application still owns delivery: you plug the exported email HTML into your ESP and the page HTML into your hosting.

Multi-tenant capable, your rules

BuilderJS is built to run inside a multi-tenant product. Each editor instance is closure-captured, so you can scope save endpoints, asset directories, and AI hooks per tenant. What it deliberately does not do is decide your tenancy model — your app remains the source of truth for tenant isolation, seat limits, and billing. That separation is the point: you embed a finished editor and keep full control over who can use it and how it's metered, rather than inheriting a vendor's seat or session accounting. Pluggable, vendor-neutral AI hooks let you wire in your own model provider if you offer AI-assisted authoring, with no provider locked in.

Own the source — no per-seat, no usage metering

Embeddable-editor SaaS products are typically priced as recurring platform fees that grow with your usage. As of June 2026, Unlayer lists a free plan plus paid tiers at $250/month (Launch), $750/month (Scale), and $2,000/month (Optimize) (unlayer.com/pricing), and GrapesJS Studio SDK lists a free tier capped at 1,000 sessions per month plus paid plans at $200/month for 20,000 sessions and $2,000/month for 50,000 sessions (grapesjs.com/sdk/pricing) — verify current figures on each vendor's page. BuilderJS is the opposite model: a one-time CodeCanyon purchase (item 27146783) at $52 for the Regular license or $99 for Extended. You own and self-host the source — no SaaS subscription, no per-seat charge, no usage metering, no phone-home. Author support is time-boxed (roughly 6–12 months), but the code is yours to keep and extend indefinitely.

Extend it without forking

Your product has opinions, and BuilderJS lets you encode them without touching the core. Register custom Elements, Widgets, and Controls through Builder.registerElement, ship your own themes, and localize the UI with built-in i18n across 20+ locales including RTL. For persistence and uploads, BuilderJS includes reference PHP backends covering MySQL, SQLite, and S3 save, upload, and auth — these are reference implementations you copy and own, and you can port the same contract to Node, Go, or Python to match your existing stack. Because extension happens through documented registration APIs rather than patching the bundle, you can take library updates without re-applying a fork.

Frequently asked questions

Explore