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

Drag-and-drop page builder

Build a Drag-and-Drop Page Builder with GrapesJS

Give your users a visual editor for building web pages with drag-and-drop components, reusable blocks and responsive styling — without building the editor infrastructure from scratch.

Open SourceSelf-hostedExtensibleCustomizable

26k+

GitHub stars

1.4M+

Monthly npm downloads

100+

Plugins on GJS.Market

BSD-3-Clause

Core license

Try it

Try the Drag-and-Drop Editor

Drag a block from the palette into the canvas — or tap a block, then tap the canvas. Edit the text in place, adjust spacing and radius, and switch the viewport to see the layout adapt. This is a model of the interaction; the real GrapesJS editor is one section below.

Blocks

Drag a block in — or tap a block, then tap the canvas.

Ship pages, not tickets

Click this text and type over it.

What you get

Three columns on desktop, one on mobile.

The real thing

…and here is GrapesJS itself

Three public GrapesJS builds, loaded only when you ask for one — nothing is fetched until you click.

Open in a new tab

The stock GrapesJS demo: block palette on the right, canvas in the middle, style manager and layer tree. Everything you see here is in the open-source core.

grapesjs.com/demo.htmlFree

Loads a third-party demo in an iframe. Nothing is requested until you click.

The loop

Drag. Drop. Design. Publish.

One page, start to finish

  1. Choose a block
  2. Drag into canvas
  3. Customize
  4. Preview
  5. Save
  6. Publish
Capabilities

What the editor already does

Six subsystems that ship with the core, and that your users experience as one gesture.

Drag & Drop

Move blocks and components directly onto the canvas, and reorder them once they are there.

Visual Editing

Edit content and styles on the page itself — typography, spacing, colour and background, without a stylesheet.

Responsive Design

Adapt layouts for different screen sizes using the editor's device manager and breakpoints.

Reusable Components

Build sections once and reuse them across pages, so a change in one place lands everywhere.

Assets

Manage images and other media through the Asset Manager, pointed at whatever storage you already use.

Publishing

Connect the editor to your own publishing workflow — GrapesJS hands you HTML and CSS, you decide what happens next.

Every one of these is a subsystem you would otherwise design, build and maintain yourself.

Why GrapesJS

Why Build Your Page Builder with GrapesJS?

GrapesJS is a self-hosted, open-source editor framework rather than a hosted builder product. That distinction is the whole reason it fits inside someone else's application.

Open Source

Start from an open-source editor foundation. The core publishes as BSD-3-Clause and the official React wrapper as MIT — both permit commercial use, with no licence fee.

Self-hosted

The editor runs inside your own infrastructure. No editor vendor sits between you and your users, and nothing leaves your stack unless you send it.

Extensible

Create custom blocks, component types, commands and panels. The plugin API is the same one the ecosystem's own plugins are written against.

Customizable

Replace panels, restyle the chrome, or drive the editor entirely from your own UI. The interface is not fixed — the demos above prove it.

Your Backend

The Storage Manager talks to your endpoints. Projects, pages, assets and users stay in your database, under your auth.

Plugin Ecosystem

Extend the editor with plugins from GJS.Market and npm instead of writing every capability yourself.

Use cases

What Can You Build?

The same editor core underneath, configured for a different job each time.

Who it's for

Who Needs a Drag-and-Drop Page Builder?

Different reasons for wanting one, same problem underneath: page creation should not require a developer every time.

SaaS Teams

Add page creation as a product feature customers can use without leaving your app.

Website Platforms

Build your own visual editing experience rather than reselling someone else's.

CMS Developers

Put a visual layer on top of a content model you already have.

Agencies

Create reusable page-building systems clients can operate between engagements.

Product Teams

Reduce the queue of routine layout and copy changes that currently land on engineering.

Developers

Start from an extensible editor core instead of a blank canvas and a drag-and-drop library.

Build vs start from a core

Build a Page Builder From Scratch?

A page builder is not one feature. It is a dozen subsystems that all have to agree with each other — and then keep agreeing as the product grows.

What a page builder actually contains

  • Editor canvas
  • Drag & drop
  • Blocks
  • Components
  • Style Manager
  • Responsive controls
  • Assets
  • Pages
  • Storage
  • Undo / redo
  • Export
  • Publishing
  • Maintenance
Build from scratch

You own every one of them

Canvas, drop targets, selection, the style panel, breakpoints, the asset library, multi-page state, persistence, an undo stack that survives all of it, export, publishing — and the ongoing maintenance of the lot.

Start with GrapesJS

You start where those already work

The visual editor, drag & drop, blocks, components, Style Manager, assets, pages, storage APIs and the plugin system come with the core. What you add is the part that is specific to your product.

Build your product — not another page builder from scratch.

Side by side

What you own either way

Neither column is free of work. The difference is which work is yours.

SubsystemFrom scratchWith GrapesJS
Editor canvasDesign and build itIn the core
Drag & dropDrop targets, indicators, nesting rulesIn the core
BlocksDefine the format and the palette UIBlock Manager, plus ready-made block plugins
ComponentsBuild a component model and traitsComponent types with traits and custom behaviour
Style ManagerBuild a visual CSS editorIn the core, sectors configurable
Responsive controlsBreakpoint state across the whole editorDevice Manager, extendable with plugins
AssetsLibrary, upload flow, pickerAsset Manager, pointed at your storage
PagesMulti-page state and navigationPage Manager
StorageSerialization format and endpointsStorage Manager against your API
Undo / redoA command stack over every mutationIn the core
ExportHTML/CSS generationgetHtml() / getCss(), plus export plugins
PublishingYoursYours — deliberately
Editor maintenanceYoursShared with an open-source project and its ecosystem

Publishing stays in your column on purpose: it is the part that has to match your domains, your CDN and your release process.

Architecture

How a Drag-and-Drop Page Builder Fits Into Your Product

GrapesJS is a layer inside your application, not a platform you hand your users over to. Your app keeps the users, the content and the publishing decision.

Your application

You own the surface

  • Users
  • Auth & permissions
  • Templates
  • Routing
  • Billing

Embedded layer

GrapesJS editor

Extend it with plugins
  • Canvas
  • Blocks
  • Components
  • Style Manager
  • Assets
  • Pages
  • Persistence

    Your API

    • Storage Manager
    • Autosave
    • Versions
  • Data

    Your database

    • Projects
    • Pages
    • Assets
  • Delivery

    Your publishing

    • Preview
    • Publish
    • Live website
GrapesJS provides the visual editing layer while your application remains in control of users, content, storage and publishing.

For the mechanics of mounting the editor inside an existing app — iframes, routing, auth handoff — see the embeddable page builder guide

Responsive

Build Responsive Pages Visually

The editor's Device Manager switches the canvas between breakpoints, and styles set while a device is active apply only at that width.

Desktop1440px
Tablet768px
Mobile375px

What users can change per breakpoint

  • Layout & columns
  • Spacing
  • Typography
  • Visibility
  • Alignment
  • Background

Let users adapt layouts, spacing, typography and visibility for different screen sizes. How a published page renders on a given device still depends on the markup and CSS you ship — the editor controls the rules, not the browser.

Blocks

Start With Ready-Made Blocks

A block is a starting point a user drags in. These are the section types most page builders need on day one — build them yourself against the Block Manager API, or install a block plugin and start from a full palette.

  • Hero

    Headline, supporting line and a primary action.

  • Header

    Logo and navigation, collapsing to a menu on small screens.

  • Features

    A column set for benefits, with icon, title and copy.

  • Pricing

    Plan cards with one highlighted as the recommended tier.

  • Testimonials

    Quotes with an attribution and avatar.

  • Gallery

    An image grid filled from the Asset Manager.

  • CTA

    A single, centred call to action.

  • Contact

    A form wired to whatever endpoint you choose.

  • Footer

    Link columns, legal text and secondary navigation.

These are block types, not products. The block plugins actually for sale are further down the page.

Blocks vs components

Blocks Are What Users Drag. Components Are What They Become.

This is the distinction that decides whether GrapesJS is a website-builder toy or an editor core you can build a product on.

  1. Block
  2. Component
  3. Custom Component
  4. Your Product

Block

The starting point

An entry in the palette. Dragging it into the canvas inserts content — the block itself is not what lives on the page.

Component

The editable element

What the block becomes once dropped. Components have their own type, traits, and rules about what can be nested, dragged or removed.

Custom Component

Yours to define

Register your own component type and the editor treats it as a first-class citizen: your traits, your toolbar, your constraints, backed by your data.

Because custom components are backed by your own code, a GrapesJS editor can edit things a generic website builder has no concept of — a pricing table wired to your plans, a product grid reading your catalogue, a form posting to your API.

Templates

Don't Start With a Blank Canvas

Most users do not want an empty page. Ship a set of starting layouts and let them save their own — presets configure the whole editor, templates give users a page to begin from.

The layouts users typically ask for

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

These are layout categories, not catalogue listings — what you would build or curate for your own users. The presets and template managers you can actually install are in the plugin section below.

Storage

Keep Your Pages in Your Own Database

The Storage Manager is a client of your API, not a service. Point it at your endpoints and the editor loads and saves through them.

Where the data goes

  1. Editor
  2. Project data
  3. Your API
  4. Your database
Remote storage + publishJS
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() }),
  });
}

Connect GrapesJS to your own backend and decide how projects, pages, assets and users are stored. GJS.Market sells plugins — it does not host your data.

Publishing

You Control How Pages Are Published

  1. 1
    Edit

    The user builds the page

    Drag, drop, edit and style on the canvas. Autosave keeps work in progress recoverable.

  2. 2
    Save draft

    Persist through your API

    The Storage Manager posts the project to your endpoint. Nothing is published yet.

  3. 3
    Preview

    Render it the way visitors will

    Export HTML and CSS and render a preview on a route only the author can reach.

  4. 4
    Publish

    Your workflow, your rules

    Approvals, scheduling, versioning — whatever your product already does. GrapesJS is not in this step.

  5. 5
    Live

    Served from your infrastructure

    Your domains, your CDN, your caching. The page is plain HTML and CSS.

GrapesJS handles the editing experience. Your application controls the publishing workflow.

Plugin ecosystem

Extend Your Page Builder with GJS.Market Plugins

Every card below is a real listing — names, prices and thumbnails render live from the catalogue, so nothing on this page can drift from what is actually for sale.

Stacks

Build the Page Builder You Need

Four starting configurations. Each is a real basket of listings, not a bundle SKU — install what you need and drop the rest.

Prices render live from the catalogue.

Quick start

Start Building Your Page Builder

Two files and you have an editor on screen. Everything after that is configuration.

npm install grapesjs
editor.jsJS
import grapesjs from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';

// The editor core. Mount it on any container in your app.
const editor = grapesjs.init({
  container: '#editor',
});

Then define what users can drag, and what it becomes once they drop it:

blocks.jsJS
// A block is what the user drags. A component is what it becomes
// on the canvas once dropped — and what your app can then control.
editor.BlockManager.add('pricing-table', {
  label: 'Pricing',
  category: 'Sections',
  content: { type: 'pricing-table' },
});

editor.DomComponents.addType('pricing-table', {
  model: {
    defaults: {
      // Lock the frame, let the user edit only what you allow.
      draggable: 'main, section',
      traits: ['plan', 'currency'],
    },
  },
});
  1. Add blocks
  2. Customize components
  3. Configure storage
  4. Connect your backend
  5. Publish

From here the work is product-specific: which blocks your users get, which component types you register, and where projects are stored.

Frameworks

Use GrapesJS With Your Stack

The core is framework-agnostic — it mounts on a DOM container. These pages cover the wiring for each.

Comparison

GrapesJS vs Other Page Builders

Only characteristics that can be checked against each project's published package and documentation. Capabilities differ by design goal — Craft.js is headless by intent, Puck is React-first, Builder.io is a hosted platform.

CharacteristicGrapesJSPuckCraft.jsBuilder.io
Open sourceYes — BSD-3-ClauseYes — MITYes — MITSDKs MIT; platform proprietary
Self-hostedYesYesYesHosted service
FrameworkFramework-agnostic; React wrapper availableReactReactSDKs for several frameworks
Custom blocksYes — Block ManagerYes — component configYes — user componentsYes — registered components
Custom componentsYes — component types with traitsYes — React components with fieldsYes — React components with settingsYes — with inputs
Custom editor UIYes — panels replaceable, or drive it headlesslyProvided UI, themableBring your own — no UI includedVendor UI
Own storage backendYes — Storage Manager against your APIYes — you persist the dataYes — you persist the stateContent stored in Builder.io
Own publishingYesYesYesThrough Builder.io APIs
Plugin ecosystemYes — GJS.Market and npmGrowingSmallVendor integrations

Licences verified against the npm registry on 2026-09-03: grapesjs 0.23.6 publishes as BSD-3-Clause; @measured/puck, @craftjs/core and @builder.io/react publish as MIT. Capabilities reflect each project's public documentation — check them before making a decision.

Related

Related Solutions

Same editor core, different question. If one of these matches your situation more precisely, start there.

FAQ

Drag-and-Drop Page Builder Questions

Get started

Build Your Own Drag-and-Drop Page Builder

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

Marketplace

Browse Page Builder Plugins

Blocks, templates, storage, assets, export and AI — real listings with real prices.

Browse Page Builder Plugins
Free

Start Building

Install the core, mount the editor and register your first block. Nothing to sign up for.

Start Building
Services

Need Custom Development?

Custom components, editor UI, integration with your backend — tell us what the builder has to do.

Need Custom Development?