Visual canvas
Users edit pages directly in a visual environment, working on the rendered page rather than a description of it.
PageKit — the self-hosted GrapesJS site builder, sold as source. Get early access
Give your users a visual editor for creating responsive pages with editable content, reusable components and customizable styling — without writing HTML and CSS by hand.
26k+
GitHub stars
1.4M+
Monthly downloads
100+
Plugins on GJS.Market
BSD-3-Clause
Core licence
Click any element below, retype it in place, then change how it looks. Nothing here is a preview — the canvas is the page, and the style panel edits the same elements you are reading.
Click an element, then type to edit it
Now in private beta
Every word on this page is editable
Select this paragraph and start typing. Then change its size, colour, alignment and spacing from the panel on the right — exactly the way your users would.
Get started
Styles
Eyebrow
Colour
Alignment
The playground above is ours. These are the real thing — full GrapesJS editors, loaded only when you ask for one so the page stays fast until then.
The stock editor: canvas, blocks, layer tree, style manager and device switcher, with nothing added.
Loads in an iframe from the demo's own site.
WYSIWYG stands for “What You See Is What You Get.” A WYSIWYG editor lets users work with a visual representation of their content instead of editing raw HTML and CSS directly. The page they are looking at while they work is the page they will publish.
Write HTML
Structure, in markup
Write CSS
Appearance, somewhere else
Save and build
Still nothing to look at
Open a preview
First sight of the result
The result arrives at the end, and only a developer can get there.
Open the visual canvas
The page is already there
Edit in place
Type where the text sits
Style visually
Change it and watch it change
See the result
You have been seeing it all along
The result is present at every step, and anyone can get there.
Users can see the page while they build it.
A rich text editor is the right tool for a paragraph. It formats text, handles headings and lists, and manages inline content. A page builder works one level up: on the sections, columns, components, images, buttons, styling and responsive behaviour that make up the page around that text.
| Capability | Rich text editor | WYSIWYG page builder |
|---|---|---|
| Text editing | Yes | Yes |
| Page layout | Limited | Yes |
| Drag & drop | Limited | Yes |
| Components | Limited | Yes |
| Reusable blocks | — | Yes |
| Responsive layouts | Limited | Yes |
| Custom components | Limited | Yes |
| Visual styling | Limited | Yes |
GrapesJS combines visual page editing with an extensible component architecture — and it still contains a rich text editor, because editing a paragraph in place is half of what WYSIWYG means. If your product already uses CKEditor, TinyMCE, Froala or Quill, you can keep it: integrations for each are on GJS.Market.
The building blocks of a visual editing experience, all part of the GrapesJS core rather than something you assemble yourself.
Users edit pages directly in a visual environment, working on the rendered page rather than a description of it.
Content is changed where it appears on the page, so there is no gap between writing and seeing the result.
Blocks and components are moved visually, with drop targets that show where an element will land.
Typography, spacing, colours and layout are controlled through panels instead of stylesheets.
Pages are adjusted per viewport size from inside the editor, without leaving the canvas.
Page elements can be defined once and reused, so a change in one place can propagate everywhere it is used.
Images and other media are managed through an asset manager that you can point at your own storage.
A full command history lets users experiment with layouts without fear of losing work.
Start with a page
The user opens an empty canvas or a template, already rendered as the page it will become.
Add components
Sections, columns, text, images and buttons are dropped onto the canvas from the block panel.
Edit content
Text is retyped in place and images are swapped, directly on the element rather than in a form.
Customize styling
Typography, colour, spacing and layout are changed through the style manager and applied live.
Adjust responsive layout
The device switcher narrows the canvas so the same page can be tuned per breakpoint.
Preview
Editor chrome is hidden so the user sees the page exactly as a visitor will.
Save
The project is written through the Storage Manager to wherever you decide to keep it.
Publish
Your application takes the resulting HTML and CSS and puts it live through your own pipeline.
The same visual editing engine sits underneath very different products. These are the shapes it takes most often.
Let users create complete websites visually, with multiple pages and shared components.
Open-source page builderBuild conversion-focused landing pages without coding, from blocks a marketer can rearrange.
Landing page builderGive editors visual control over page layouts instead of a form that renders into a fixed template.
Headless CMS editorAdd visual page editing directly to your application as a feature your customers use.
SaaS page builderLet marketers create and update pages without a developer in the loop for every change.
No-code builder for developersGive clients controlled visual editing, with the parts you do not want touched locked down.
White-label page builderVisual editing is usually requested by one team and built by another. These are the people on both ends of that conversation.
Build on top of an extensible editing engine instead of writing selection, dragging and undo from scratch.
Add visual page creation as a product feature, on your own roadmap and inside your own application.
Replace a form-and-preview content flow with an editing experience people actually enjoy using.
Give non-technical users visual control over pages, so shipping a change does not need a release.
Add visual editing to an existing content system without replacing the content model underneath it.
Build reusable visual editing workflows and hand clients a version that is branded as yours.
Out of the box the editor knows about text, images, buttons and sections. What makes it feel native to your application is teaching it about the objects your application already has.
01
Text, image, button, section — the generic building blocks every page needs, available immediately.
02
The same primitives with your constraints applied: which ones can be dragged, nested, deleted or edited, and which traits appear in the settings panel.
03
Types you define yourself — a product card, a pricing table, a booking widget, a map, a form, a custom call to action — each backed by your own data and rendered by your own code.
The examples on the third rung are components you would build for your own product, not plugins available for download. GrapesJS gives you the component API; what the component knows about is up to you.
Preview and adjust your layouts across viewport sizes while working inside the visual editor, rather than publishing and checking on a phone.
Per-viewport controls
Devices are configurable: the three above are the defaults, and you can define whichever breakpoints your design system actually uses. Styles set on a narrower device apply from that breakpoint down.
GrapesJS provides the visual editing layer. Everything around it — users, permissions, data, storage and publishing — stays inside the application you already run.
Your application
Your infrastructure
If the question is specifically how to mount the editor inside an existing product, that walkthrough has its own page. Embeddable page builder
Build the editor around your existing application architecture instead of moving your content into a separate hosted platform.
Where a page goes
const editor = grapesjs.init({
container: '#editor',
// Each page is a row in your database, behind your own auth.
storageManager: {
type: 'remote',
autosave: true,
options: {
remote: {
urlStore: `/api/pages/${pageId}`,
urlLoad: `/api/pages/${pageId}`,
fetchOptions: { credentials: 'include' },
},
},
},
});
// Publishing stays on your side — your domains, your CDN, your workflow.
async function publish() {
await fetch(`/api/pages/${pageId}/publish`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ html: editor.getHtml(), css: editor.getCss() }),
});
}GJS.Market sells plugins; it does not host your editor, store your pages or run your database. The Storage Manager points at whatever endpoint you give it, behind your own authentication.
A visual editor looks like one feature and turns out to be a dozen subsystems, each of which has to work before any of it feels finished.
What a WYSIWYG editor is made of
From scratch
All of it
With GrapesJS
Start here
This is a comparison of scope, not of schedule — how long an editor takes to build depends on your team and how much of it you actually need. Build your product, not another editor from scratch.
A blank canvas is the hardest thing to hand a non-technical user. Starting layouts give them something to change instead of something to invent.
Layouts users ask for
These are the kinds of layout a builder's users ask for, not product listings. Ready-made starting points ship as presets on GJS.Market.
Everything below is a real listing on GJS.Market, with its live name and price. Each group also links its category, so there is always more than what fits here.
Editing text where it sits is half of WYSIWYG. Swap the built-in editor for the one your product already uses.
Browse this categoryReplaces the built-in rich text editor with CKEditor 5, editing in place on the canvas.
Brings TinyMCE 6 to the canvas for teams already standardized on it.
Extends the default toolbar with the formatting actions the stock one leaves out.
Give the style panel better controls: colour pickers, real fonts and precise spacing.
Browse this categoryA proper colour picker, including gradients, inside the style manager.
Adds your own font families to the typography controls.
Makes margin and padding adjustable by dragging on the canvas.
Specialized editable components, including elements reused across many pages.
Browse this categoryAdditional media functionality — uploads, hosting and in-editor image editing.
Browse this categoryFour starting combinations, each aimed at a different kind of product. Every plugin listed is a real listing with its live price.
The smallest thing that still feels like a page builder
Open-source page builderEditors managing many pages of existing content
Headless CMS editorVisual editing as a feature of your product
Marketers shipping landing pages without a developer
Prices come straight from the catalogue and can change; the product page is authoritative.
Edit
The user works on the canvas; the editor holds the page as structured project data.
Save
The Storage Manager sends that data to your endpoint, on autosave or on demand.
Preview
Editor chrome is hidden, or the page is rendered through your own preview route.
Publish
Your application exports HTML and CSS and moves it into your delivery pipeline.
Live page
The page is served from your infrastructure, on your domain, under your caching rules.
Connect the editor to your own publishing workflow and infrastructure. GrapesJS produces the page; deciding what “live” means is your application's job.
The core is one npm package and one container element. Everything after that is deciding how much of the editor your users should see.
npm install grapesjsimport grapesjs from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';
// The visual canvas. Everything the user sees here is the page itself,
// not a preview of it.
const editor = grapesjs.init({
container: '#editor',
// The panels that make the editing visual rather than textual.
styleManager: { appendTo: '#styles' },
deviceManager: {
devices: [
{ id: 'desktop', name: 'Desktop', width: '' },
{ id: 'tablet', name: 'Tablet', width: '768px' },
{ id: 'mobile', name: 'Mobile', width: '375px' },
],
},
});Inline editing and a component that knows your rules — the two pieces that turn a canvas into a WYSIWYG editor for your product:
// "What you see is what you get" starts with editing text where it
// already sits. GrapesJS ships an inline rich-text editor, and you can
// replace it with whichever one your product already uses.
editor.setCustomRte({
enable(el, rte) {
el.contentEditable = true;
return rte;
},
disable(el) {
el.contentEditable = false;
},
});
// A component decides what the user is allowed to change visually.
editor.DomComponents.addType('quote', {
model: {
defaults: {
// Editable in place, but the frame around it stays yours.
editable: true,
droppable: false,
traits: ['author', 'source'],
},
},
});That is the whole surface: initialize, extend, store, publish. The documentation covers each manager in depth.
The core is framework-agnostic; these pages cover mounting it inside a specific one.
The core with no wrapper — a container element and an init call.
HTML builderThe official wrapper, so the editor lives inside your component tree.
GrapesJS React integrationClient-only mounting, since the editor needs a real DOM.
GrapesJS Next.js integrationMounting the editor from a Vue component's lifecycle hooks.
GrapesJS with VueWiring the editor into an Angular component and its change detection.
GrapesJS with AngularStart with an open-source visual editing foundation and extend it around your product requirements.
The GrapesJS core is released under the BSD-3-Clause licence. The official React wrapper is MIT.
There is no per-seat or per-page charge for the editor itself — $0 to the library, whatever you choose to pay for plugins.
The editor runs in your application. There is no service to depend on and nothing that can be switched off from outside.
Star and download figures were last verified on 2026-09-03 against the GitHub and npm APIs.
Neighbouring pages for the questions this one only touches on.
The gesture itself: block palettes, drop targets and what happens between picking something up and putting it down.
Read moreHow to mount the editor inside an existing product, including iframes, routing and auth.
Read moreThe business case for adding a builder to a SaaS, and how teams package it.
Read moreMaking the editor look like your product rather than someone else's library.
Read moreStart with GrapesJS, customize the editing experience and add the plugins your product needs.
Install the core, mount it on a container and have a working visual editor in front of you today.
Start BuildingInline editors, styling controls, blocks, assets, storage and templates — real listings, real prices.
Browse PluginsTell us what the editor has to do inside your product and we will scope building it with you.
Talk to us