PageKit — the self-hosted GrapesJS site builder, sold as source. Get early access

WYSIWYG page builder

Build a WYSIWYG Page Builder with GrapesJS

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.

Open sourceSelf-hostedExtensibleCustomizable

26k+

GitHub stars

1.4M+

Monthly downloads

100+

Plugins on GJS.Market

BSD-3-Clause

Core licence

Try it

See WYSIWYG Editing in Action

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.

your-app.com/editor

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 real editor

This Is GrapesJS, Not a Mock-Up

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.

Open in a new tab

The stock editor: canvas, blocks, layer tree, style manager and device switcher, with nothing added.

grapesjs.com/demo.htmlFree

Loads in an iframe from the demo's own site.

The concept

What Does WYSIWYG Mean?

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.

Traditional code editor

  1. Write HTML

    Structure, in markup

  2. Write CSS

    Appearance, somewhere else

  3. Save and build

    Still nothing to look at

  4. Open a preview

    First sight of the result

The result arrives at the end, and only a developer can get there.

WYSIWYG page builder

  1. Open the visual canvas

    The page is already there

  2. Edit in place

    Type where the text sits

  3. Style visually

    Change it and watch it change

  4. 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.

The difference

More Than a Rich Text Editor

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.

CapabilityRich text editorWYSIWYG page builder
Text editingYesYes
Page layoutLimitedYes
Drag & dropLimitedYes
ComponentsLimitedYes
Reusable blocksYes
Responsive layoutsLimitedYes
Custom componentsLimitedYes
Visual stylingLimitedYes

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.

Capabilities

Everything You Need for Visual Page Editing

The building blocks of a visual editing experience, all part of the GrapesJS core rather than something you assemble yourself.

Visual canvas

Users edit pages directly in a visual environment, working on the rendered page rather than a description of it.

Inline editing

Content is changed where it appears on the page, so there is no gap between writing and seeing the result.

Drag & drop

Blocks and components are moved visually, with drop targets that show where an element will land.

Styling

Typography, spacing, colours and layout are controlled through panels instead of stylesheets.

Responsive editing

Pages are adjusted per viewport size from inside the editor, without leaving the canvas.

Reusable components

Page elements can be defined once and reused, so a change in one place can propagate everywhere it is used.

Assets

Images and other media are managed through an asset manager that you can point at your own storage.

Undo & redo

A full command history lets users experiment with layouts without fear of losing work.

Workflow

From Blank Canvas to Published Page

  1. 1
    01

    Start with a page

    The user opens an empty canvas or a template, already rendered as the page it will become.

  2. 2
    02

    Add components

    Sections, columns, text, images and buttons are dropped onto the canvas from the block panel.

  3. 3
    03

    Edit content

    Text is retyped in place and images are swapped, directly on the element rather than in a form.

  4. 4
    04

    Customize styling

    Typography, colour, spacing and layout are changed through the style manager and applied live.

  5. 5
    05

    Adjust responsive layout

    The device switcher narrows the canvas so the same page can be tuned per breakpoint.

  6. 6
    06

    Preview

    Editor chrome is hidden so the user sees the page exactly as a visitor will.

  7. 7
    07

    Save

    The project is written through the Storage Manager to wherever you decide to keep it.

  8. 8
    08

    Publish

    Your application takes the resulting HTML and CSS and puts it live through your own pipeline.

Use cases

What Can You Build?

The same visual editing engine sits underneath very different products. These are the shapes it takes most often.

Audience

Who Needs a WYSIWYG Page Builder?

Visual editing is usually requested by one team and built by another. These are the people on both ends of that conversation.

Developers

Build on top of an extensible editing engine instead of writing selection, dragging and undo from scratch.

SaaS teams

Add visual page creation as a product feature, on your own roadmap and inside your own application.

Product teams

Replace a form-and-preview content flow with an editing experience people actually enjoy using.

Marketing teams

Give non-technical users visual control over pages, so shipping a change does not need a release.

CMS developers

Add visual editing to an existing content system without replacing the content model underneath it.

Agencies

Build reusable visual editing workflows and hand clients a version that is branded as yours.

Custom components

Make the Editor Understand Your Product

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.

  1. 01
  2. 02
  3. 03
  4. Extend the editor with components that match the objects, content and workflows of your application.

01

Standard components

Text, image, button, section — the generic building blocks every page needs, available immediately.

02

Configured components

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

Your components

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.

Responsive

Build Responsive Pages Visually

Preview and adjust your layouts across viewport sizes while working inside the visual editor, rather than publishing and checking on a phone.

DesktopFull width
Tablet768px
Mobile375px

Per-viewport controls

  • Device switcher
  • Breakpoint styles
  • Visibility
  • Spacing
  • Typography scale

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.

Architecture

How a WYSIWYG Page Builder Fits Into Your Product

GrapesJS provides the visual editing layer. Everything around it — users, permissions, data, storage and publishing — stays inside the application you already run.

Your application

  • Users & auth
  • Your UI
  • Permissions

GrapesJS editor

  • Content
  • Layout
  • Styling
  • Blocks
  • Components
  • Plugins
Browse plugins

Your infrastructure

  • Your API
  • Your database
  • Your publishing
The editor hands your application a project: the page's structure, its styles and its assets. What happens next — where it is stored, who may edit it, how it goes live — is entirely your side of the line.

If the question is specifically how to mount the editor inside an existing product, that walkthrough has its own page. Embeddable page builder

Your data

Keep Your Content in Your Own Infrastructure

Build the editor around your existing application architecture instead of moving your content into a separate hosted platform.

Where a page goes

  1. WYSIWYG editor
  2. Project data
  3. Your API
  4. Your database
  5. Your publishing workflow
Remote storageJS
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.

Build vs buy

Build a WYSIWYG Editor From Scratch?

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

  • Canvas
  • Selection
  • Inline editing
  • Drag & drop
  • Components
  • Blocks
  • Styling
  • Responsive controls
  • Assets
  • Undo & redo
  • Storage
  • Export
  • Publishing
  • Maintenance

From scratch

All of it

  • You implement every subsystem above
  • You own every browser bug in the canvas
  • You maintain it for as long as the product lives
  • None of it is the thing you set out to build

With GrapesJS

Start here

  • Visual canvas, components and blocks
  • Style Manager, assets and pages
  • Storage APIs and export
  • Plugins and your own custom extensions

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.

Templates

Don't Start With a Blank Canvas

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

  • SaaS
  • Startup
  • Agency
  • Business
  • Portfolio
  • Landing page
  • Ecommerce

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.

Ecosystem

Extend Your WYSIWYG Page Builder

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.

Components

Specialized editable components, including elements reused across many pages.

Browse this category
Stacks

Build the WYSIWYG Experience You Need

Four starting combinations, each aimed at a different kind of product. Every plugin listed is a real listing with its live price.

Prices come straight from the catalogue and can change; the product page is authoritative.

Publishing

From Visual Editing to Production

  1. 1
    01

    Edit

    The user works on the canvas; the editor holds the page as structured project data.

  2. 2
    02

    Save

    The Storage Manager sends that data to your endpoint, on autosave or on demand.

  3. 3
    03

    Preview

    Editor chrome is hidden, or the page is rendered through your own preview route.

  4. 4
    04

    Publish

    Your application exports HTML and CSS and moves it into your delivery pipeline.

  5. 5
    05

    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.

Quick start

Start Building a WYSIWYG Editor

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 grapesjs
editor.jsJS
import 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:

components.jsJS
// "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'],
    },
  },
});
  1. Add the components your product needs
  2. Customize the styles and the editor UI
  3. Configure storage against your own API
  4. Connect publishing to your pipeline
  5. Extend with plugins where it saves you time

That is the whole surface: initialize, extend, store, publish. The documentation covers each manager in depth.

Frameworks

Use GrapesJS With Your Stack

The core is framework-agnostic; these pages cover mounting it inside a specific one.

Open source

Built on Open Source

Start with an open-source visual editing foundation and extend it around your product requirements.

BSD-3-Clause licensed

The GrapesJS core is released under the BSD-3-Clause licence. The official React wrapper is MIT.

No platform fee

There is no per-seat or per-page charge for the editor itself — $0 to the library, whatever you choose to pay for plugins.

Self-hosted by default

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.

Related

Related Solutions

Neighbouring pages for the questions this one only touches on.

FAQ

WYSIWYG Page Builder Questions

Get started

Build Your Own WYSIWYG Page Builder

Start with GrapesJS, customize the editing experience and add the plugins your product needs.

Do it yourself

Start Building

Install the core, mount it on a container and have a working visual editor in front of you today.

Start Building
Extend it

Browse Plugins

Inline editors, styling controls, blocks, assets, storage and templates — real listings, real prices.

Browse Plugins
Done for you

Need Custom Development?

Tell us what the editor has to do inside your product and we will scope building it with you.

Talk to us