Start with GrapesJS
Tell us what the editor has to do and which application it lives in, and get a concrete integration plan back.
Start with GrapesJSPageKit — the self-hosted GrapesJS site builder, sold as source. Get early access
Compare two open-source approaches to building visual editors, page builders, and SaaS editing experiences.See how GrapesJS and Craft.js differ in architecture, React integration, editor infrastructure, customization, extensibility, storage, and production development.
React-first editor foundation
The editor is a React application you design.
More complete visual-editor foundation
The editor arrives assembled; you extend it.
Five questions about your stack, your output and how much of the editor you want to own. The result names the answers that drove it, so you can disagree with it on the specifics rather than on the conclusion.
Both projects are open-source frameworks you install into an application you already own. The difference is where they start you.
Your application is React, and the editor is a React application too.
Signals
You trade time-to-first-editor for an editing model that is your component model.
Read the Craft.js docsYou want a working visual editor to extend rather than a set of primitives to assemble.
Signals
You trade some architectural freedom for an editor that already works on day one.
Start with GrapesJSThis is the decision the rest of the page falls out of. Both frameworks hand you a node tree, drag-and-drop and serialization. They differ in how much of the editor around that tree already exists.
React → Craft.js → your components → your editor UI
Craft.js supplies the node tree, the drag-and-drop behaviour, the history and the serialization. Everything a user sees — the panels, the toolbars, the property controls, the block palette — is React you write, using your own components. That is the point of the design, not a gap in it.
Your app → GrapesJS → your backend
Editor subsystems the framework already includes
GrapesJS supplies a working editor: a canvas, a component model, a block palette, a visual style manager, a layer tree, an asset manager, a command registry and a storage layer. You restyle it, replace panels, and add plugins — but you do not start by writing them.
Craft.js gives you a React-first foundation. GrapesJS gives you a broader visual-editor foundation.
Neither framework is a platform. Neither provides a CMS, hosting, authentication, user accounts, billing, permissions, multi-tenancy or a publishing pipeline. Those belong to the application on both sides, and any comparison that puts them in one column is measuring the wrong thing.
Read the cells, not a tick or a cross. "Requires your editor implementation" is not the same as "missing", and "your application" is not the same as "unsupported" — most of the bottom third of this table is identical for both, because both are frameworks rather than products.
| Capability | GrapesJS | Craft.js |
|---|---|---|
| Primary architecture | Visual editor framework | React editor framework |
| React dependency | Optional | Required |
| Framework flexibility | Framework-agnostic | React only |
| Canvas | Built in | Framework feature |
| Drag and drop | Built in | Built in |
| Components | Built in | Framework feature |
| Blocks | Built in | Requires your editor implementation |
| Layers | Built in | Official companion package |
| Style management | Built in | Requires your editor implementation |
| Assets | Built in | Requires your editor implementation |
| Commands | Built in | Custom implementation |
| Device preview | Built in | Requires your editor implementation |
| Responsive editing | Built in | Requires your editor implementation |
| Undo / redo | Built in | Built in |
| Custom editor UI | Built in, fully customizable | Yours end to end |
| Custom components | Built in | Framework feature |
| Custom blocks | Built in | Requires your editor implementation |
| Templates | Via plugin | Custom implementation |
| Storage integration | Built in | Application responsibility |
| JSON / project data | Built in | Built in |
| HTML/CSS output | Built in | Custom implementation |
| React component rendering | Editor UI in React; canvas renders HTML | Native to the model |
| Email workflows | Via plugin | Custom implementation |
| MJML | Via plugin | Not applicable |
| Plugin ecosystem | Plugins plus a marketplace | Small ecosystem |
| API extensibility | Built in | Framework feature |
| Self-hosting | Supported | Supported |
| White-labeling | Built in, fully customizable | Yours end to end |
| SaaS embedding | Application responsibility | Application responsibility |
| Custom backend | Application responsibility | Application responsibility |
| Custom database | Application responsibility | Application responsibility |
| Authentication | Application responsibility | Application responsibility |
| Permissions | Application responsibility | Application responsibility |
| Publishing | Application responsibility | Application responsibility |
| Multi-tenancy | Application responsibility | Application responsibility |
Every row above was read off each project's own documentation, repository and npm registry entry on 2026-09-03. Where a capability is reachable through a framework's own ecosystem, the cell says so rather than marking it absent.Sources: Craft.js overview · Craft.js editor API · Craft.js layers package · Craft.js on npm · GrapesJS documentation · GrapesJS on npm
Popularity is not a technical argument, and this table is not a verdict. It is here because release cadence and community size affect how long you wait for an answer when something breaks — which is a real engineering cost, unlike a star count on its own.
| Package | Latest version | License | Published | Repository stars |
|---|---|---|---|---|
| grapesjs | 0.23.6 | BSD-3-Clause | 2026-08-25 | 26,185 |
| @craftjs/core | 0.2.12 | MIT | 2025-02-14 | 8,738 |
Read from the npm registry and the GitHub API on the date above. Neither repository is archived. Craft.js remains on a 0.2.x line and its most recent release predates this page by more than a year; a 0.3.0 alpha exists but has not been updated since 2022. That is a fact worth knowing before a multi-year commitment — it is not, on its own, a reason to rule the project out, and teams running it in production today are not stranded. Craft.js declares React as a peer dependency across React 16.8 – 19. Craft.js also publishes two companion packages: @craftjs/layers and @craftjs/utils.
The most useful column on this page. It is not a list of what each framework lacks — it is a list of where the work lands.
| Capability | Craft.js | GrapesJS |
|---|---|---|
| Editor foundation | Framework | Framework |
| Canvas | Core editor architecture | Built in |
| Component model | React-oriented | Built in |
| Blocks | Requires your editor implementation | Built in |
| Style controls | Requires your editor implementation | Built in |
| Layers | Official companion package | Built in |
| Asset management | Requires your editor implementation | Available |
| Device controls | Requires your editor implementation | Available |
| Commands | Core editor architecture | Available |
| Storage | Application / integration | Storage Manager |
| Custom UI | Full control | Highly customizable |
"Requires your editor implementation" means the framework gives you the state and the APIs, and you render the surface yourself. For a team that wants the surface to be theirs, that is the feature. For a team that needs a working editor this quarter, it is the schedule.
Neither column is a shortcut. One of them just starts further along, and the other starts closer to your own component model.
Every advantage on this page has a matching cost. Here they are side by side, in the same shape, at the same size.
Best suited for teams that want a React-native architecture and an editor interface of their own design.
The cost is engineering the editor interface. The return is an editor that matches your architecture exactly.
Best suited for teams that want working visual editor infrastructure to extend.
The cost is learning an architecture somebody else designed. The return is an editor that already works.
The official demo: drag blocks onto the canvas, edit styles in the style manager, switch device widths, inspect the layer tree. No plugins, no configuration — this is what the core includes.
Loads from a third-party origin
All three run the same open-source engine. The difference between them is configuration, panels and plugins — which is the practical shape of "extensible visual editor framework". Demos load from third-party origins only after you choose to load them.
This is the question most readers actually arrive with, and the honest answer splits.
The editor is not a component in your React app — it is your React app.
Signals
The canvas renders the same components production renders. Nothing is mirrored, nothing drifts.
React is one part of your stack rather than the whole of it.
Signals
The editor UI can be React while the canvas stays HTML — which is what makes it portable.
The canvas is the real distinction. Craft.js renders your React tree inside the editor; GrapesJS edits an HTML document and gives you the resulting HTML and CSS. A React design system can be represented in GrapesJS as editor components, but it is a representation, and keeping that representation in sync with production is work you should plan for.
GrapesJS can serve as an editor foundation across different frontend environments, while Craft.js is specifically designed around React.
GrapesJS
Read that precisely. The engine is a JavaScript library that mounts onto a DOM element, which is what makes it usable from any of the frontend environments above. It does not mean an official wrapper exists for every one of them: there is an official React wrapper, and the Vue and Angular integrations are patterns rather than packages. The per-framework pages below show the actual integration code.
The editor is one surface among several, and it is the only one either framework has an opinion about. Everything around it stays yours.
GrapesJS
This diagram would look the same with Craft.js in the place of GrapesJS. Neither framework supplies authentication, organizations, billing, permissions or a database, and a comparison that implies otherwise is selling something.
Six shapes the same editing surface takes once it is inside a product. Each one is covered in depth on its own page.
Let customers assemble and publish their own sites inside your product, with your components and your hosting.
See the SaaS builder guidePut a visual editing layer over content that already lives in your database or a headless CMS.
See the headless CMS setupGive marketing teams a constrained canvas of approved sections instead of a design tool with no guardrails.
See the landing page buildEmbed the editor inside a dashboard your customers already sign in to, rather than sending them elsewhere.
See the embedding guideShip the same editor to many tenants with per-tenant branding, block sets and permissions — implemented in your application.
See white-label optionsReuse the same engine for marketing and transactional email templates instead of buying a second editor.
See the email setupThe editor can become a native part of your application instead of being a separate hosted service. Both frameworks support this; the difference is how much of the surface you assemble before you can ship it.
Your application
The product your users already sign in to
Editing surface
The editor, mounted inside it
Browse pluginsOwned by you
Application shell
Open source
Editor engine
Owned by you
Data layer
Request path
The right editor framework should make it possible to build the editing experience around the components your users actually work with. Both frameworks do this; they differ in what a component is.
From design system to canvas
A block set is a product decision, not a framework feature. These are the sections most teams end up shipping first — constrained, branded and safe to hand to a non-technical user.
Headline, supporting copy and a primary action, with a locked layout.
Plan columns driven by your own data rather than free-form text.
A repeatable grid where the count is bounded and the icons come from your set.
A single conversion band with brand-approved colour options only.
Site navigation your users can populate but not restructure.
Fields wired to your endpoint, with validation you control.
Quotes and attribution pulled from records rather than retyped.
A commerce tile bound to a real product, not a picture of one.
Constraints your users cannot break are worth more than a canvas on which anything is possible.
Both frameworks serialize their state and hand it to you. Neither one stores it. GrapesJS provides a Storage Manager with load and store callbacks; Craft.js gives you the serialized node tree and leaves the transport to your application.
Persistence path
Your application owns the backend architecture. Neither framework provides a database, an API, versioning, publishing or a CDN, and the list above is a list of things you already run — not features either project provides.
Email is the clearest case where the two frameworks are not interchangeable. GrapesJS can be extended for email editing workflows through presets that swap the block set and the export format; Craft.js has no equivalent path, because its output is a React tree rather than markup.
Email path
None of this is automatic. An email editor needs a table-safe block set, an export step and testing across clients — the engine removes the canvas problem, not the email problem.
Both frameworks let you own the surface, from opposite directions: with Craft.js you write it, so it is yours by default; with GrapesJS you replace the interface the framework already provides. Three levels, in the order teams usually reach them.
The parts a user sees on the first screen.
The words your product already uses for these ideas.
What each user is allowed to do at all.
The last layer is the one no editor framework provides. Roles, approval and audit are application features on both sides of this comparison.
Verified against each package's current registry entry and licence file on the date below, because this site has published inconsistent licence information in the past.
| Package | License | Source |
|---|---|---|
| grapesjs | BSD-3-Clause | License |
| @grapesjs/react | MIT | License |
| @craftjs/core | MIT | License |
| GJS.Market | Per-product commercial terms | Marketplace |
Marketplace products are licensed individually by their authors; the terms are shown on each product page before checkout. The GrapesJS core and its React wrapper carry different licences — the core is not MIT. Craft.js publishes all of its packages under one licence.
This is a statement of which licence each package publishes, not legal advice. Read the licence files and check them against your own distribution model. Licences re-read on 2026-09-03.
There is no hour figure on this page. "Forty hours versus three hundred and twenty" depends entirely on your team, your design and your definition of done, and any page that quotes it is guessing. What follows is the work that exists on each side, so you can price it against your own velocity.
Potential engineering work before you have an editor your users can use.
More editor infrastructure is already available, which reduces how much editor-specific infrastructure is implemented from scratch. It does not reduce it to zero.
Both columns end at the same place: an editor your users can use, inside an application you still have to build. The difference is which of these lines your team writes first.
Start with the core editor and add the functionality your product actually needs. Every listing below is a real, currently published product — prices are read live from the catalogue when this page is built.
Presets and components for teams mounting the editor inside a React application.
Browse categoryEditor panels rendered as React components, so the editor interface matches the app around it.
A configured starting point for a React-hosted editor rather than a blank init call.
A worked example of a React component exposed to the canvas as an editable block.
A minimal integration to read before wiring the editor into your own React tree.
A responsive email block set, so the first email template is not hand-written tables.
Swaps the canvas to an email component model and exports markup email clients accept.
A newsletter-shaped block set and export path for marketing email.
Long-form document blocks for editors that produce pages rather than landing pages.
Persistence and multi-page management — the pieces a product needs once more than one person edits.
Browse categoryPersists project data straight into a headless CMS instead of a bespoke endpoint.
Storage wiring for teams already running on a hosted document database.
Local persistence for drafts, offline editing and prototypes before the API exists.
Multi-page projects in one editor session — the point where a demo becomes a product.
Block libraries, sections and template management for marketing pages.
Browse categoryA utility-class block library, so the canvas output matches an existing design system.
A configurable navigation section, which is otherwise the first thing every team rebuilds.
The matching footer section, with the same configuration model.
Saved starting points your users pick from instead of facing an empty canvas.
For a white-label editor the starting point is a preset that replaces the whole shell rather than a plugin that adds to it — the three demos above are exactly those, and each one is a product.
The catalogue has two genuinely AI-powered listings rather than a full AI category. They are named here instead of given their own section: the AI category hub has nothing published behind it, so sending readers there would waste the click.
Start with the core editor and add the functionality your product actually needs.
Catalogue verified 2026-09-03. grapesjs-gpt-plugin · grapesjs-image-ai-thumbai
If the comparison above lands on GrapesJS and the block set is the work in front of you, this is what we do.
Fourteen requirements, and the framework each one points at. Three of them point at both, because for those requirements either framework will do and pretending otherwise would make the rest of this table less trustworthy.
| Requirement | Better fit |
|---|---|
| React-first editor | Craft.js |
| Deep React component editing | Craft.js |
| Build your own editor UX | Craft.js |
| Maximum React-native control | Craft.js |
| Editor used only by developers | Craft.js |
| Framework-independent editor | GrapesJS |
| Built-in visual editor infrastructure | GrapesJS |
| HTML/CSS visual editing | GrapesJS |
| SaaS page builder | GrapesJS |
| Email and page editor in one engine | GrapesJS |
| Existing editor ecosystem | GrapesJS |
| JSON project data you store yourself | Either |
| Self-hosting with no vendor | Either |
| Undo and redo out of the box | Either |
Where does your product sit?
The editor has to output a live React component tree
Craft.js
This is the case Craft.js exists for. No GrapesJS plugin changes the fact that its canvas is HTML.
You want to design every panel and control yourself
Craft.js
Craft.js expects you to render the surface, so nothing has to be replaced first.
The editor is used only by developers on your own team
Craft.js
A purpose-built React editor is cheaper to maintain than a general one you have narrowed down.
The editor has to run outside React, now or later
GrapesJS
GrapesJS mounts onto a DOM element, so it is reachable from any frontend environment.
You need a usable editor this quarter
GrapesJS
Canvas, blocks, styles, layers and assets already exist and already work together.
You need both page and email authoring
GrapesJS
One engine covers both through email presets; a React tree does not become email markup.
Craft.js gives React teams a flexible foundation for building custom editors. GrapesJS gives teams a broader visual-editor foundation that can be integrated, customized, and extended for production applications.
Tell us what the editor has to do and which application it lives in, and get a concrete integration plan back.
Start with GrapesJSPresets, block libraries, storage adapters and email components — the pieces most teams would otherwise write first.
Explore pluginsDesign systems turned into blocks, storage wired to your API, panels rebuilt to match your product.
Talk to an expertChoose the editor foundation that matches your architecture — then build the product around it.