PageKit — der selbst gehostete GrapesJS-Website-Builder, als Quellcode. Early Access sichern

Vue 3 · Nuxt · GrapesJS

Vue Page Builder mit GrapesJS

Baue einen visuellen Drag-and-Drop-Seitenbauer für Vue 3 und Nuxt mit benutzerdefinierten Blöcken, Komponenten, Vorlagen, responsiver Bearbeitung und deinem eigenen Speicher- und Veröffentlichungsworkflow.

Vue 3 & NuxtVisuelles Drag & DropIndividuelle KomponentenWiederverwendbare BlöckeResponsive BearbeitungDein BackendErweiterbar mit Plugins
app.yourproduct.com/pages/editor
Vue Page Builder

Blöcke

  • Hero
  • Merkmale
  • Preisgestaltung
  • Erfahrungsberichte
  • FAQ

Deine Seite

Desktop · Tablet · Mobil
Drei Panels und eine Leinwand: eine Blockbibliothek links, die Seite in der Mitte, Stilsteuerungen rechts, Gerätebreiten unten. Das ist die Benutzeroberfläche, die Ihre Nutzer erhalten – und der Teil, den Sie nicht selbst bauen müssen.

Sehen Sie sich die Vue-Integrationsanleitung an

0.23.6

GrapesJS-Version, gegen die diese Seite geschrieben ist

100+

Plugins und Vorlagen auf GJS.Market

BSD-3-Clause

Lizenz des Editor-Kerns

$0

Kosten für den Betrieb des Editors selbst

Sehen Sie es zuerst

Ein echter Seitenbauer, der auf dieser Seite läuft

Das ist GrapesJS selbst, kein Screenshot. Ziehe einen Block hinein, wähle ein Element aus, style es neu, wechsle die Gerätebreite. Der Editor wird durch einen 'init()'-Aufruf erstellt – in einer Vue-App, die live in 'onMounted' aufruft, und alles, was du hier siehst, verhält sich identisch.

  • Drag & drop
  • Style Manager
  • Layer Manager
  • Desktop / Tablet / Mobile
  • HTML + CSS export
Warum nicht von Grund auf neu

Baue einen visuellen Seitenbauer, ohne ganz von vorne anzufangen

Ein Produktionsseiten-Builder besteht aus weit mehr als nur ein paar Vue-Komponenten. Er ist eine Leinwand, ein Drag-and-Drop-System, ein Komponentenmodell, eine Stil-Engine, responsive Bearbeitung, Rückgängigkeitsverlauf, Asset-Handling, Speicherung und Export. Hier ist die gesamte Oberfläche und wer letztlich jedes Teil besitzt.

  • GrapesJS-Kern

    Leinwand bearbeiten

    Ein isoliertes Dokument bearbeitet Benutzer direkt, mit eigenen Stilen und Scrolls.

  • GrapesJS-Kern

    Drag & Drop

    Abwurfziele, Einfügungspunkte, Umordnungs- und Verschachtelungsregeln.

  • GrapesJS-Kern

    Komponentenmodell

    Typisierte Elemente mit eigenen Einstellungen, Einschränkungen und Verhalten.

  • GrapesJS-Kern

    Auswahl & Werkzeugleisten

    Klicken zum Auswählen, Umrisse mit dem Maus, Symbolleisten pro Element und Badges.

  • GrapesJS-Kern

    Style Manager

    Typografie-, Farb-, Abstands- und Layout-Steuerungen sind an die Selektoren gebunden.

  • GrapesJS-Kern

    Responsive Bearbeitung

    Gerätebreiten und Breakpoint-Scoped-Stile auf derselben Leinwand.

  • GrapesJS-Kern

    Layer Manager

    Ein Seitenbaum, sodass tiefe Strukturen navigierbar bleiben.

  • GrapesJS-Kern

    Rückgängig machen & neu machen

    Eine Befehlshistorie bei jeder Bearbeitung, nicht nur im Text.

  • GrapesJS-Kern

    HTML- und CSS-Export

    Sauberes Markup und Stylesheet, das aus dem aktuellen Dokument generiert wird.

  • Plugins

    Blockbibliothek

    Die fertigen Abschnitte, die die Nutzer einziehen. Deine oder installiert.

  • Plugins

    Vorlagen

    Ganze Startlayouts, damit niemand auf eine leere Leinwand trifft.

  • Plugins

    Vermögensverwaltung

    Uploads, Medienbibliotheken und Bildverarbeitung.

  • Plugins

    Rich Text Editing

    Inline-Textformatierung über den integrierten Editor hinaus.

  • Plugins

    Mehrseitige Projekte

    Mehr als eine Seite in einem einzigen Projekt.

  • Deine Vue-App

    Lagerung

    Wo Projektdaten geschrieben und gelesen werden. Ihr API, Ihre Datenbank.

  • Deine Vue-App

    Authentifizierung & Rollen

    Wer welches Projekt öffnen, bearbeiten und veröffentlichen darf.

  • Deine Vue-App

    Mehrfach-Mietverhältnisse

    Die Seiten, Assets und Vorlagen eines Kunden von den Seiten eines Kunden zu isolieren.

  • Deine Vue-App

    Verlagswesen & Hosting

    Genehmigte Ausgaben in eine Live-Seite über Ihre Infrastruktur zu verwandeln.

  • Deine Vue-App

    Pläne & Abrechnung

    Was jeder Kunde Anspruch hat und was er dafür bezahlt.

Wem gehört esGrapesJS-KernPluginsDeine Vue-App

Die mittlere Spalte ist der Sinn von GJS.Market: Sie installiert eine echte Fähigkeit und nicht die Terminplanung. Die rechte Spalte wird niemals zum Problem eines anderen – das ist Ihr Produkt, und diese Seite spricht in jedem Abschnitt explizit darüber.

Siehe die fünfstufige Integration
Architektur

Vue ist dein Framework. GrapesJS ist dein Editor.

GrapesJS ist kein Ersatz für deine Anwendung und kein gehosteter Dienst. Es ist eine Bearbeitungs-Engine, die in einem Element einer Route integriert ist. Alles darüber und darunter in diesem Diagramm bleibt deins.

  1. Ihre Vue / Nuxt-Anwendung

    Alles, was das Produkt zu deinem macht. GrapesJS hat zu keinem davon eine Meinung.

    • Authentifizierung
    • Nutzer
    • Routing
    • Abrechnung
    • Geschäftslogik
    • APIs
  2. Der GrapesJS-Editor

    Eine montierte Instanz, innerhalb einer Komponente, auf einer Route. Das ist die Schicht, die du nicht baust.

    • Leinwand
    • Blöcke
    • Komponenten
    • Stile
    • Schichten
    • Vermögenswerte
  3. Dein Backend

    Der Redakteur übergibt dir zwei Artefakte und einen Medienstream. Was als Nächstes passiert, ist die Entscheidung deines API.

    • Projekt JSON
    • HTML + CSS
    • Medien
    • Rollen
  4. Deine Datenbank

    Gewöhnliche Zeilen in einem von dir entworfenen Schema. Nichts hier ist ein GrapesJS-Format, das du übernehmen musst.

    • Projekte
    • Versionen
    • Mieter
    • Seiten

Lies es von oben bis unten: Deine Vue-Anwendung authentifiziert den Benutzer und leitet ihn zu einer Editor-Seite weiter; der Editor erstellt Projektdaten; dein API schreibt sie in deine Datenbank. Der Editor kommuniziert nie mit deiner Datenbank, und deine Datenbank muss den Editor nie verstehen.

Wie der Editor in eine Vue-Komponente eingebunden wird
Der Einwand

Ersetzt GrapesJS Vue?

Nein. Das ist die erste Frage, die die meisten Vue-Entwickler stellen, und die Antwort verändert, wie sich der Rest der Seite liest. Die beiden Ebenen überlappen sich nicht: Eine führt deine Anwendung aus, die andere betreibt eine Bearbeitungsfläche darin.

Vue / Nuxt

Vue bleibt verantwortlich für

Deine Anwendung, genau so, wie du sie heute gebaut hast.

  • Anwendung UI
  • Routing
  • Authentifizierung
  • Geschäftslogik
  • Staatsverwaltung
  • APIs und Datenabruf
  • Abrechnung und Pläne
  • Benutzer und Berechtigungen
GrapesJS

GrapesJS bietet

Die visuelle Bearbeitungsebene, in einem Element gibt man ihr.

  • Visuelle Leinwand
  • Drag & Drop
  • Blöcke
  • Komponenten
  • Stile
  • Schichten
  • Vermögenswerte
  • Gerätebreiten

Eine ehrliche Einschränkung: Die Leinwand rendert schlichte DOM in einem iframe, keine montierten Vue-Komponenten. Deine App ist Vue; was deine Nutzer bearbeiten, ist HTML und CSS, die deine App dann nach Belieben rendert.

Ergebnisse

Was kann man mit Vue + GrapesJS bauen?

Die gleiche Engine, anders konfiguriert. Jede dieser Modelle ist ein echtes Produkt, das Teams darauf ausliefern – und jede hat hier eine Seite, die tiefer geht.

Fähigkeiten

Alles, was du für einen visuellen Seitenbauer brauchst,

Das gibt dir der Editor am ersten Tag an, bevor ein einzelnes Plugin installiert wird. Jedes Plugin ist konfigurierbar – Panels, Kategorien, Einschränkungen und Labels können alle dir einstellen.

Drag & Drop

Benutzer erstellen Layouts, indem sie Abschnitte und Elemente in die Leinwand ziehen, mit Drop-Targets, Neuordnung und Verschachtelung.

Komponenten

Definiere deine eigenen Elementtypen mit eigenen Einstellungen, Einschränkungen und Verhalten und verwende sie in jedem Projekt wieder.

Blöcke

Die einsatzbereiten Abschnitte, die Nutzer aus dem Panel ziehen. Gruppieren Sie sie in Kategorien, die zum Wortschatz Ihres Produkts passen.

Style Manager

Typografie-, Farb-, Abstands- und Layout-Steuerungen. Beschränke die Eigenschaftsmenge, damit Nutzer sich nicht aus deinem Designsystem herausstylen können.

Responsive Bearbeitung

Wechsle die Leinwand zwischen Desktop-, Tablet- und Mobilbreiten und schreibe Breakpoint-Scope-Stile an der Stelle.

Schichten

Ein struktureller Baum der Seite, sodass ein tief verschachteltes Layout auswählbar und umgeordnet bleibt.

Vermögenswerte

Ein Asset-Manager für Bilder und Medien, unterstützt von dem Speicher oder CDN, den du bereits nutzt.

Vorlagen

Wiederverwendbare Anfangslayouts, sodass eine neue Seite als etwas beginnt und nicht als leere Leinwand.

Export

Generiere HTML und CSS aus dem aktuellen Dokument oder nimm die Projektdaten und rendere sie auf deine eigene Weise.

Anpassung

Erstellen Sie einen Seitengenerator rund um Ihr Produkt

Der Unterschied zwischen einem generischen Website-Builder und einem Builder, der zu Ihrem Produkt gehört, ist der Komponentensatz. Zwingen Sie Ihr Content-Modell nicht in die Elementtypen anderer – registrieren Sie Ihr eigenes.

  1. Your product
  2. Custom components
  3. Custom blocks
  4. Custom templates
  5. Custom commands
  6. Custom UI

Jeder Schritt ist eine gewöhnliche Konfiguration in der Editor-Instanz: ein Komponententyp, ein Block, der sie einfügt, eine Vorlage, die mehrere anordnet, ein Befehl, der darauf wirkt, und ein Panel, das sie offenstellt.

Baumeister/registerProductBlocks.tsts
// builder/registerProductBlocks.ts
import type { Editor } from 'grapesjs';

// A plugin is just a function that receives the editor, so everything below
// works identically in Vue, Nuxt, React or a plain HTML page.
export function registerProductBlocks(editor: Editor): void {
  // A custom component type: your own element, with your own settings.
  editor.DomComponents.addType('pricing-table', {
    isComponent: (el) => el.dataset?.gjsType === 'pricing-table',
    model: {
      defaults: {
        droppable: false,
        traits: [
          { name: 'plan', type: 'select', options: ['free', 'pro', 'team'] },
          { name: 'highlight', type: 'checkbox' },
        ],
      },
    },
  });

  // A block: what the user actually drags in from the panel.
  editor.BlockManager.add('pricing-table', {
    label: 'Pricing',
    category: 'Sections',
    content: { type: 'pricing-table' },
  });
}
  • Ein Komponententyp definiert, was ein Element ist: was es akzeptiert, was es ablehnt und welche Einstellungen es freilegt.
  • Ein Block ist das, was Nutzer im Panel sehen – derselbe Typ kann mehrere Blöcke mit unterschiedlichen Presets unterstützen.
  • Traits werden zur Einstellungs-Seitenleiste, sodass deine Nutzer Elemente konfigurieren, anstatt das Markup zu bearbeiten.
  • 'droppable: false' und passende Einschränkungen sind die Methoden, wie man verhindert, dass eine entworfene Komponente auseinandergebaut wird.
  • Mit Befehlen können Sie eigene Aktionen anhängen – veröffentlichen, auf einen anderen Tenant duplizieren, Überprüfung anfordern.
  • Nichts davon ist Vue-spezifisch: Ein Plugin ist eine Funktion, die den Editor empfängt, also funktioniert es auch in Nuxt, React oder einfachem HTML.

Zwinge dein Produkt nicht in einen generischen Website-Builder. Passe den Editor an dein eigenes Content-Modell und Design-System an.

Verwaltung

Halten Sie Ihr Designsystem unter Kontrolle

Eine uneingeschränkte Leinwand erzeugt Seiten, die das Produkt, in dem sie leben, peinlich machen. Der Editor ist in beide Richtungen konfigurierbar – die nützliche Einstellung ist nicht maximale Freiheit, sondern begrenzte Freiheit.

Was Nutzer tun können sollten

  • Seiten aus genehmigten Blöcken in beliebiger Reihenfolge zusammenstellen
  • Schreiben und bearbeiten Sie ihre eigene Texte vor Ort
  • Tausche Bilder aus der Asset-Bibliothek aus
  • Wählen Sie zwischen definierten Layout-Varianten
  • Inhalte pro Gerätebreite anpassen
  • Beginne mit einer Vorlage und weiche davon ab

Was der Editor konstant halten sollte

  • Typografie-Maßstab und Schriftfamilien
  • Die Markenpalette, die als benannte Farben präsentiert wird, statt als Picker
  • Abstandsschritte statt beliebiger Pixelwerte
  • Welche Komponenten in welchen verschachtelt sein können
  • Welche Blockaden eine bestimmte Rolle oder ein Plan überhaupt sehen können
  • Die strukturellen Abschnitte, die eine Vorlage garantiert, garantiert

Geben Sie den Nutzern kreative Freiheit, ohne dass sie das Designsystem Ihres Produkts zerstören.

Inhalt

Starte die Nutzer nicht mit einer leeren Leinwand

Der wichtigste Faktor dafür, ob ein Page Builder genutzt wird, ist, was beim ersten Besuch im Block-Panel auf dich wartet. Baue die Abschnitte, die dein Produkt tatsächlich braucht, oder installiere eine Bibliothek und benenne sie neu.

  • Hero

    Schlagzeile, unterstützende Zeile und eine Hauptaktion.

  • Funktionsraster

    Ein sich wiederholendes Raster von Fähigkeiten oder Vorteilen.

  • Preisgestaltung

    Plane Spalten mit Merkmalen und einem Aufruf zum Handeln.

  • Erfahrungsberichte

    Zitate mit Quellenangabe, in einer Reihe oder auf einem Karussell.

  • FAQ

    Frage-und-Antwort-Paare, erweiterbar oder flach.

  • Kontakt

    Ein Formularabschnitt, der auf Ihrem eigenen Endpunkt gepostet wird.

  • CTA-Streifen

    Ein vollbreites Band mit einer klaren Aktion.

  • Fuß

    Navigationsspalten, legale Links und Markenzeichen.

Persistenz

Speichere Projekte im eigenen Backend

GrapesJS hostet nichts und wählt keine Datenbank aus. Du registrierst einen Speicheradapter mit zwei Methoden – laden und speichern – und beide kommunizieren mit deinem API. Nichts verlässt deine Infrastruktur.

  1. Visual editor
  2. Project JSON
  3. Your API
  4. Your backend
  5. Your database

Der Redakteur kennt nur 'load()' und 'store()'. Wo diese Anrufe enden – Postgres, MySQL, Mongo, S3, ein kopfloser CMS – ist eine Entscheidung, an der der Redakteur nie teilnimmt.

components/PageBuilder.vue — Speicheradapterts
const editor = grapesjs.init({
  container: host.value!,
  storageManager: {
    type: 'app-api',
    autosave: true,
    stepsBeforeSave: 10,
  },
  // Registered as a plugin so the adapter exists before the first load().
  plugins: [
    (ed) => {
      ed.Storage.add('app-api', {
        async load() {
          const res = await fetch(`/api/projects/${props.projectId}`);
          if (!res.ok) throw new Error(`Load failed: ${res.status}`);
          return await res.json();
        },
        async store(project) {
          const res = await fetch(`/api/projects/${props.projectId}`, {
            method: 'PUT',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(project),
          });
          if (!res.ok) throw new Error(`Save failed: ${res.status}`);
        },
      });
    },
  ],
});
  • Registrieren Sie den Adapter als Plugin, damit er existiert, bevor der Editor seinen ersten Laden durchführt.
  • 'autosave' mit 'stepsBeforeSave'-Batches schreibt statt eines pro Tastendruck auszusenden.
  • Speichere das Projekt JSON als Wahrheitsquelle; es ist das, was der Editor neu lädt.
  • Behalten Sie Versionen als gewöhnliche Zeilen – die Versionshistorie ist eine Schema-Entscheidung, kein Editor-Feature.
  • Autorisiere jede Last und Speicherung auf dem Server. Die Projekt-ID in der Anfrage ist ein Anspruch, keine Berechtigung.
  • Speichere den Speicherstand in deinem eigenen Vue UI, indem du die Speicherereignisse des Editors anhörst.

Du kontrollierst deine Daten und dein Backend. Der Editor ist ein Client deines API wie jeder andere Teil deiner App.

Datenmodell

Was solltest du lagern?

Zwei Artefakte kommen aus dem Editor und sind nicht austauschbar. Das falsche Speichern ist der Fehler, der Seiten sechs Monate später unbearbeitbar macht.

Projekt JSON – die Quelle der Wahrheit

Das vollständige editierbare Dokument: Komponenten, Stile, Assets, Seiten. Gib es zurück an 'load()' und der Nutzer macht genau dort weiter, wo er aufgehört hat. Das ist die Zeile, die du niemals verlieren darfst.

HTML + CSS — der Ausgang

Eine Darstellung des aktuellen Dokuments, das auf Abruf erstellt wird. Generiere es bei jeder Veröffentlichung erneut, anstatt es als Zustand zu behandeln; es kann nicht wieder in ein editierbares Projekt umgewandelt werden.

Behalte beide, aus unterschiedlichen Gründen

Das JSON ist das, was der Editor liest. Das HTML ist das, was Ihre Besucher lesen. Nur das zweite zu speichern ist die Einwegtür – die Seite rendert für immer und kann nie wieder bearbeitet werden.

Beide Artefakte beim Veröffentlichen speichernts
// The source of truth. Store it; the editor reloads from it.
const projectData = editor.getProjectData();

// The output. Regenerate it every time you publish.
const html = editor.getHtml();
const css = editor.getCss();

await $fetch(`/api/projects/${projectId}/publish`, {
  method: 'POST',
  body: { projectData, html, css },
});

// Authorize the request and sanitize `html` on the server —
// never in the component that produced it.

Um erneut zu bearbeiten

  1. Project JSON
  2. load()
  3. Editable again

Veröffentlichen

  1. getHtml() + getCss()
  2. Sanitize
  3. Serve

Speichere Projektdaten zum Bearbeiten. Generiere HTML und CSS, wenn du publizierbare Ausgaben brauchst.

Lieferung

Vom visuellen Schnitt bis zur Produktion

Autoren und Veröffentlichen sind unterschiedliche Aufgaben. GrapesJS endet in dem Moment, in dem ein Nutzer mit einer Seite zufrieden ist; alles danach ist dein Workflow, auf deiner Infrastruktur.

  1. Create
  2. Edit
  3. Save
  4. Review
  5. Publish
  6. Live page

Fügen Sie Bewertung, Genehmigung oder Terminplanung überall dort ein, wo Ihr Produkt sie benötigt – der Redakteur hat keine Meinung zu den Schritten zwischen Speichern und Speichern.

Wohin veröffentlichte Ausgaben gelangen können

  • Ein REST-Endpunkt in deinem eigenen API
  • Ein kopfloser CMS, den du bereits benutzt, nutzt du bereits
  • Statische Dateien, erstellt und beim Veröffentlichen bereitgestellt
  • Ein benutzerdefiniertes Backend, das Seiten auf Anfrage rendert
  • Ein CDN vor einem der oben genannten
  • Ihre bestehende Bereitstellungspipeline unverändert

GrapesJS übernimmt das Authoring. Ihre Infrastruktur übernimmt das Veröffentlichen – es gibt kein Hosting, das mit dem Editor geliefert wird, und diese Seite wird nicht anders behaupten.

SaaS-Architektur

Baue einen Multi-Tenant Vue-Seitenbuilder

Jeder Kunde erhält seine eigenen Seiten, eigene Assets, eigene Vorlagen und seine eigene Marke. Diese Isolation ist eine Eigenschaft Ihres Datenmodells und Ihres API – der Editor erhält einfach das richtige Projekt.

Your Vue SaaS

  • Org A

    • Pages
    • Assets
    • Templates
    • Brand
  • Org B

    • Pages
    • Assets
    • Templates
    • Brand
  • Org C

    • Pages
    • Assets
    • Templates
    • Brand

Was deine Vue-App und dein Backend implementieren

  • Eine Tenant-ID für jedes Projekt, Asset und jede Vorlagenzeile
  • Serverseitige Autorisierung bei jedem Lade-, Speicher- und Veröffentlichungsaufruf
  • Per-Tenant-Asset-Speicher, sodass die Uploads eines Kunden nie auf einen anderen gelistet werden
  • Tenant-scoped Template- und Blocksets
  • Das Per-Tenant-Branding wird angewendet, wenn der Editor erstellt wird
  • Rollen innerhalb eines Mieters: wer bearbeiten darf, wer genehmigen darf, wer veröffentlichen darf

Multi-Tenancy ist kein GrapesJS-Feature. Nichts im Editor erzwingt sie, und ein Page Builder, der darauf angewiesen ist, dass der Client den richtigen Tenant auswählt, ist kein Multi-Tenant – es handelt sich um eine gemeinsame Datenbank mit einer UI-Konvention.

Entdecken Sie die Seite zum SaaS-Seitenaufbau
Branding

Verwandle deinen Vue-Editor in dein eigenes Produkt

Nichts in der Benutzeroberfläche muss wie eine Bibliothek aussehen. Die Panels, die Icons, die Formulierung und der Workflow sind alle Konfigurationen – die meisten ausgelieferten GrapesJS-Builder sind als GrapesJS nicht mehr zu erkennen.

  • Eigenes Logo und Farbschema
  • Benutzerdefinierte Panels und Werkzeugleisten
  • Individuelle Blöcke und Vorlagen pro Kunde
  • Benutzerdefinierte Terminologie im gesamten UI
  • Rollen, die verändern, was der Redakteur aufdeckt,
  • Berechtigungen, die auf deinem Server durchgesetzt werden, spiegeln sich im UI wider
Ökosystem

Erweitern Sie Ihren Vue-Seitenbauer mit Plugins

Ein Plugin ist eine Funktion, die die Editor-Instanz empfängt. Das ist der gesamte Vertrag – weshalb es keine separate Vue-Edition von keinem dieser Pakete gibt. Das gleiche Paket funktioniert in einer Vue-Komponente, einer Nuxt-Seite, einer React-App oder einer einfachen HTML-Datei, weil keines davon das ist, an das es angehängt wird.
  1. GrapesJS core
  2. Vue / Nuxt integration
  3. Blocks
  4. Templates
  5. Storage
  6. Assets
  7. Pages
  8. Forms
  9. Export
  10. AI & advanced features

Um klarzustellen, was nicht existiert: Es gibt keinen offiziellen GrapesJS-Wrapper für Vue und kein Vue-spezifisches Plugin auf GJS.Market. Du rufst selbst 'grapesjs.init()' von 'onMounted' auf, das sind fünf Zeilen, und jedes Plugin im Katalog funktioniert dann unverändert.

Fang oben an und füge nur die Schichten hinzu, die dein Produkt tatsächlich erreicht. Die meisten Bauunternehmer installieren nie etwas aus der unteren Hälfte.

Marktplatz

Plugins, die die Teile lösen, die man sonst planen würde

Echte Listings von GJS.Market, gruppiert nach dem Problem, das sie entfernen. Jedes einzelne davon wird in derselben Editor-Instanz installiert, die deine Vue-Komponente erstellt.

Einkaufslisten

Baue deinen Vue Page Builder Stack auf

Derselbe Katalog, geschnitten nach dem Produkt, das du baust. Installiere den Stack, der zu deinem Fall passt, und ignoriere den Rest – ein Editor mit jedem geladenen Plugin ist langsamer und schwerer zu bedienen, nicht besser.

Die angezeigten Preise entsprechen den aktuellen GJS.Market-Listenpreisen; kostenlose Plugins sind markiert.

Katalog

Jede Kategorie, in der Reihenfolge, in der du sie brauchst

Wenn ein Stapel oben nicht zu deinem Produkt passt, fang stattdessen hier an. Das sind die Katalogbereiche, ungefähr in der Reihenfolge, in der ein Bauunternehmer hineinwächst.

Durchstöbern Sie alles
Kaufen vs. bauen

Baue jede Funktion selbst statt mit Plugins zu erweitern

Keine der beiden Spalten ist frei. Die Frage ist nur, in welcher Spalte dein Team seine Zeit verbringen sollte.

BerücksichtigungBaue es internInstallation von GJS.Market
Die Fähigkeit erhaltenEntwicklungszeit auf deiner RoadmapInstallation und Konfiguration
Es am Laufen haltenDu hältst es für immer aufrecht.Als veröffentlichtes Paket gepflegt
WiederverwendungNur interner CodeEine Lösung, die bereits andere Produkte ausführen
UmfangDu baust jedes Feature selbstFügen Sie nur das hinzu, was Ihr Produkt benötigt
Wo die Kosten landenIngenieurzeitEin Listenpreis, einmal
Woran dein Team arbeitetEditor-InfrastrukturIhr Produkt

Absichtlich erscheinen in dieser Tabelle keine Kosten- oder Zeitzahlen – wir kennen Ihr Team nicht, und hier wäre jede Zahl erfunden.

Der eigentliche Vergleich

Baue einen Vue-Seitengenerator von Grund auf statt GrapesJS

Reihe für Zeile, was du selbst schreiben und was bereits existiert. "Erweiterbar" bedeutet, dass die Engine den Hook liefert und du das Verhalten lieferst – meist ein paar Zeilen, manchmal ein Plugin.

LeistungsfähigkeitVon Grund aufGrapesJS
Leinwand bearbeitenBauEnthalten
Drag & DropBauEnthalten
KomponentenmodellBauEnthalten
BlöckeBauErweiterbar
Style ManagerBauEnthalten
Responsive BearbeitungBauEnthalten
SchichtbaumBauEnthalten
Rückgängig machen & neu machenBauEnthalten
VermögenswerteBauErweiterbar
VorlagenBauErweiterbar
LagerungBauErweiterbar
HTML / CSS ExportBauEnthalten
Vue-Komponenten in der LeinwandBauNicht enthalten – die Leinwand rendert DOM
Multi-tenancy, Rollen, VerlagswesenBauNicht enthalten – deine Bewerbung

Included = wird mit dem Kern ausgeliefert. Extensible = ein dokumentierter Erweiterungspunkt sowie Plugins, wo sie existieren.
Verifiziert mit GrapesJS 0.23.6 auf 2026-09-02.

Baue dein Vue-Produkt. Baue den visuellen Editor nicht neu auf.

Integration

Integration von GrapesJS mit Vue 3

Fünf Schritte, eine Komponente. Es gibt keinen offiziellen Vue-Wrapper und du brauchst keinen: GrapesJS rendert in ein einfaches Element, daher ist die einzige Vue-spezifische Frage, welcher Lebenszyklus-Hook 'init()' aufruft. Installiere grapesjs 0.23.6, erstelle die Komponente, initialisiere beim Mount, passe deine Plugins weiter, zerstöre beim Unmount.

  1. GrapesJS installieren
  2. Erstellen Sie die Editor-Komponente
  3. Initialisieren auf der Montierung
  4. Plugins konfigurieren
  5. Zerstören beim Absteigen
npm install grapesjs
components/PageBuilder.vuevue
<!-- components/PageBuilder.vue -->
<template>
  <div ref="host" class="page-builder" />
</template>

<script setup lang="ts">
import { onBeforeUnmount, onMounted, ref, shallowRef } from 'vue';
import grapesjs, { type Editor } from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';

// shallowRef, not ref: the editor is a large non-reactive instance and
// deep-proxying it costs performance for nothing.
const editor = shallowRef<Editor | null>(null);
const host = ref<HTMLElement | null>(null);

onMounted(() => {
  editor.value = grapesjs.init({
    container: host.value!,
    height: '100%',
    fromElement: false,
    storageManager: false,
    plugins: [],          // GJS.Market plugins go here
    blockManager: { blocks: [] },
  });
});

onBeforeUnmount(() => {
  editor.value?.destroy();
  editor.value = null;
});
</script>
  • 'shallowRef', nicht 'ref': Der Editor ist ein großes, nicht reaktives Objekt, und das Deep-Proxying kostet kostenlos Performance.
  • 'onMounted' läuft nie auf dem Server, was das in Nuxt ohne zusätzliche Maschinen sicher macht.
  • 'destroy()' in Unmount-Angelegenheiten – eine Routenänderung, die einen Redakteur mit Leaks, seinen Zuhörern und seinem iframe zurücklässt.
  • 'storageManager: falsch', während du alles verkabelst, und dann den Adapter einbauen, wenn der API bereit ist.
  • Importiere das Editor-Stylesheet einmal; es gestaltet die Panels, nicht deine Anwendung.
  • Alles darüber hinaus – Events, Wrapper, die zusammensetzbare Form – steht im Integrationsleitfaden.
Lesen Sie die vollständige Vue-Integrationsanleitung
Nuxt

Vue 3 + Nuxt

GrapesJS benötigt einen Browser DOM. Unter der Server-Rendering von Nuxt gibt es kein "Dokument", daher muss der Editor auf dem Client erstellt werden – was "onMounted" bereits garantiert. "<ClientOnly>" ist die Gürtel-und-Stützen-Version, und dort befindet sich das Notfall-Markup.

  1. Nuxt SSR
  2. <ClientOnly>
  3. grapesjs.init()
  4. Browser DOM

Der Server rendert alles rund um den Editor herum; der Editor selbst erscheint, sobald die Komponente im Browser gemountet wurde.

pages/editor.vuevue
<!-- pages/editor.vue -->
<template>
  <ClientOnly>
    <PageBuilder :project-id="route.params.id" />

    <template #fallback>
      <p class="editor-placeholder">Loading the editor…</p>
    </template>
  </ClientOnly>
</template>

<script setup lang="ts">
const route = useRoute();
</script>

Reproduziert, nicht angenommen

Laufzeit
Node 20, no DOM
GrapesJS
0.23.6
Import des Moduls
import('grapesjs') → resolves
init() aufrufen
grapesjs.init() → ReferenceError: document is not defined

Läuft in einfachem Node ohne DOM auf 2026-09-02. Der Unterschied ist wichtig: Der Import ist sicher, du brauchst also keinen dynamischen Import, um das Bundle serversicher zu halten – der Init-Call muss im Browser erfolgen.

  • Verwende '<ClientOnly>', wenn du anstelle des Editors einen servergerenderten Fallback möchtest.
  • Das '. client.vue'-Suffix ist Nuxt' eigene Art, dasselbe für eine ganze Komponente auszudrücken.
  • SSR ist nicht der interessante Teil dieser Seite – es ist eine Grenze, und es ist eine zweizeilige Grenze.
  • Alles außerhalb der Editor-Route rendert auf dem Server genau so, wie es heute der Fall ist.
Vermeiden Sie diese

4 Fehler, die man beim Erstellen eines Vue-Seiten-Builders vermeiden sollte

Jedes dieser Dinge ist von Anfang an günstig zu bekommen und teuer zu beheben, sobald die Kunden im Editor sind.

  • Der Fehler

    Initialisierung während SSR

    Das Aufrufen von 'init()' an irgendeinem Ort, der auf dem Server läuft, wirft aus, weil es kein 'Dokument' gibt, in das man die Leinwand rendern könnte.

    Was stattdessen zu tun ist

    Erstelle den Editor nur in 'onMounted' und wrappe die Route in '<ClientOnly>', wenn du einen server-gerenderten Fallback möchtest.

  • Der Fehler

    Nur das HTML wird gespeichert

    Die gerenderte Ausgabe kann nicht wieder in ein editierbares Dokument umgewandelt werden. Jede auf diese Weise gespeicherte Seite wird sofort in dem Moment der Veröffentlichung eingefroren.

    Was stattdessen zu tun ist

    Speichere das Projekt JSON als Wahrheitsquelle und generiere HTML und CSS bei jeder Veröffentlichung neu.

  • Der Fehler

    Nutzern eine unbegrenzte, leere Leinwand bieten

    Totale Freiheit erzeugt Seiten, die dein Designsystem zerstören, und ein Erstaufführungserlebnis ohne Panel bringt überhaupt keine Seiten hervor.

    Was stattdessen zu tun ist

    Shippe kuratierte Blöcke und Vorlagen und beschränke die Stileigenschaften, die Nutzer erreichen können.

  • Der Fehler

    Installieren jedes Plugins

    Jedes Plugin fügt Panels, Bündelgewicht und eine Oberfläche hinzu, die Ihre Nutzer verstehen müssen. Ein überfüllter Editor ist schwieriger zu bedienen, nicht leistungsfähiger.

    Was stattdessen zu tun ist

    Beginne mit dem Stack für deine Produktform und füge ein Plugin hinzu, wenn ein echter Bedarf besteht.

Vor dem Stapellauf

Produktionscheckliste für einen Vue-Seitenbauer

Die Dinge, die eine funktionierende Demo von etwas unterscheiden, das man zahlenden Kunden präsentieren kann.

Herausgeber

Lebenszyklus und Konfiguration

Die Instanz verhält sich bei jeder Routenänderung korrekt.

  • 'init()' läuft einmal pro Mount, nie auf dem Server
  • 'destroy()' fährt beim Absteigen und bei der Streckenänderung
  • Plugins werden vor dem ersten 'load()' registriert
  • Benutzerdefinierte Komponenten und Blöcke sind an einem Ort registriert
  • Das Editor-Stylesheet wird genau einmal geladen
Daten

Projektdaten

Nichts, was ein Nutzer getippt hat, darf verloren gehen.

  • Projekt JSON ist die gespeicherte Quelle der Wahrheit
  • Autosave ist aktiviert, mit sinnvollem Batching
  • Versionen werden beibehalten, sodass eine fehlerhafte Bearbeitung wiederhergestellt werden kann
  • Publish schreibt HTML und CSS getrennt vom Projekt
  • Lastfehler treten als Fehler auf, niemals als leere Leinwand
UX

Das Schnitterlebnis

Ein Nicht-Entwickler kann eine gute Seite auch ohne Hilfe erstellen.

  • Kuratierte Blöcke in Kategorien, die deine Nutzer erkennen
  • Mindestens eine Vorlage pro Seitentyp
  • Der Speicherstand ist in deinem eigenen UI sichtbar
  • Die Gerätebreiten sind erreichbar und offensichtlich
  • Leere Zustände erklären, was als Nächstes zu tun ist

Erstlauferfahrung entscheidet mehr über die Einführung als die Anzahl der Funktionen.

Sicherheit

Serverseitige Durchsetzung

Jede Regel wird dort durchgesetzt, wo der Client sie nicht erreichen kann.

  • Authentifizierung auf jeder Editor-Route
  • Autorisierung bei jedem Aufruf nach Laden, Speicher und Veröffentlichen
  • Upload-Validierung nach Typ und Größe, serverseitig
  • Veröffentlichter HTML, der vor dem Servieren desinfiziert wurde
  • Die Tenant-Isolation wurde auf dem Server überprüft, nicht aus der Anfrage abgeleitet
Verlagswesen

Seiten live bringen

Der Pfad von einem genehmigten Entwurf zu einer Live-URL ist definiert.

  • Eine Vorschau, die mit den veröffentlichten Ausgaben übereinstimmt
  • Eine explizite Veröffentlichungsaktion, getrennt vom Speichern
  • Überprüfung oder Genehmigung dort, wo Ihr Prozess es benötigt
  • Cache-Invalidierung nach der Veröffentlichung
  • Ein Rollback-Pfad zu einer früheren Version
Leistung

Leistungsüberlegungen

Der Editor ist eine starke Abhängigkeit und gehört genau auf eine Route. Die meisten Performance-Probleme in einem Builder entstehen dadurch, dass er geladen wird, wo er nicht benötigt wird.

  • Lade den Editor nur auf den Routen, die tatsächlich bearbeiten, nicht in deiner Anwendungsshell.
  • Plugins und Panels mit viel Lazy-Load, anstatt alles beim Start zu registrieren.
  • Halte die Editor-Instanz aus tiefer Reaktivität heraus – 'shallowRef' existiert für solche Objekte.
  • Spiegeln Sie den Editor-Status nicht bei jeder Änderung in Vue-Referenz; hören Sie sich die Ereignisse an, die Sie tatsächlich rendern.
  • Paginieren oder laden Sie faul große Asset-Bibliotheken, anstatt dem Asset-Manager Tausende von Zeilen zu geben.
  • Installiere Plugins, die dein Produkt verwendet; jeder zusätzliche kostet Bundle-Größe und Panelplatz.
Sicherheit

Sicherheitsaspekte

Ein Page Builder akzeptiert beliebige Inhalte von Nutzern und wandelt sie in Seiten um, die andere sehen. Behandle jede Eingabe als nicht vertrauenswürdig und jede Kundenregel als dekorativ.

  • Autorisiere jedes Projekt zum Laden, speichern und veröffentlichen Sie auf dem Server.
  • Erzwingen Sie die Tenant-Isolation in der Abfrage, nicht in der Komponente, die sie ausgesendet hat.
  • Validiere Uploads nach Typ und Größe, bevor sie in deinen Speicher gelangen.
  • Sanitise hat HTML veröffentlicht, bevor es jemandem serviert wurde.
  • Authentifiziere das API, mit dem der Editor kommuniziert, wie bei jedem anderen Endpunkt.
  • Publish endpoints separat schützen – Veröffentlichen ist eine privilegierte Aktion.
  • Überprüfe die Berechtigungen auf dem Server erneut, selbst wenn der UI den Button bereits versteckt hat.

Verlasse dich niemals nur auf clientseitige Berechtigungen.

Wer macht das

Wer baut Vue-Seiten-Builder?

Verschiedene Produkte, eine Architektur. Wenn Sie Ihr Team hier erkennen, ist der Rest dieser Seite für Sie geschrieben.

SaaS-Unternehmen

Visuelle Bearbeitung zu einem bestehenden Produkt hinzufügen, damit Kunden keine Tickets mehr für Inhaltsänderungen einreichen.

Agenturen

Ein individuelles Bearbeitungserlebnis pro Client zu erstellen, basierend auf einer Codebasis, die sie pflegen.

CMS-Plattformen

Kunden bietet visuelle Bearbeitung von Inhalten, die die Plattform bereits modelliert.

Marketingplattformen

Kampagnenteams können Seiten starten, ohne dass ein Entwickler eingeladen ist.

Enterprise-Teams

Erstellte kontrollierte interne Bearbeitungsabläufe mit Rollen, Überprüfung und Genehmigung.

Fragen

Vue-Seitenbauer FAQ

Was ist ein Vue-Seitenbauer?

Ein visueller Editor in einer Vue-Anwendung, der es jemand ermöglicht, eine Seite zusammenzustellen und zu stylen, indem er Abschnitte auf eine Leinwand zieht, anstatt ein Markup zu schreiben. Die Vue-App stellt die Routen, Benutzer und Daten bereit; der Editor stellt die Leinwand bereit.

Kann ich GrapesJS mit Vue 3 verwenden?

Ja. GrapesJS rendert in ein einfaches DOM-Element, also erstellst du es in 'onMounted' und zerstörst es in 'onBeforeUnmount'. Es ist keine Wrapper-Bibliothek beteiligt.

Kann ich GrapesJS mit Nuxt verwenden?

Ja. Der Editor wird auf dem Client erstellt; 'onMounted' garantiert das bereits, und '<ClientOnly>' gibt dir einen server-gerenderten Rückfallback darum herum.

Funktioniert GrapesJS mit Nuxt SSR?

Das Importieren des Moduls ist auf dem Server sicher – nur 'init()' benötigt ein DOM. Die umliegende Seite rendert also normal und der Editor erscheint, sobald die Komponente im Browser gemountet ist.

Ist GrapesJS ein Vue-Seitenbauer?

Es ist eine framework-agnostische Bearbeitungs-Engine, keine Vue-Bibliothek. Es wird zu einem Vue-Seitenbauer, wenn man es in einer Vue-Komponente montiert und mit dem eigenen Speicher und der Veröffentlichung verbindet.

Wie integriere ich GrapesJS mit Vue?

Installiere das Paket, füge eine Komponente mit einem Container-Element hinzu, rufe 'grapesjs.init()' in 'onMounted' mit deinen Plugins und Blöcken auf und rufe 'destroy()' beim Unmounten auf. Der komplette Leitfaden behandelt Events, Composables und Wrapper.

Kann ich den Composition API verwenden?

Ja, und es ist die natürliche Ergänzung – die Lebenszyklus-Hooks sind genau dort, wo Schöpfung und Zerlegung hingehören. Halte die Instanz in 'shallowRef' statt in 'ref'.

Gibt es einen offiziellen Vue-Wrapper für GrapesJS?

Nein. Es gibt einen offiziellen React-Wrapper, aber nichts für Vue; das Paket auf npm richtet sich an Vue 2 und wurde seit 2022 nicht mehr aktualisiert. Wenn man selbst 'init()' anruft, dauert es etwa fünf Zeilen und vermeidet die Abhängigkeit von nicht gepflegtem Code.

Kann ich eigene Blöcke erstellen?

Ja. Blöcke werden im Block Manager des Redakteurs mit deinem eigenen Markup, Label und einer Kategorie registriert, und du kannst sie nach dem Wortschatz deines Produkts gruppieren.

Kann ich benutzerdefinierte Komponenten erstellen?

Ja. Definiere deine eigenen Bauteiltypen mit eigenen Einstellungen, Einschränkungen und Verhalten und stelle sie dann als Blöcke frei. So hört ein Bauer auf, generisch zu wirken.

Werden Vue-Komponenten innerhalb der Leinwand gerendert?

Nein. Die Leinwand ist ein isoliertes Dokument, das einfach DOM rendert, also bearbeitet es HTML und CSS, anstatt Vue-Komponenten zu montieren. Deine Anwendung ist Vue; die bearbeitete Seite ist Markup, das deine App nach Belieben rendern kann.

Kann ich wiederverwendbare Vorlagen erstellen?

Ja. Speichere ganze Layouts als Ausgangspunkte, entweder über deinen eigenen Speicher oder mit einem Template-Management-Plugin aus dem Katalog.

Kann ich Projekte in meinem eigenen Backend speichern?

Ja, und das ist das beabsichtigte Design. Du registrierst einen Speicheradapter mit den Methoden 'laden' und 'speichern', die dein API aufrufen – der Editor kommuniziert nie direkt mit deiner Datenbank.

Sollte ich Projekt JSON oder HTML speichern?

Speichere das Projekt JSON: Es ist die editierbare Wahrheitsquelle, die der Editor neu lädt. Generiere HTML und CSS beim Veröffentlichen. Wenn du nur HTML speicherst, ist die Seite dauerhaft unbearbeitbar.

Kann ich mit Vue einen SaaS-Seitengenerator erstellen?

Ja. Deine Vue-App kümmert sich um Konten, Pläne und Routing; der Editor übernimmt das Authoring; dein API übernimmt Projekte. Diese Kombination ist die übliche Form für einen Builder, der als Produkt verkauft wird.

Kann ich einen Multi-Tenant-Seitengenerator erstellen?

Ja, aber der Tenancy befindet sich in deiner Anwendung und deiner Datenbank, nicht im Editor. Skaliere jedes Projekt, Asset und jede Vorlage nach Mieter und setze sie serverseitig durch.

Kann ich einen White-Label-Seiten-Builder erstellen?

Ja. Logo, Farben, Panels, Terminologie und verfügbare Blöcke sind alle Konfigurationen, sodass jeder Kunde eine Umgebung bekommt, die wie dein Produkt aussieht.

Kann ich mit Vue einen Landingpage-Builder bauen?

Ja – es ist die häufigste erste Version. Kuratieren Sie eine kleine Auswahl an Marketing-Abschnitten, fügen Sie Vorlagen hinzu und lassen Sie das Marketingteam über Ihre bestehende Pipeline veröffentlichen.

Kann ich mit Vue einen CMS-Editor bauen?

Ja. Registrieren Sie Komponententypen, die Ihr Inhaltsmodell spiegeln, damit Editoren visuell mit Ihren Entitäten arbeiten und nicht mit freier Markup-Form.

Kann ich den Editor mit Plugins erweitern?

Ja. Ein Plugin ist eine Funktion, die die Editor-Instanz empfängt, sodass der gesamte GJS.Market-Katalog unverändert in einer Vue-App funktioniert – es gibt keine Vue-spezifische Edition, nach der man suchen sollte.

Kann ich GrapesJS kommerziell verwenden?

Ja. Der Core ist BSD-3-Clause-lizenziert, was kommerzielle Nutzung erlaubt, auch innerhalb eines Produkts, das du verkaufst. Überprüfe die individuelle Lizenz jedes Plugins, das du installierst.

Brauchen Sie Hilfe beim Erstellen Ihres Vue-Seitenbauers?

Brauchen Sie Hilfe bei der Integration von GrapesJS mit Vue oder Nuxt, beim Erstellen benutzerdefinierter Blöcke und Komponenten, beim Verbinden Ihres Backends oder beim Erstellen eines produktionsreifen Bearbeitungsworkflows? Wir übernehmen diese Arbeit.

Für Teams, die lieber das Produkt als die Editor-Infrastruktur liefern würden.

Fang hier an

Baue deinen Vue-Seitenbauer, ohne ganz von vorne anzufangen

Nutze Vue für deine Anwendung und GrapesJS für das visuelle Bearbeitungserlebnis. Füge eigene Komponenten, Blöcke, Vorlagen, Speicher- und Veröffentlichungsworkflow hinzu – und erweitere den Builder dann mit GJS.Market-Plugins, wenn du mehr brauchst.

Entwickler

Leg los.

Fünf Schritte und eine Komponente. Installiere das Paket und lass heute Nachmittag einen Editor in deiner Vue-App laufen.

Leg los
Produktteams

Plugins durchsuchen

Blöcke, Vorlagen, Speicher, Assets und Export – installieren Sie die Funktionen, die Sie sonst auf die Roadmap setzen würden.

Durchsuchen von Plugins
Unternehmen

Holen Sie sich Implementierungshilfe

Integration, individuelle Komponenten, Backend-Verkabelung und ein Produktionsbearbeitungs-Workflow, gemeinsam mit deinem Team entwickelt.

Sprich mit uns

Deine Vue-App. Dein Editor. Dein Produkt.