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

No-code builder for developers

Build a No-Code Website Builder with GrapesJS

Let your users build pages visually while your development team controls the editor, components, design system, data, permissions and publishing workflow. You build the product. GrapesJS is the editing engine inside it.

Open-source core, BSD-3-ClauseSelf-hosted — no editor vendor in your stackReact, Vue, Angular, Next.jsYour database, your publishing pipeline
app.yourproduct.com/pages/homeYour product
Role: Marketing
  • Desktop
  • Tablet
  • Mobile
PreviewPublish
  • Blocks
  • Layers
  • Hero
  • Features
  • Pricing
  • Testimonial
  • CTA

Layers

  • Page
  • Header
  • Hero
  • Heading

Home page — draft

Locked
Hero section
Your users get a no-code experience. Your team keeps full control.
Live, in this page

A real visual editor, running right here

This is GrapesJS itself, booted in your browser on this page — not a screenshot and not a video. Drag a block in, select an element, restyle it. Everything on the canvas is plain HTML and CSS, which is exactly what your users would be producing.

  • Drag & drop
  • Style Manager
  • Layer tree
  • Responsive views
  • Undo / redo
Scope

What Are You Actually Building?

You are not installing a page builder. You are adding a no-code editing feature to a product you already own — with your users, your permissions, your data and your publishing. The visual editor is one layer of that, and it is the layer you do not have to write.

The chain, end to end

  1. Your product
  2. Your users
  3. No-code editor
  4. GrapesJS
  5. Your API / database
  6. Preview / publish
  7. Your production website
Seven layers. Exactly one of them is GrapesJS.

Every layer above and below the engine is your product. That is where your differentiation lives — and it is where your engineering time should go.

Responsibility boundary

Who Owns What

The single most useful thing to settle before you write any code: which subsystem belongs to your application, which ships with the editor, and which you can buy off the shelf. Anything that needs a server is on the left.

Your application
  • AuthenticationSessions, tokens, SSO
  • UsersAccounts and profiles
  • OrganizationsTeams, workspaces, tenants
  • BillingPlans, quotas, invoices
  • PermissionsWho may edit, review, publish
  • Business logicYour product's actual rules
  • DatabaseWhere projects and revisions live
  • PublishingTurning an approved page into a live URL
  • AnalyticsWhat visitors did with the page
GrapesJS
  • Visual editingDirect manipulation on a live canvas
  • Canvas & drag-dropSorting, nesting, drop targets
  • ComponentsTyped nodes with their own behaviour
  • BlocksThe palette a user drags from
  • StylingStyle Manager, sectors, classes
  • TraitsPer-component settings fields
  • LayersThe component tree, navigable
  • CommandsUndo, redo, preview, custom actions
  • Responsive editingDevice breakpoints on the canvas
  • Editor stateProject JSON in, project JSON out
GJS.Market plugins
  • Extra block librariesTailwind, Bootstrap, section packs
  • Extra componentsTables, sliders, forms, tabs
  • Storage adaptersDirectus, Firebase, IndexedDB
  • Editor UI extensionsAlternative panels and shells
  • Workflow helpersExport, deploy, code view

Nothing that requires a server is listed under GrapesJS. The editor runs in the browser; it has no notion of who is signed in.

The real cost

Why Building a No-Code Editor Is Hard

A visual editor looks like a drag-and-drop demo until you ship one. These are the subsystems that turn out to be mandatory, roughly in the order a user's gesture travels through them — and each one has to keep working while all the others change.

  • A drag-and-drop canvas with valid drop targets and nesting rules
  • A component system with types, defaults and per-type behaviour
  • DOM manipulation that survives arbitrary user structure
  • Style management that writes real CSS, not inline soup
  • Responsive editing across breakpoints
  • Undo / redo over every one of the above
  • A block palette users can actually reason about
  • Reusable components that update everywhere at once
  • Asset management: upload, browse, replace, delete
  • A layer tree for selecting what a mouse cannot reach
  • A command system so features are addressable and scriptable
  • Persistence that does not lose an hour of work
  • Serialization stable enough to reload and to diff
  • Preview that matches what a visitor will see
  • Publishing that produces clean, deployable output
  • Custom UI, because the default panels are never your product
  • A plugin architecture, or the whole thing calcifies

None of that is your product. Building the product around an existing editor engine is a fundamentally different project from building the editor engine itself — the first ships a feature, the second commits a team to maintaining an editor forever.

The engine

Why Use GrapesJS for a No-Code Builder?

GrapesJS is an open-source visual editor framework you self-host and embed. It gives you the editing layer — canvas, components, styling, panels, commands — as documented modules you configure, extend or replace. Every module below links to its own documentation, so you can check each claim before you commit.

Version 0.23.6, licensed BSD-3-Clause; the official React wrapper @grapesjs/react is MIT. Both permit commercial use. What GrapesJS does not ship is equally important: no backend, no users, no permissions and no publishing pipeline — see the responsibility boundary above.

The differentiator

No-Code Doesn't Mean No Control

A professional no-code builder never exposes the whole editor to every user. That is the difference between a toy and a product feature. Your team decides — per role, per template, per component — how much of the editor a given person can reach.

Ten decisions that stay yours

  • Which blocks are availableRegister only the blocks this role should see.Curated
  • Which components can be editedPer-type `editable` and `selectable` flags.Curated
  • Which styles are allowedStyle Manager sectors you define, nothing more.Curated
  • Which properties are visibleTrim a sector down to two fields if that is the right answer.Curated
  • Which components are lockedHeader and footer stay untouchable.Locked
  • Which areas are editableAn editable slot inside a fixed template.Curated
  • Which areas are read-onlyLegal text, pricing, compliance blocks.Locked
  • Which design tokens are availableBrand colours and type scale, as the only options.Curated
  • Who can modify templatesTemplate authoring is a separate capability from page editing.Locked
  • Who can publishThe publish button is a UI hint; your API is the gate.Locked
editor-config.jsJS
const editor = grapesjs.init({
  container: '#editor',
  // 1. The user only ever sees blocks you registered.
  blockManager: { blocks: approvedBlocks(user.role) },
  // 2. The Style Manager only offers properties you allow.
  styleManager: { sectors: allowedSectors(user.role) },
  // 3. Devices are your breakpoints, not arbitrary widths.
  deviceManager: { devices: BRAND_BREAKPOINTS },
});

// 4. Lock the chrome: a marketer never edits the header or the footer.
editor.on('component:add', (component) => {
  if (LOCKED_TYPES.includes(component.get('type'))) {
    component.set({
      editable: false,
      draggable: false,
      removable: false,
      copyable: false,
    });
  }
});

// 5. Hide panels this role has no business seeing.
if (!user.can('edit_code')) {
  editor.Panels.removeButton('options', 'export-template');
}

// Every line above is a RENDERING decision. The server still checks
// user.can('publish') before it accepts the payload.

Everything above is a rendering decision. Hiding a panel is not a permission — a determined user can still call the editor's API from a console. Your backend must re-check the same rules before it accepts a save or a publish. See the roles section below.

Same engine, different products

One Editor. Different User Experiences.

You do not need three editors to serve three kinds of user. One GrapesJS instance, configured from the signed-in user's role, produces three genuinely different products. Each column below lists what it adds to the one before it.

  1. 1Beginner

    Fill in the page

    For people who have never opened a design tool and never should have to.

    • Edit text in place
    • Replace images from the asset library
    • Drop in approved blocks
    • Reorder sections within a template
    • No style panel at all
  2. 2Marketer

    Build the page

    Adds everything a campaign owner needs to ship without a developer.

    • Create new sections from scratch
    • Start from templates
    • Adjust layout and spacing
    • Check and fix responsive behaviour
    • Edit approved styles within your tokens
  3. 3Power user

    Design the system

    Adds the controls an in-house designer or agency operator expects.

    • Advanced components: tables, sliders, forms
    • Free-form layout controls
    • The full Style Manager
    • Save reusable symbols and templates
    • Custom classes and states

The configuration is data, not code. Which means the difference between your Starter plan and your Enterprise plan can be a row in a table.

Brand safety

Build a No-Code Builder Around Your Design System

The fastest way to make a visual editor safe is to give it nothing unsafe to offer. Feed your tokens into the Style Manager and your components into the Block Manager, and "off-brand" stops being a review problem — it becomes unreachable.

  • Colour

    • brand/600
    • brand/700
    • ink/900
    • ink/500
    • surface/50
  • Type & scale

    • display
    • heading
    • body
    • caption
    • mono
  • Spacing

    • space-2
    • space-4
    • space-8
    • space-12
    • space-16

Available in the editor

  • Brand Button
  • Hero Section
  • Pricing Card
  • Testimonial
  • Image
  • Text

Not reachable

  • Arbitrary HTML
  • Unapproved components
  • Unsupported styles

Users create real content without being able to break brand consistency — and your design team stops reviewing pages one at a time. If you already ship a component library, those components become the blocks.

Blocks

Give Users Building Blocks Instead of a Blank Canvas

A blank canvas is not freedom, it is a blank stare. The single biggest driver of whether non-technical users succeed in your builder is whether the first thing they see is a curated set of sections that already look like your product.

  • Hero

    Headline, sub-line, one call to action.

  • Features

    Two to four column feature grid.

  • Pricing

    Plan cards wired to your own plan data.

  • Testimonials

    Quote, attribution, optional logo.

  • FAQ

    Question and answer pairs.

  • Call to action

    One message, one button.

  • Contact

    Form fields posting to your endpoint.

  • Footer

    Usually locked, always present.

Templates

Start From Something, Not From Nothing

Blocks answer "what can I add". Templates answer "where do I start". Ship a small, opinionated set — a page kind your users actually create, not a gallery.

Template kinds worth shipping

  • Landing page
  • Pricing
  • Product page
  • Event
  • Documentation
  • Client portal
  • Campaign
  • Microsite

Templates are ordinary saved projects with a flag on them. Storing them is your application's job, which means so is versioning them.

The best no-code experience does not force users to design everything from zero.

Persistence

Where Does the User's Content Go?

Into your database, on your endpoints, under your schema. GrapesJS's Storage Manager is an HTTP client with a load URL and a store URL — it is not a hosting service, and GJS.Market does not hold your customers' pages.

What actually happens on save

  1. Editor
  2. Storage Manager
  3. Your API
  4. Your database
storage.jsJS
grapesjs.init({
  container: '#editor',
  storageManager: {
    type: 'remote',
    autosave: true,
    autosaveIntervalMs: 10_000,   // debounce: one write, not one per keystroke
    stepsBeforeSave: 20,
    options: {
      remote: {
        urlLoad:  `/api/pages/${pageId}`,
        urlStore: `/api/pages/${pageId}`,
        headers:  { Authorization: `Bearer ${token}` },
      },
    },
  },
});

// The editor sends you project JSON. What that JSON is allowed to
// become — a draft, a revision, a published page — is your API's call.

GrapesJS provides the editing layer. Your application controls how projects are stored and published — which is also why drafts, revisions and rollback are yours to design. Autosave belongs on a debounce; a save per keystroke is a denial-of-service attack on your own API.

Two artifacts, two jobs

  • Project JSON — editor state

    The component tree, styles and assets the editor needs to reopen the page exactly as it was. Versioned, diffable, never served to visitors. This is what a revision is.

  • HTML / CSS — published content

    What `editor.getHtml()` and `editor.getCss()` produce: a static page you sanitize, store and serve. A visitor should never load the editor runtime.

Workflow

From Draft to Published Page

Editing and publishing are different actions with different risk profiles, and a production no-code product separates them. The two gated stages below are where an authorization check belongs — not in the editor, in your API.

  1. 1

    Draft

    A project row with no live URL.

  2. 2

    Edit

    Autosaved project JSON, revision per session.

  3. 3

    Preview

    Rendered output on a signed, temporary URL.

  4. 4

    Review

    A reviewer sees the preview, not the editor.

  5. 5

    Approve

    A state change your API authorizes and records.

  6. 6

    Publish

    Sanitized output written to your production site.

Authorization checked here

Permissions, approvals and publishing logic belong to the application and its backend. GrapesJS has no concept of a draft, an approval or a live URL — those states live in your database, and rollback is simply publishing an earlier revision.

Access

Give Every User the Right Level of Control

Four roles cover most builder products. Each one gets a genuinely different editor because each one loads a different configuration — but every one of them is enforced in the same place: your backend.

  • Administrator

    Configures the editor, templates and roles

  • Designer

    Edits layout and styling

  • Reviewer

    Previews and approves; cannot edit

  • Content editor

    Edits text and images; cannot change layout

How one permission decision travels

  1. Signed-in user
  2. Role
  3. Your policy layer
  4. Panels rendered
  5. Blocks registered
  6. Publish accepted

Application-level authentication and authorization are handled by your backend. The editor is the last stop in that chain, never the first: it renders the consequences of a decision your server already made, and your server must make it again when the save arrives.

The decision

Build the Editor From Scratch or Use GrapesJS?

This table is deliberately narrow: it compares the editing engine only. Everything on the responsibility boundary marked "your application" is your work either way — that is the point.

CapabilityBuild from scratchGrapesJS
Visual canvasBuildAvailable
ComponentsBuildAvailable
Drag & dropBuildAvailable
BlocksBuildExtensible
StylingBuildAvailable
LayersBuildAvailable
CommandsBuildAvailable
Storage integrationBuildConfigurable
Custom componentsBuildSupported
Plugin architectureBuildSupported
Product-specific UXBuildCustomizable

Capabilities checked against the GrapesJS 0.23.6 documentation; catalogue listings and prices verified 2026-09-03.

Don't build the editor engine if your real product is the application around it.

Marketplace

Extend Your No-Code Builder with Plugins

Real listings from the GJS.Market catalogue, grouped by the job you are doing rather than by the catalogue's own taxonomy. Prices come from the live catalogue, so what you see here is what a product costs today.

Two things you will need are deliberately missing from these shelves, because the catalogue does not have them: a roles and permissions plugin, and an approval-workflow plugin. Both belong in your application anyway — see the roles and publishing sections above, or bring them to our implementation team.

Starting points

Build Your Stack

Three combinations that get a working builder in front of users quickly. Each is a starting point, not a bill of materials — swap any row for the equivalent that fits your backend.

Prices are read from the live catalogue at build time. Free plugins are open source and self-hosted like the core.

Ownership

Make the Builder Part of Your Product

White-labelling is not hiding a logo. It is making the editor read as a feature of your application rather than as a third-party tool someone embedded in it.

  • Custom branding

    Your colours, type and iconography throughout the editor chrome.

  • Custom panels

    Rebuild the toolbars around your users' actual tasks.

  • Custom components

    Your design system's components, named the way your team names them.

  • Custom terminology

    If your users say "module", the editor should not say "component".

  • Less UI, not more

    Removing controls is the most under-used customisation there is.

  • Controlled experience

    Defaults, empty states and onboarding that match the rest of your product.

Removing the GrapesJS branding is trivial and permitted by the BSD-3-Clause licence. Making the editor feel like your product is a design project — panels, terminology, defaults, and everything a user does not see.

Integration

Use GrapesJS with Your Application Stack

GrapesJS renders into a plain DOM element, so integrating it is mostly a question of which lifecycle hook calls `grapesjs.init()` and when it is cleaned up. Pick your framework for the specifics.

Your framework powers the application. GrapesJS powers the visual editing layer.

Before you ship

Production Checklist for a No-Code Builder

The gap between "the editor works" and "we can put customers on it" is roughly this list. Each group links back to the section that argues it.

Editor

The editing experience

What the user can reach, and what they cannot.

  • Curated block palette
  • Custom components for your design system
  • Style Manager restricted to your tokens
  • Responsive editing across your real breakpoints

Register blocks per role, not once globally.

Data

Nothing is lost

Persistence a user can trust with a day of work.

  • Project persistence on your own endpoints
  • Autosave with a sane interval
  • Revisions per editing session
  • Backups and a tested restore path

Debounced autosave, not a write per keystroke.

Security

The output is untrusted

Everything the editor produces came from a user.

  • Sanitize published HTML and CSS
  • Validate uploaded assets by type and size
  • Authorize every save and publish server-side
  • Validate stored project JSON before rendering it

Sanitize on the way out, on the server.

UX

People can actually use it

The difference between adoption and a support queue.

  • Starting templates for each page kind
  • Preview that matches production
  • Undo and redo everywhere
  • Visible, working responsive controls

Templates beat an empty canvas every time.

Publishing

Shipping is a separate act

Editing and publishing have different risk profiles.

  • An explicit draft state
  • A review step that does not require editor access
  • An authorized publish action
  • One-step rollback

Rollback is publishing an earlier revision.

Operations

You can see what is happening

The editor is now part of your product's uptime.

  • Analytics on published pages
  • Error handling for failed loads and saves
  • Monitoring on the storage endpoints
  • A record of who changed what

Log editor errors with the project id attached.

Security

Security Considerations

A no-code builder is, by construction, a feature that lets users put arbitrary content into your product. Treat everything it produces as untrusted input, because it is.

  • Sanitize published output

    Run produced HTML and CSS through a vetted sanitizer on the server before it is stored or served.

  • Validate uploaded assets

    Check type, size and dimensions server-side, and serve user media from a separate origin.

  • Enforce permissions in the backend

    Every save, approve and publish is authorized again on the server, whatever the editor showed.

  • Never trust client-side authorization

    A hidden panel is a UI state. The editor's API is still reachable from a browser console.

  • Validate stored project data

    Project JSON is user input too. Validate its shape before you feed it back to a renderer.

  • Control custom code execution

    If you allow a custom-code component, decide deliberately where it runs and who may add one.

  • Protect publishing endpoints

    Rate-limit them, scope them per project, and log every call.

GrapesJS is an editing library, not a security boundary. It makes no guarantee about the safety of the markup it produces, and it cannot: the markup came from your user. Sanitization, validation and authorization are your application's responsibility.

Performance

Keep Your No-Code Editor Fast

The editor is a heavy client-side application living inside your product. Most of the wins come from not loading it — and from not loading it twice.

  • Initialise on demand

    Boot the editor when a user opens it, not when the route loads.

  • Lazy-load optional features

    Dynamic-import plugins the current role can actually use.

  • Load only the plugins you need

    Every registered plugin costs bundle size and start-up time forever.

  • Keep the block catalogue curated

    Hundreds of blocks slow the palette down and paralyse the user.

  • Optimise assets

    Resize and re-encode on upload — users will drop 8 MB photos into a hero.

  • Debounce autosave

    One write every few seconds, not one per keystroke.

  • Watch project size

    Inlined base64 images turn a project row into megabytes. Store references, not data.

The published page must never carry the editor. A visitor loads HTML and CSS; only an author loads the engine.

What comes next

Add AI Without Giving Up Control

AI in a page builder is most useful, and least dangerous, when it is treated as another user of the same editor — one that can only produce what a human in the same role could have produced.

  • Generate sections

    Assemble a section from your registered blocks, not from free-form markup.

  • Generate copy

    Fill an existing layout's text nodes, leaving structure untouched.

  • Suggest layouts

    Propose an arrangement of approved components for a stated goal.

  • Transform content

    Rewrite for length, tone or locale in place.

  • Generate components

    Draft a new component definition for a developer to review — never to auto-register.

  • Optimise existing pages

    Suggest edits against measurable criteria and let a human approve them.

AI should operate inside the same component and design-system constraints as human users. If a generator can emit arbitrary HTML that your block palette would never offer, you have re-opened every hole you closed.

The capabilities above describe a pattern you can build on the editor's own APIs, not a shipped GJS.Market feature. The catalogue does have an AI shelf — thumbnail generation, GPT-backed helpers — and it is linked above.

FAQ

No-Code Builder Questions, Answered

What is a no-code builder for developers?

It is a visual editing feature you build into your own product so your users can create pages without writing code — while you keep control of the components, styles, data and publishing. The distinction from a no-code tool is who configures it: you do, in code, once, and your users work inside those constraints.

Can I build a no-code website builder with GrapesJS?

Yes. GrapesJS is an open-source visual editor framework designed to be embedded and extended. It provides the canvas, components, blocks, styling, layers and commands; you provide the application around it — users, permissions, storage and publishing.

Can I hide HTML and CSS from users?

Yes. The code view is an optional panel, not a requirement. Remove the export and code-view buttons from the panels and your users never see markup — they edit on the canvas and set values in the Trait Manager.

Can I restrict which components users can edit?

Yes. Components carry per-type properties such as `editable`, `selectable`, `draggable` and `removable`. Set them when a component is defined or when it is added, and the editor will not let a user reach it. Remember that this is a rendering rule — your API must re-check the same thing on save.

Can I lock sections of a page?

Yes, and it is one of the most common configurations in production builders: a fixed header and footer with an editable region between them. Lock the chrome components and register only the blocks that are allowed inside the editable slot.

Can I create different editor experiences for different roles?

Yes — from one editor. Build the `grapesjs.init()` options from the signed-in user's role: which blocks are registered, which Style Manager sectors exist, which panels render. A content editor and a designer then get genuinely different products from the same instance.

Can I enforce brand colors and fonts?

Yes. Define the Style Manager's sectors and properties yourself and expose your tokens as the only available options, rather than free colour pickers and font fields. Font plugins in the catalogue can restrict the available families to the ones you allow.

Can I save projects to my own database?

Yes, and you should. The Storage Manager in remote mode calls a load URL and a store URL that you provide, with your own headers. GrapesJS stores nothing itself, and GJS.Market never sees your customers' content.

Can I build a SaaS no-code editor?

Yes — that is the most common shape. Your SaaS owns accounts, plans, quotas and tenancy; the editor is a feature inside it. Packaging, limits and per-tenant configuration are covered in the SaaS page builder guide.

Can I white-label a GrapesJS-based editor?

Yes. The core is BSD-3-Clause licensed, which permits commercial use and does not require you to display GrapesJS branding. Rebuilding the panels, terminology and defaults so the editor reads as part of your product is a design project rather than a licensing question.

Can I create custom blocks?

Yes. A block is a palette entry that produces a component. Register your own with the Block Manager, and define matching component types so the dropped result behaves the way your product expects — that is how a design system becomes an editor.

Can I use GrapesJS with React, Vue, Angular and Next.js?

Yes. GrapesJS renders into a plain DOM element, so any framework can host it: initialise in the mount hook, destroy in the unmount hook. There is an official React wrapper, @grapesjs/react (MIT); Vue and Angular have no official wrapper and call the same API directly. In Next.js the editor must be loaded client-side only.

Can I add AI to a GrapesJS-based builder?

You can build AI features on the editor's APIs — generating sections from your registered blocks, filling copy in an existing layout, suggesting an arrangement. The important constraint is that the AI should be limited to the same components and tokens a human in that role could use. The catalogue has an AI shelf, but no plugin there generates whole pages for you.

Can users publish directly to my website?

They can trigger a publish; your application decides what that means. A typical flow takes the editor's HTML and CSS output, sanitizes it server-side, stores it as a new revision, and swaps the live pointer — with an authorization check before any of that runs.

Should I build a no-code editor from scratch?

Only if the editor itself is the product you intend to maintain. If your product is the application around it — the users, the workflow, the data — then building the canvas, component system, undo stack, style engine and serializer yourself is a permanent maintenance commitment for a component nobody buys you for.

Implementation

Need Help Building Your No-Code Builder?

Most teams do not get stuck on `grapesjs.init()`. They get stuck on the parts this page says are theirs — permissions, publishing, storage, and making the editor feel like their product. That is what our team does.

  • Custom GrapesJS integration
  • Custom components
  • Plugin development
  • Editor customization
  • Storage integration
  • Publishing workflows
  • White-label experiences
  • Enterprise architecture
Get started

Build Your No-Code Experience

Give your users the freedom to build visually without giving up control of your product.

Start here

Start Building with GrapesJS

Tell us what you are building and get a scoped plan for the editor inside your product.

Start Building with GrapesJS
Extend

Explore GJS.Market Plugins

Blocks, storage adapters, editor UIs and components — real listings with current prices.

Explore GJS.Market Plugins
Get help

Talk to a GrapesJS Expert

Integration, custom components, permissions and publishing workflows, built with your team.

Talk to an Expert

Your product. Your users. Your rules. Your editor.