Bauen Sie mit GrapesJS ein umfassenderes visuelles Bearbeitungserlebnis auf. Puck ist ein starker, auf React basierender Editor zum Komponieren eigener Komponenten. Wenn Ihr Produkt sich zu einem vollständigen Seiteneditor, Website-Editor, E-Mail-Builder oder kundenorientierten visuellen Editor entwickelt, bietet GrapesJS Ihnen eine breitere Editor-Grundlage, die Sie integrieren und erweitern können.
Zahlen zu GrapesJS und GJS.Market, geprüft am 2026-09-03. Sie beschreiben das Projekt, das diese Seite empfiehlt, und sind kein Punktestand gegen Puck — eine Sternzahl belegt nicht, dass ein Editor besser zu deinem Produkt passt.
Die kurze Antwort
Ist Puck immer noch die richtige Wahl?
Beide sind Open-Source-Editoren, die du selbst hosten und deinen Nutzern präsentieren kannst. Sie beginnen mit unterschiedlichen architektonischen Richtungen, daher ist die eigentliche Frage nicht, was besser ist – sondern ob du einen React-Komponenteneditor oder ein vollständiges visuelles Bearbeitungserlebnis baust.
Bleib bei Puck, falls
Dein Editor ist ein React-Komponenteneditor, und das sollte er auch bleiben.
Das beschreibt Ihr Produkt
Deine Anwendung ist stark auf React ausgerichtet.
Dein Editor dreht sich um deine eigenen React-Komponenten.
Du möchtest eine React-native Komponentenkonfigurationserfahrung.
Du solltest den Großteil der Editor-UX selbst kontrollieren.
Dein Inhaltsmodell passt natürlich zu den React-Komponenten.
Nichts auf dieser Seite ist ein Grund für eine Migration. Puck ist gut dokumentiert, aktiv entwickelt und von MIT lizenziert.
Das sind konkrete Produktsignale, keine Behauptung darüber, was die meisten Teams tun. Wenn mehrere von ihnen Ihre Roadmap beschreiben, ist Ihr Editor aus einem Komponentenkonfigurator herausgewachsen.
Dein Editor wird mehr als nur ein Komponentenkonfigurator
Nutzer haben begonnen, nach visueller Seitenkomposition, wiederverwendbaren Blöcken, responsiven Steuerungen, Asset-Workflows, Vorlagen, Stilsteuerungen, Ebenen und mehreren Seiten zu fragen – Editor-Funktionen statt mehr Komponenten.
Ihr Produkt benötigt einen dokumentenorientierten Editor
Statt einer React-Komponente mit Requisiten, die auf JSON serialisiert sind, brauchst du eine Seite aus Abschnitten, Komponenten, Stilen, Assets und Layout – ein Dokument, das deine Nutzer bearbeiten, statt einer Konfiguration, die sie selbst ausfüllen.
Dein Editor muss mehr als React unterstützen
Wenn derselbe Editor in verschiedenen Anwendungsumgebungen wiederverwendet oder eingebettet werden muss, wo React nicht der Host ist, hört die Framework-Unabhängigkeit auf, theoretisch zu sein.
Nutzer wollen das Styling kontrollieren, nicht nur Inhalte
Eine visuelle Stilschicht ist ein großes Subsystem. Wenn "Benutzer den Abstand auswählen lassen" zu einem Roadmap-Element wird, speichert ein Editor mit bereits einem Style Manager ein Projekt.
Du brauchst HTML und CSS als Ausgabe, nicht nur React
Exporte, statische Veröffentlichungen, Drittanbieter-Einbettungen und E-Mail erfordern alle portable Markup. Das ausschließliche Rendern über React-Komponenten macht das schwieriger, als es sein müsste.
E-Mail-Vorlagen erschienen auf der Roadmap
E-Mail ist ein anderes Rendering-Ziel mit eigenen Einschränkungen. Es ist nicht das, wofür Puck dokumentiert ist, und es ist ein Workflow, den das GrapesJS-Ökosystem bereits abdeckt.
Der Editor ist jetzt ein Feature, das du verkaufst
Sobald der Editor Teil dessen ist, wofür Kunden zahlen, werden die Kosten für den Aufbau und die Wartung der Editor-Infrastruktur selbst zu einer Produktentscheidung und nicht mehr zu einem Implementierungsdetail.
Der ehrliche Fall
Wann du bei Puck bleiben solltest
Man muss nicht einfach migrieren, weil GrapesJS existiert. Puck ist ein gut dokumentierter, MIT-lizenzierter, aktiv entwickelter Editor und passt für eine ganze Produktklasse besser.
Dein Produkt ist komplett React
Puck läuft innerhalb deines React-Baums, sodass deine Komponenten, der Kontext, die Hooks und das Designsystem im Editor ohne Integrationsebene verfügbar sind.
Dein Inhaltsmodell sind React-Komponenten
Wenn das, was Nutzer bearbeiten, ein Komponentenbaum mit typisierten Props ist, drückt Puck das direkt aus. Ein visuelles Dokumentmodell wäre ein zusätzlicher Übersetzungsschritt.
Dein Editor ist relativ fokussiert
Ein Konfigurator mit einem festen Komponentensatz benötigt keinen Style Manager, keinen Asset Manager oder einen Layer Manager. Ungenutzte Subsysteme sind weiterhin eine Oberfläche zu verbergen.
Du solltest den Editor UI besitzen
Puck dokumentiert dreizehn Überschreibplätze plus Aufsatz, sodass Teams, die das gesamte Lektoraterlebnis gestalten wollen, einen klaren Weg haben.
Du brauchst eine enge React-Integration
Opt-in React Server Component-Unterstützung, dynamische Props, Resolver und externe Datenquellen sind alle dokumentiert, React-native Anliegen.
Du brauchst kein HTML/CSS-Bearbeitungsmodell
Wenn in deiner Roadmap nichts visuell Markup oder Stile bearbeiten muss, ist die größere Editor-Basis eine Fähigkeit, die du ohne Nutzung mitnehmen würdest.
Wenn das dein Produkt beschreibt, ist es die richtige Entscheidung, bei Puck zu bleiben – und diese Seite hat ihren Zweck erfüllt.
Puck und GrapesJS gehen von unterschiedlichen Modellen aus
Puck ist darauf ausgelegt, React-Komponenten zu bearbeiten und zu komponieren. GrapesJS ist auf visuelle Dokumentenbearbeitung ausgelegt, und bietet eine breitere Auswahl an Editor-Subsystemen.
Puck
Komponenten und ihre Requisiten sind das Inhaltsmodell.
Keines der beiden Modelle kann als fehlende Fähigkeiten des anderen beschrieben werden: Alles, was GrapesJS als Modul ausliefert, kann auf Puck umgesetzt werden, und alles, was Puck nativ mit React macht, kann in GrapesJS integriert werden. Der Unterschied ist der Ausgangspunkt.
Der Ausgangspunkt ändert sich, ist, wie viel Editor-Infrastruktur dein Team aufbauen muss, bevor das Produkt fertig aussieht – was die Frage ist, die die nächsten beiden Abschnitte konkret beantworten.
Keine der beiden Architekturen ist universell überlegen. Sie optimieren für verschiedene Dinge, und die richtige ist die, die zu dem passt, was deine Nutzer tatsächlich bearbeiten.
Bauen vs. übernehmen
Wie viel Editor-Infrastruktur benötigt Ihr Team?
Die eigentliche Entscheidung trifft selten "Puck oder GrapesJS". Es geht um, wie viel Editor-Infrastruktur dein Team besitzen und implementieren sollte. Diese Tabelle liest jede Fähigkeit aus der eigenen Dokumentation jedes Projekts: "Core" bedeutet ein dokumentiertes Modul, "konfigurierbar" bedeutet, dass das Projekt es durch Konfiguration oder Überschreibungen unterstützt, und "benutzerdefinierte Implementierung" bedeutet, dass dein Team es schreibt. Keine dieser Zellen bedeutet "unmöglich".
Leistungsfähigkeit
Puck
GrapesJS
React-Komponentenbearbeitung
Kernkraft
Integration – benutzerdefinierte Komponententypen oder der React-Wrapper
Visuelle Leinwand
Verfügbar — iframe-Vorschau
Kern
Blöcke
Komponenten und Konfiguration
Kern — Block Manager
Stilsystem
Benutzerdefiniert und konfigurierbar
Kern — Style Manager
Schichten und Umriss
Verfügbar und anpassbar
Kern — Layer Manager
Assets
Individuelle Implementierung oder Integration
Kern — Asset Manager
Responsive Bearbeitung
Viewports und Konfiguration
Kern — Device Manager
Commands
Custom, in deiner Anwendung
Kern — Commands
Lagerung
Anwendungsverantwortlichkeit
Kern – Storage Manager, plus deine Integration
Projektdaten
JSON von Komponentenprops
Projektdaten – Struktur, Stil, Assets und Seiten
HTML- und CSS-Ausgaben
Nicht das primäre Modell
Kernanwendung
Benutzerdefinierter Editor UI
Hochgradig anpassbar
Hochgradig anpassbar
Plugins
Plugin API
Plugin API und Marktplatz-Ökosystem
E-Mail-Workflows
Kein dokumentierter Schwerpunkt
Verfügbar über das Ökosystem
2026-09-03 wurde mit puckeditor.com/docs und grapesjs.com/docs überprüft. Eine Fähigkeit mit der Markierung "benutzerdefinierte Implementierung" für ein Projekt ist kein Fehler – es ist eine Designentscheidung darüber, was in die Bibliothek gehört und was in Ihre Anwendung gehört.
Dies sind dokumentierte Module des GrapesJS-Kerns, und sie sind das, was "eine breitere Editor-Grundlage" konkret für einen visuellen Website-Builder, SaaS-Seiteneditor, CMS-Editor, E-Mail-Builder oder White-Label-Editor bedeutet.
▣
Visuelle Leinwand
Eine vollständige visuelle Bearbeitungsumgebung, die ein Live-Dokument rendert, keine Vorschau eines Komponentenbaums.
◈
Komponenten
Definiere editierbare Komponententypen mit eigenem Modell, traits und Verhalten auf der Leinwand.
▤
Blöcke
Registrieren Sie wiederverwendbare Drag-and-Drop-Blöcke, aus denen Nutzer Seiten erstellen.
◐
Style Manager
Visuelle Steuerungen für Typografie, Abstand, Farbe, Abmessungen und mehr, abgegrenzt durch einen Selektor.
◇
Asset Manager
Durchstöbern, laden Sie Bilder und andere Medien aus dem Editor hoch und verwenden Sie sie wieder.
▭
Device Manager
Definiere Viewports und lass Nutzer über reaktionsfähige Breakpoints hinweg bearbeiten.
⛁
Lagerung
Verbinde Editor-Daten mit deinem eigenen Backend, mit lokalem oder entferntem Speicher und autosave.
⌘
Commands
Erweitern Sie das Verhalten eines Skripteditors und binden Sie es an Ihr eigenes UI.
⬡
Plugins
Fügen Sie Funktionalität hinzu, ohne den Kerneditor zu verändern – den Erweiterungspunkt, auf dem das Ökosystem aufgebaut ist.
⟨⟩
HTML / CSS
Exportiere portable Markup-Modelle und Stile, die du überall rendern kannst, wo du kontrollierst.
✉
E-Mail
Erweitere denselben Editor für HTML-E-Mail- und MJML-Workflows über Ökosystem-Plugins.
Merkmalsmatrix
Puck vs. GrapesJS
Fähigkeit für Fähigkeit, im eigenen Wortschatz jedes Projekts. Beide Projekte bewegen sich, daher spiegelt dies das wider, was ihre Dokumentation zum untenstehenden Verifizierungsdatum abdeckt. Zellen vermeiden ein klares Ja/Nein, wo die ehrliche Antwort "unterstützt, aber du konfigurierst oder implementierst es".
Leistungsfähigkeit
GrapesJS
Puck
Architektur
Visueller Dokumenteditor mit eigenem Komponentenbaum
React-Komponentenbaum, bearbeitet als typisierte Props
Lizenz
BSD-3-Clause core, MIT React wrapper
MIT — @puckeditor/core 0.23.0
Open Source
Ja
Ja
React-Abhängigkeit
Keine im Kern; offizieller React-Wrapper verfügbar
Erforderlich – React ist die Laufzeit
Rahmenflexibilität
Framework-agnostischer Kern
React-fokussiert von Design
Visuelle Leinwand
Core – ein Live-Dokument in einem iframe
Eingebaut — iframe-Vorschau derselben Herkunft
Komponenten
Komponententypen mit Modell, Ansicht und traits
Kernstärke – deine eigenen React-Komponenten
Blöcke
Kern — Block Manager
Komponenten-Drawer; slot-Felder zum Verschachteln
Schichten / Umriss
Kern — Layer Manager
Eingebaut — Umrissregion, ersetzbar über Übersteuerungen
Stilmanagement
Core — Style Manager mit visuellen CSS-Steuerungen
Ihr eigenes CSS und Designsystem; der Theming API gestaltet den Editor UI
Assets und Medien
Core — Asset Manager mit steckbaren Quellen
Benutzerdefinierte Implementierung – bereitstellen Sie ein Feld-UI oder eine externe Quelle bereit
Gerätevorschau
Kern — Device Manager
Eingebaut — Viewports
Responsive Bearbeitung
Visuelle Breakpoint-Bearbeitung über den Style Manager
Viewport-Wechsel; responsive Regeln finden sich in deinem eigenen CSS
Commands
Kern — Commands
Anwendungsverantwortung – Versand und Maßnahmen
Rückgängig machen und neu machen
Kern — UndoManager
Eingebaut — dokumentierte Geschichte API
Rich Text Editing
Eingebautes RTE, erweiterbar
Eingebaut — richtext-Feld- und Rich-Text-Menükomponenten
Individuelle Komponenten
Komponente API — addType()
Core – jede React-Komponente plus ein ComponentConfig
Hochgradig anpassbar – dreizehn Override-Slots plus Komposition
Vorlagen
Plugin – Vorlagenmanager-Listings
Anwendungsverantwortung – Speicherung und Neuladen gespeicherter Daten
Lagerung
Core — Storage Manager, lokal oder Ihr Backend
Anwendungsverantwortung – Sie speichern die Daten
Projektdaten
Komponenten, Stile, Assets, Seiten und Editor-Zustand
JSON von Komponentenprops, unter Content und Root
HTML- und CSS-Ausgaben
Kernanwendung — exportiert portable HTML und CSS
Nicht das primäre Modell – die Ausgabe wird als React gerendert
React-Rendering
Integration – React einbauen oder exportierte Markup-Daten rendern
Core – eine Render-Komponente spielt die gespeicherten Daten erneut ab
React Server Components
Client-seitiger Editor – überprüfen Sie Ihre Integrationsanforderungen
Opt-in-Unterstützung, dokumentiert
E-Mail-Workflows
Verfügbar über das Plugin-Ökosystem
Kein dokumentierter Anwendungsfall
MJML
Plugin — MJML-Presets und Export
Nicht anwendbar
Plugins
Plugin API und ein öffentlicher Marktplatz
Plugin API- und UI-Übersteuerungen
KI-Unterstützung
Nicht im Kern – benutzerdefinierte Integration
Dokumentiertes KI-Plugin und Cloud-Client
Selbsthosting
Ja – du leitest den Editor
Ja – du leitest den Editor
White-Label
Austauschbares UI, Panels und Branding
Theming API- und UI-Übersteuerungen
SaaS-Einbettung
Integrieren Sie den Editor in Ihr Produkt
Binde den Editor in dein React-Produkt ein
Benutzerdefiniertes Backend und Datenbank
Storage Manager spricht mit deinem eigenen API
Anwendungsverantwortung – Sie besitzen den Transport
Berechtigungen
Anwendungsverantwortung – sperre die von dir bereitgestellten Befehle
Eingebaut — Berechtigungen API und Funktionsumschalten
Verlagswesen
Anwendungsverantwortlichkeit
Anwendungsverantwortlichkeit
Plugin-Marktplatz
GJS.Market — 100+ plugins
Community-Plugin-Liste
2026-09-03 mit der offiziellen Dokumentation jedes Projekts überprüft. "Core" bedeutet ein dokumentiertes Modul der Bibliothek; "über Konfiguration" und "benutzerdefinierte Implementierung" bedeuten, dass die Funktionalität erreichbar ist, aber dein Team baut sie zusammen. Keine Zelle hier bedeutet, dass ein Projekt nichts tun kann.
Dann sind beide spielbar. Puck passt besser, wenn React die Kern-Anwendungsarchitektur ist, Komponenten das Inhaltsmodell sind, der Editor Komponenten manipulieren sollte und dein Designsystem bereits tief mit React integriert ist. GrapesJS passt besser, wenn React eine Integrationsschicht ist und nicht die gesamte Editor-Architektur – wenn du auch HTML und CSS visuelle Bearbeitung brauchst, den Editor in verschiedenen Frontend-Umgebungen wiederverwenden möchtest oder die breiteren Editor-Subsysteme brauchst.
Next.js
↓
React
↓
GrapesJS
↓
Your Components
↓
Your Backend
npm install grapesjs @grapesjs/react
Mounten Sie den Herausgeber.tsx
import { useRef } from 'react';
import grapesjs from 'grapesjs';
import GjsEditor from '@grapesjs/react';
import 'grapesjs/dist/css/grapes.min.css';
// GrapesJS runs on the client: it owns an iframe canvas and a live document.
// In Next.js, mount it from a client component.
export default function Editor() {
return (
<GjsEditor
grapesjs={grapesjs}
options={{
height: '100vh',
storageManager: { type: 'remote', autosave: true },
}}
onEditor={(editor) => {
// Register the component types you mapped from your Puck config here.
}}
/>
);
}
Deine Komponenten bleiben deine. Der Editor sitzt zwischen ihnen und dem Dokument, das deine Nutzer erstellen, und speichert es in deinem eigenen Backend.
Eine Produktform pro Reihe, ein Urteil. Drei davon gehen direkt an Puck, und einer ist wirklich unentschieden – wenn jede Reihe in die gleiche Richtung zeigen würde, wäre die Tabelle nicht lesenswert.
Was du baust
Besserer Ausgangspunkt
Ein React-Komponentenkonfigurator
Puck
Ein Editor für dein React-Designsystem
Puck
Ein hochgradig maßgeschneidertes, React-natives Bearbeitungserlebnis
Puck
Ein Marketing-Seiten-Builder
GrapesJS
Ein Page Builder in Ihrem SaaS-Produkt
GrapesJS
Ein kundenorientierter Website-Builder
GrapesJS
Ein E-Mail-Builder
GrapesJS
Ein framework-unabhängiger visueller Editor
GrapesJS
Eine visuelle Bearbeitungsfläche für einen kopflosen CMS
Beide
Wenn du noch nicht sagen kannst, welche Zeile dein Produkt beschreibt, ist die Wahl eines Editors verfrüht. Schreibe die drei Dinge auf, die deine Nutzer ändern können, und die Antwort löst sich meist von selbst.
SaaS
Einen visuellen Editor in deinen SaaS einbauen?
Dies ist der Abschnitt, der verhindert, dass der Rest der Seite zu vielversprechend wird. GrapesJS stellt die Bearbeitungsebene bereit. Ihr SaaS besitzt weiterhin Authentifizierung, Autorisierung, Persistenz, Abrechnung, Veröffentlichung und Geschäftslogik – und das ist die größere Hälfte des Projekts.
Dein SaaS besitzt
8-Aufgaben
Alles, was es zu einem Produkt und nicht zu einem Editor macht.
Authentifizierung und Sitzungen
Organisationen und Teammitgliedschaft
Rollen und Berechtigungen
Abrechnung, Pläne und Ansprüche
Ihre Datenbank und Ihr Datenmodell
Veröffentlichung und Hosting dessen, was Nutzer bauen
Versionierung, Entwürfe und Rollback
Prüfungsspuren und unterstützende Werkzeuge
GrapesJS bietet
5-Aufgaben
Die Bearbeitungsebene konfiguriert man als dokumentierte Module.
Leinwand und Komponentenbaum
Blöcke, Ebenen, Stile und Assets
Responsive Bearbeitung und Gerätevorschau
Commands, rückgängig machen und neu machen
Projektdaten rein, Projektdaten raus
Du baust trotzdem
6-Aufgaben
Die Integration zwischen beiden – das eigentliche Projekt.
Das ist der Teil, den Puck standardmäßig richtig macht, und der Teil, bei dem eine GrapesJS-Integration bewusst sein muss. Ihre Nutzer sollten mit den Komponenten und Blöcken arbeiten, die für Ihr Produkt sinnvoll sind, und nicht mit generischen Seitenbau-Primitiven.
Marketing-Abschnitte
Die Abschnitte, aus denen eine Landingpage tatsächlich besteht.
Blöcke im Panel
Hero
Pricing
CTA
Testimonials
Produktoberflächen
Wiederverwendbare Chrom- und interaktive Teile.
Blöcke im Panel
Product Card
Navigation
Forms
Footer
Handelsblöcke
Storefront-spezifische Komponenten mit eigenen Daten.
Blöcke im Panel
Collection Grid
Cart Summary
Checkout Steps
Badges
In GrapesJS sind das Komponententypen, die mit addType() registriert und über Block Manager freigegeben werden, wobei traits für die Requisiten, die ein Nutzer ändern kann, berücksichtigt. Die Palette auf das eigene System einzuschränken, sorgt dafür, dass die Ausgabe brandtreu bleibt, ohne sie danach zu kontrollieren.
Brauchen Sie mehr als nur einen Webseiten-Builder?
Wenn Ihre Roadmap Newsletter, CRM-Vorlagen, Marketingautomatisierung, transaktionale Vorlagen oder einen kundenorientierten E-Mail-Builder enthält, kann derselbe Editor-Kern mit E-Mail- und MJML-Tools erweitert werden. E-Mail-Rendering ist eine eigene Disziplin: Kein Editor garantiert universelle Kundenkompatibilität, und die finalen Vorlagen müssen weiterhin bei echten Kunden getestet werden.
Your SaaS↓GrapesJS↓
Web Page Builder
Email BuilderDie E-Mail-Filiale fährt fort:↓MJML↓Email HTML
Die eigene Demo des GrapesJS-Projekts – die kostenlose Baseline mit dem vollständigen Standard-Panel-Set.
grapesjs.com/demo.htmlKostenlos
grapesjs.com/demo.html
Blöcke
Stile
Lädt eine externe Demo in einem iframe
Ökosystem
Erweitere deinen GrapesJS-Editor
Gruppiert nach dem, was du baust. Jede Karte unten ist ein echtes Angebot – Name, Preis und Vorschaubild stammen direkt aus dem Katalog, daher kann hier nichts ein Plugin bewerben, das nicht existiert.
React und SaaS
React UI-Layer und Editor-Shells für Teams, die einen Builder in ein Produkt einbauen.
Die angezeigten Preise sind aktuelle Katalogpreise.
Migration
Migration von Puck zu GrapesJS
Puck und GrapesJS verwenden unterschiedliche Inhalts- und Editor-Modelle, daher ist eine Migration eine Datenmodell-Transformation und kein Paketersatz. Alles unten beschrieben diese Transformation.
Puck
Deine Konfiguration plus die Requisiten jeder platzierten Komponente.
Configuration
Component Props
JSON Data
GrapesJS
Ein Projektdokument, das Struktur, Stil, Medien und den Zustand des Editors abdeckt.
Components
Styles
Assets
Pages
Editor State
Storage
Bestehende Inhaltsmodelle und Editor-Konfigurationen müssen zugeordnet, nicht portiert werden. Die nächsten beiden Abschnitte zeigen die Zuordnung und die Roadmap.
Kartierung
Von Puck-Komponenten zu GrapesJS-Komponenten
Jede Seite hat ihren eigenen Vokabular für dieselbe Idee: etwas, das Nutzer platzieren können, und die Teile davon können sie bearbeiten. Eine Migration ist die Transformation zwischen beiden.
Puck
Component
Props
Fields
Render
Migrationsschicht
Eine Transformation, die man einmal pro Bauteiltyp schreibt. Es gibt keinen automatischen Konverter – das ist die Arbeit.
GrapesJS
Component
Traits
Attributes
Blocks
Commands
Storage
Was muss kartiert werden
Komponenten
Jeder Puck-Komponententyp wird zu einem GrapesJS-Komponententyp.
Editierbare Felder
Puck-Felder werden zu traits, Attributen oder editierbaren Kindkomponenten.
Requisiten und Defaults
defaultProps werden auf die Standardwerte des Komponentenmodells abgebildet.
Validierung
Feldbeschränkungen fließen in Merkmaledefinitionen oder eigene Proben ein.
Rendering
Eine React-Renderfunktion wird zu Markup, das die Leinwand hosten kann.
Blöcke
Was in der Konfiguration implizit war, wird zu einer expliziten Blockregistrierung.
Gespeicherte Inhalte
Bestehende Puck JSON muss in Projektdaten umgewandelt werden.
Editor UI
Panels, Felder und Overrides werden neu konfiguriert, nicht portiert.
Der Migrationsaufwand hängt von der Anzahl der Komponenten, deinem bestehenden Inhaltsschema, eventuellem Verhalten eines benutzerdefinierten Editors und deinen Integrationen ab. Eine Handvoll einfacher Komponenten ist eine ganz andere Aufgabe als eine große Bibliothek mit maßgeschneiderten Feld-UIs.
Beispiel
Beispiel: Migration einer hero-Komponente
Ein konzeptuelles Vorher-Nachher-Bild, vereinfacht, um die Form der Abbildung darzustellen. Behandle die exakte Feld-zu-Merkmal-Entsprechung als illustrativ und nicht als universelle automatische Umwandlung.
Puck: Konfiguration + Rendernjsx
// Puck: a component is configuration + a React render function.
// Field types are documented at puckeditor.com/docs/api-reference/fields
const config = {
components: {
Hero: {
fields: {
title: { type: 'text' },
description: { type: 'textarea' },
image: { type: 'text' },
},
defaultProps: {
title: 'Ship faster',
description: 'The visual editor your team already knows.',
image: '/hero.png',
},
render: ({ title, description, image }) => (
<section className="hero">
<img src={image} alt="" />
<h1>{title}</h1>
<p>{description}</p>
</section>
),
},
},
};
GrapesJS: Bauteiltyp + Blockjs
// GrapesJS: a component type owns its markup, its editable traits and how it
// is exposed to the canvas. Traits are the closest analogue to Puck fields.
editor.Components.addType('hero', {
model: {
defaults: {
tagName: 'section',
attributes: { class: 'hero' },
traits: [
{ name: 'title', type: 'text', changeProp: true },
{ name: 'description', type: 'text', changeProp: true },
{ name: 'image', type: 'text', changeProp: true },
],
components: [
{ type: 'image' },
{ tagName: 'h1', type: 'text', content: 'Ship faster' },
{ tagName: 'p', type: 'text', content: 'The visual editor…' },
],
},
},
});
// A block is what makes the type draggable from the panel. Puck derives this
// from the config; in GrapesJS it is a separate, explicit registration.
editor.Blocks.add('hero-block', {
label: 'Hero',
category: 'Sections',
content: { type: 'hero' },
});
Migration von Inhalten, die du bereits hast
Die Konfiguration ist nur die Hälfte davon. Alles, was deine Nutzer bereits gespeichert haben, ist Puck JSON, und es muss durchgelaufen und in Komponenten umgewandelt werden, die deine neuen Typen verstehen.
Migration von Inhalten, die du bereits hastjs
// Existing Puck content is a JSON tree of { type, props } nodes. Migrating it
// means walking that tree and emitting the GrapesJS component definitions your
// new types understand — a transform you write once, per component type.
function puckNodeToGjs(node) {
const map = {
Hero: ({ title, description, image }) => ({
type: 'hero',
title,
description,
image,
}),
// …one entry per component type in your Puck config
};
const toGjs = map[node.type];
if (!toGjs) throw new Error(`Unmapped Puck component: ${node.type}`);
return toGjs(node.props);
}
// Puck stores content under `data.content`; `data.root` holds page-level props.
const components = puckData.content.map(puckNodeToGjs);
editor.setComponents(components);
Konzeptionelles Beispiel. Feldtypen, Eigenschaftsdefinitionen und das genaue Komponentenmodell hängen von deinen eigenen Komponenten ab.
Fahrplan
Eine praktische Migration von Puck zu GrapesJS
1
Schritt 1
Inventar
Listen Sie auf, was existiert: Puck-Komponenten, deren Felder, Ihre Inhaltstypen, das gespeicherte JSON, den Renderer und den Veröffentlichungsfluss. Die meisten Überraschungen bei einer Migration finden Sie in dieser Liste.
2
Schritt 2
Kartenkomponenten
Entscheide die Entsprechung, bevor du Code schreibst: Puck-Komponente zu GrapesJS-Komponententyp, Puck-Feld zu Trait, Attribut oder benutzerdefiniertes UI, Puck-Layout zu Komponentenstruktur, Puck-Daten zu Projektdaten.
3
Schritt 3
Baue den Editor UI neu auf
Erstelle nur die Benutzeroberfläche, die deine Nutzer tatsächlich nutzen. Eine Migration ist der günstigste Zeitpunkt, um die Panels zu entfernen, die niemand geöffnet hat.
4
Schritt 4
Migrierung bestehender Inhalte
Gehen Sie durch den gespeicherten Puck-Baum und senden Sie die Komponentendefinitionen, die Ihre neuen Typen verstehen. Behalten Sie die Transformation in der Versionskontrolle – Sie werden sie mehr als einmal ausführen.
5
Schritt 5
Führen Sie beide parallel aus
Wo das Risiko hoch ist, lass den alten Editor alte Inhalte rendern, während der neue neue Inhalte übernimmt. Duales Rendern verschafft dir die Möglichkeit, aufzuhören.
6
Schritt 6
Validieren
Vergleichen Sie visuelle Ausgaben, responsives Verhalten, Veröffentlichung, gespeicherte Daten und die tatsächlich durchgeführten Arbeitsabläufe Ihrer Nutzer – nicht nur, dass der Editor lädt.
7
Schritt 7
Schnitt über
Überweise die Nutzer, sobald der Vergleich sauber ist, wobei der alte Pfad noch erreichbar ist, bis der neue einen vollständigen Nutzungszyklus durchlaufen hat.
Kein Tor
Der Migrationsleitfaden ist diese Seite
Alles oben Genannte ist der Leitfaden – keine E-Mail erforderlich, nichts gesperrt, kein versprochener Zeitrahmen. Der Migrationsaufwand hängt davon ab, wie viele Komponenten du hast, wie viel benutzerdefiniertes Editor-Verhalten du gebaut hast und wie viel Inhalt bereits existiert, daher nennen wir keine Dauer, die wir nicht unterstützen können.
⇄
Konzeptabbildung
Puck-Konfiguration, Felder, Requisiten und Render, abgestimmt auf GrapesJS-Komponententypen, traits, Blöcke und Speicher.
☑
Komponenten-Checkliste
Die acht Dinge, die pro Komponententyp abgebildet werden müssen, sind oben aufgeführt.
⛁
Datenmodell-Checkliste
Was Puck bleibt im Vergleich zu dem, was ein GrapesJS-Projekt enthält, und wo jedes Element landet.
⚛
React- und Next.js-Aufbau
Wie der Editor in einer React-App montiert wird und was das in Next.js bedeutet.
◐
Stil und Asset-Aufbau
Welche Subsysteme zuerst konfiguriert werden, damit der Editor fertig und nicht roh wirkt.
⇥
Einführung und Qualitätssicherung
Migriere jeweils eine Oberfläche, behalte die Originale und vergleiche die gerenderten Ausgaben mit der Quelle.
Wir können Ihnen helfen, Ihre bestehenden Puck-Komponenten und Ihr Inhaltsmodell einer produktionsbereiten GrapesJS-Implementierung zuzuordnen. Umfang und Zeitplan werden nach der Überprüfung der Architektur vereinbart – wir geben keine Zeitpläne an, bevor wir den Code gesehen haben.
1
1
Architektur-Review
Wir lesen deine Puck-Konfiguration, das Inhaltsmodell und die Editor-Anpassungen und schreiben auf, was tatsächlich bewegt werden muss.
2
2
Komponentenabbildung
Jede Puck-Komponente wird zu einem spezifizierten GrapesJS-Komponententyp mit ihrem traits, Block und Einschränkungen.
3
3
Datenmigration
Eine Transformation für Ihre gespeicherten Inhalte, ausgeführt mit Ihren echten Daten statt mit einer Stichprobe.
4
4
Benutzerdefinierter Editor UI
Die Panels, Chrome und Interaktionen, die Ihre Nutzer brauchen – gestaltet, um zu Ihrem Produkt zu passen, nicht zur Standard-Demo.
5
5
Plugins und Erweiterungen
Marktplatz-Plugins, wo sie passen, benutzerdefinierte Plugins, wo sie nicht passen.
6
6
Backend-Integration
Speicher, Assets, Berechtigungen und Veröffentlichung sind verkabelt in deine eigene API und Datenbank.
7
7
Tests und Einsatz
Output-Vergleich, reaktionsschnelle Überprüfungen und ein Cutover-Plan mit einem Rückweg.
Es gibt keine einzige beste Alternative – es kommt darauf an, wofür dein Editor gedacht ist. GrapesJS ist die stärkste Option, wenn du eine breitere visuelle Editor-Basis mit Leinwand, Blöcken, Stilen, Ebenen, Assets und responsivem Editing brauchst. Craft.js ist im Geiste näher an Puck als React-First-Framework. Wenn dein Editor wirklich ein React-Komponentenkonfigurator ist, ist die beste Alternative, bei Puck zu bleiben.
Ist GrapesJS eine Alternative zu Puck?
Ja, für eine bestimmte Art von Produkt. Beide ermöglichen es, einen visuellen Editor in der App zu bauen, beide sind Open Source und selbstgehostet. Sie unterscheiden sich im Ausgangspunkt: Puck bearbeitet einen React-Komponentenbaum, GrapesJS bearbeitet ein visuelles Dokument. GrapesJS ist eine echte Alternative, wenn man das visuelle Dokumentmodell benötigt; es passt schlechter, wenn React-Komponenten das Inhaltsmodell sind.
Was ist der Unterschied zwischen Puck und GrapesJS?
Puck ist ein React-erster Editor, der darauf ausgerichtet ist, eigene React-Komponenten zu erstellen und zu konfigurieren: Seine Daten sind JSON, die Komponententypen und Requisiten beschreiben, und das Rendering erfolgt über React. GrapesJS ist eine breitere Grundlage für visuelle Editoren, die auf einem visuellen Dokument basiert, mit dokumentierten Modulen für Komponenten, Blöcke, Stile, Schichten, Assets, Geräte, Befehle und Speicher sowie HTML und CSS als erstklassige Ausgabe.
Ist Puck nur für React?
Puck läuft innerhalb von React – React ist die Laufzeit sowohl für den Editor als auch für die gerenderte Ausgabe. Die Daten sind schlicht JSON, sodass ein anderes System sie lesen könnte, aber das Bearbeitungs- und Rendererlebnis ist von Natur aus React-nativ. Das ist eine Stärke von React-Produkten und eine Einschränkung, wenn derselbe Editor irgendwo laufen muss, wo React nicht der Host ist.
Kann GrapesJS mit React funktionieren?
Ja. GrapesJS liefert einen offiziellen React-Wrapper, @grapesjs/react, aus, und der Kerneditor ist framework-agnostisch, sodass er wie jede andere clientseitige Komponente in einer React- oder Next.js-Anwendung montiert wird. Siehe die GrapesJS React-Integrationsanleitung für die Montagemuster.
Kann GrapesJS React-Komponenten verwenden?
Man kann React-Komponenten in einen GrapesJS-Editor integrieren, aber nicht so wie Puck. GrapesJS-Komponententypen besitzen ihr Markup im Canvas-Dokument, daher wird eine React-Komponente typischerweise als GrapesJS-Typ mit dem passenden traits gespiegelt oder über eine benutzerdefinierte Ansicht in die Leinwand gerendert. Es handelt sich um eine Integrationsschicht und nicht um das native Modell.
Kann ich GrapesJS mit Next.js verwenden?
Ja. GrapesJS ist ein clientseitiger Editor, der eine iframe-Leinwand besitzt, daher muss er von einer Client-Komponente montiert werden. Im Pages Router bedeutet das meist einen dynamischen Import mit deaktiviertem SSR; im App Router reicht eine Client-Komponente aus.
Kann Puck HTML und CSS bearbeiten?
Nicht als Primärmodell. Puck bearbeitet Komponentenrequisiten, und das Markup und Styling stammen von den React-Komponenten, die du geschrieben hast. Natürlich kannst du eine Komponente bauen, die rohes Markup oder Klassennamen akzeptiert, aber es gibt keine dokumentierte visuelle HTML- oder CSS-Bearbeitungsfläche, so wie GrapesJS ein Style Manager und ein editierbares Dokument bereitstellt.
Ist GrapesJS für SaaS-Produkte geeignet?
Ja – es ist darauf ausgelegt, eingebettet zu werden, und dient als Bearbeitungsschicht innerhalb von SaaS-Produkten. Es stellt den Editor zur Verfügung, nicht das Produkt: Authentifizierung, Organisationen, Berechtigungen, Abrechnung, Persistenz und Veröffentlichung bleiben Ihre Aufgabe.
Kann ich mit GrapesJS einen Page Builder bauen?
Ja. Das ist der zentrale Anwendungsfall: eine Leinwand, eine Blockpalette, Stilsteuerungen, Ebenen, Assets, responsive Geräte sowie HTML- und CSS-Ausgaben. Was du hinzufügst, ist deine eigene Blockbibliothek, Editor UI und Speicher.
Kann ich mit GrapesJS einen White-Label-Editor erstellen?
Ja. Der Editor UI ist austauschbar – Panels, Buttons und Ansichten können getauscht oder neu aufgebaut werden, und es gibt kein Vendor-Branding, das du anzeigen musst. Multi-Tenant-Branding, Blocksätze pro Tenant und Berechtigungen sind Dinge, die deine Anwendung darüber implementiert.
Kann ich mit GrapesJS einen E-Mail-Editor bauen?
Ja, ich nutze Ökosystem-Plugins für E-Mail-Blöcke sowie MJML-Autoren und -Export. E-Mail-Rendering ist eine eigene Disziplin: Kein Editor kann eine universelle E-Mail-Client-Kompatibilität garantieren, daher müssen Templates weiterhin in den Clients getestet werden, die deine Empfänger tatsächlich verwenden.
Kann ich Puck-Inhalte auf GrapesJS migrieren?
Ja, indem man es transformiert. Puck speichert einen JSON-Baum mit Komponententypen und Requisiten; GrapesJS speichert Projektdaten, die Komponenten, Stile, Assets und Seiten beschreiben. Migration bedeutet, den Puck-Baum zu durchlaufen und die GrapesJS-Komponentendefinitionen zu liefern, die deine neuen Typen verstehen – eine Transformation, die du einmal pro Komponententyp schreibst.
Gibt es einen automatischen Puck-zu-GrapesJS-Wandler?
Nein. Es gibt keinen automatischen Konverter, und jede Seite, die einen behauptet, übertreibt das. Die beiden Editoren bestehen unterschiedliche Dinge bei, daher hängt das Mapping von deinen Komponenten und deinem Inhaltsschema ab. Was wiederverwendet werden kann, ist die Form der Transformation, die auf dieser Seite gezeigt wird.
Wie schwierig ist eine Puck-Migration?
Es hängt von der Anzahl der Komponententypen ab, wie viel benutzerdefiniertes Editor-Verhalten du gebaut hast, wie viel Inhalt bereits existiert und wie sehr dein Renderer mit React gekoppelt ist. Wir veröffentlichen keine Dauer, da eine Migration von sechs Komponenten mit sauberen Daten und einer von sechzig mit handbearbeitetem JSON nicht dasselbe Projekt ist.
Kann ich mein bestehendes React-Designsystem mit GrapesJS verwenden?
Ja, aber man verbindet sie absichtlich. Typischerweise registriert man pro Design-System-Komponente einen GrapesJS-Komponententyp, stellt die Requisiten offen, die Nutzer als traits ändern können, und fügt jedes einzelne dem Block Manager hinzu. Diese Einschränkung sorgt dafür, dass die Ausgabe brandgetreu bleibt.
Kann ich GrapesJS mit meiner eigenen Datenbank verbinden?
Ja. Der Storage Manager kann so konfiguriert werden, dass er über den eigenen API liest und schreibt, sodass Projektdaten in deiner Datenbank in jeder beliebigen Form leben. Nichts muss über einen Drittanbieterdienst laufen.
Kann ich GrapesJS selbst hosten?
Ja. Es ist ein npm-Paket, das du in deine eigene Anwendung einbindest – es gibt keinen gehosteten Dienst, kein Konto und keine Lizenz pro Sitz. Der Kern ist BSD-3-Clause-lizenziert und der React-Wrapper ist MIT.
Muss ich GJS.Market-Plugins verwenden?
Nein. GrapesJS ist vollständig nutzbar ohne Marktplatz-Plugins, und die Kernmodule sind kostenlos und Open Source. Plugins existieren, damit man eine Funktion kaufen kann, anstatt sie zu bauen – eine Editor-UI-Shell, E-Mail-Tools, eine Blockbibliothek –, wenn sich der Tausch für dein Team lohnt.
Sollte ich von Puck zu GrapesJS wechseln?
Nur wenn dein Editor das Komponenten-Konfigurator-Modell überwachsen ist. Wenn Nutzer nach visuellem Styling, Blöcken, Ebenen, Assets, Vorlagen, responsiven Steuerungen oder nicht-React-Ausgaben fragen, spart ein breiteres Fundament Arbeit. Wenn dein Editor deine React-Komponenten zusammenstellt und das auch weiterhin tun sollte, ist es die richtige Entscheidung, bei Puck zu bleiben.
Nächster Schritt
Aufbau über den Komponenteneditor hinaus
Wenn Puck bereits zu deinem React-Komponentenmodell passt, gibt es vielleicht keinen Grund zu wechseln. Aber wenn dein Editor zu einem vollständigen visuellen Produkt wird, bietet dir GrapesJS eine breitere Grundlage, auf der du aufbauen, anpassen und erweitern kannst.
Entwickler
Probier GrapesJS
Öffne einen Live-Editor, lies dann die Dokumentation und baue auf. Nichts zu installieren, um mit der Suche anzufangen.