Vue sigue siendo responsable de
Tu aplicación, exactamente como la construyes hoy.
- Aplicación UI
- Enrutamiento
- Autenticación
- Lógica de negocio
- Gestión estatal
- APIs y obtención de datos
- Facturación y planes
- Usuarios y permisos
PageKit: el creador de sitios GrapesJS autoalojado, con el código fuente incluido. Obtener acceso anticipado
Crea un creador visual de páginas de arrastrar y soltar para Vue 3 y Nuxt con bloques personalizados, componentes, plantillas, edición responsiva y tu propio flujo de trabajo de almacenamiento y publicación.
Bloques
Tu página
Estilos
Consulta la guía de integración de Vue
0.23.6
Versión de GrapesJS contra la que esta página está escrita
100+
Plugins y plantillas en GJS.Market
BSD-3-Clause
Licencia del núcleo editorial
$0
Coste de ejecutar el propio editor
Esto es GrapesJS en sí, no una captura de pantalla. Arrastra un bloque, selecciona un elemento, cambia el estilo y cambia el ancho del dispositivo. El editor se crea con una llamada 'init()' — en una app Vue esa llamada vive en 'onMounted', y todo lo que ves aquí se comporta de forma idéntica.
El editor de stock sin tema aplicado. Esto es lo que obtienes antes de configurar nada — el punto de partida desde el que todos los constructores de abajo fueron personalizados.
Carga una demo externa en un iframe.
Un creador de páginas de producción es mucho más que unos pocos componentes Vue. Es un lienzo, un sistema de arrastrar y soltar, un modelo de componentes, un motor de estilo, edición responsiva, deshacer historial, gestión de recursos, almacenamiento y exportación. Aquí está toda la superficie y quién acaba poseyendo cada pieza.
Un documento aislado que los usuarios editan directamente, con sus propios estilos y desplazamientos.
Drop targets, puntos de inserción, reordenación y reglas de anidamiento.
Elementos tipados con sus propios ajustes, restricciones y comportamiento.
Haz clic para seleccionar, pasa el cursor en contornos, barras de herramientas por elemento y insignias.
Tipografía, color, espaciado y controles de disposición vinculados a los selectores.
Anchos de dispositivo y estilos con alcance de punto de ruptura en el mismo lienzo.
Un árbol de la página para que las estructuras profundas se mantengan navegables.
Un historial de comandos en cada edición, no solo en texto.
Limpia el marcado y la hoja de estilo generados a partir del documento actual.
Las secciones listas que los usuarios arrastran. Tuyas o instaladas.
Configura los diseños iniciales completos para que nadie encuentre un lienzo en blanco.
Subidas, bibliotecas multimedia y gestión de imágenes.
Formato de texto en línea más allá del editor integrado.
Más de una página dentro de un mismo proyecto.
Donde se escriben y leen los datos del proyecto. Tu API, tu base de datos.
Quién puede abrir, editar y publicar qué proyecto.
Aislar las páginas, recursos y plantillas de un cliente de las de otro.
Convertir la salida aprobada en una página activa en tu infraestructura.
A qué tiene derecho cada cliente y a qué paga por ello.
La columna del medio es el objetivo de GJS.Market: es una capacidad real que instalas en lugar de programar. La columna de la derecha nunca se convierte en problema de nadie más — ese es tu producto, y esta página es explícita sobre ello en cada sección que lo toca.
Consulta la integración de cinco pasosGrapesJS no es un sustituto de tu aplicación ni un servicio alojado. Es un motor de edición que se monta en un elemento de una ruta. Todo lo que está arriba y debajo de él en este diagrama sigue siendo tuyo.
Todo lo que hace que el producto sea tuyo. GrapesJS no tiene opinión sobre nada de eso.
Una instancia montada, dentro de un componente, en una ruta. Esta es la capa que no estás construyendo.
El editor te entrega dos artefactos y una transmisión multimedia. Lo que ocurre a continuación es decisión de tu API.
Filas ordinarias en un esquema que diseñaste. Nada aquí es un formato GrapesJS que tengas que adoptar.
Léelo de arriba a abajo: tu aplicación Vue autentica al usuario y lo dirige a una página de editor; el editor produce los datos del proyecto; tu API los escribe en tu base de datos. El editor nunca se comunica con tu base de datos, y tu base de datos nunca tiene que entender al editor.
Cómo se monta el editor en un componente VueNo. Esta es la primera pregunta que hacen la mayoría de los desarrolladores de Vue, y la respuesta cambia cómo se lee el resto de la página. Las dos capas no se solapan: una ejecuta tu aplicación, la otra una superficie de edición dentro de ella.
Tu aplicación, exactamente como la construyes hoy.
La capa de edición visual, dentro de un elemento se la asignas.
Una advertencia honesta mientras estamos aquí: el lienzo renderiza DOM liso dentro de un iframe, no componentes montados en Vue. Tu app es Vue; lo que tus usuarios editan es HTML y CSS que tu app renderiza como quiera.
El mismo motor, configurado de forma diferente. Cada uno de estos es una forma real de producto que los equipos se encientan encima de él — y cada uno tiene una página aquí que profundiza.
SaaS
Deja que tus clientes creen y editen páginas dentro de tu producto, sin salir de él y sin un desarrollador.
Explora los constructores SaaSSitios web
Una experiencia visual completa de creación de sitios web: proyectos de varias páginas, plantillas, recursos y publicaciones.
Véase el ángulo de la página de inicioMarketing
Deja que los equipos de marketing lancen las páginas de campaña a su propio ritmo en lugar del tuyo.
Explora los constructores de aterrizajesContenido
Proporciona a los equipos de contenido una superficie visual de edición en lugar del modelo de contenido que ya tienes.
Consulta el editor CMSFormas
Compone formularios visualmente a partir de componentes de campo tipados y luego publícalos en tus propios endpoints.
Plugins de formulario de exploraciónCorreo electrónico
Crear y gestionar plantillas de correo electrónico de forma visual, con resultados diseñados para clientes de correo en lugar de navegadores.
Ver edificio de correo electrónicoDocumentos
Presenta documentos, informes y páginas de una sola página de forma visual, y luego expórtalos o renderiza desde tu backend.
Ver editores embebidasAgencias
Envía a cada cliente un entorno de edición de marca que se parezca a tu producto, no a una biblioteca.
Explora el white labelEsto es lo que te da el editor el primer día, antes de instalar un único plugin. Cada uno es configurable: paneles, categorías, restricciones y etiquetas son tuyos para configurar.
Los usuarios construyen los diseños arrastrando secciones y elementos al lienzo, con objetivos de caída, reordenación y anidamiento.
Define tus propios tipos de elementos con sus propios ajustes, restricciones y comportamientos, y reutilízalos en cada proyecto.
Las secciones listas para usar que los usuarios extraen del panel. Agrúpalas en categorías que coincidan con el vocabulario de tu producto.
Tipografía, color, espaciado y controles de diseño. Limita el conjunto de propiedades para que los usuarios no puedan salir de tu sistema de diseño con estilo.
Cambia el lienzo entre el ancho de escritorio, tablet y móvil, y escribe estilos con alcance de punto de interrupción en su lugar.
Un árbol estructural de la página, de modo que un diseño profundamente anidado se mantenga seleccionable y reordenable.
Un gestor de activos para imágenes y medios, respaldado por el almacenamiento o CDN que ya uses.
Diseños iniciales reutilizables, para que una nueva página empiece como algo en lugar de un lienzo vacío.
Genera HTML y CSS a partir del documento actual, o toma los datos del proyecto y renderízalos a tu manera.
La diferencia entre un creador genérico de sitios web y uno que pertenece a tu producto es el conjunto de componentes. No fuerces tu modelo de contenido en los tipos de elementos de otra persona: registra el tuyo propio.
Cada paso es una configuración ordinaria en la instancia del editor: un tipo de componente, un bloque que lo inserta, una plantilla que organiza varios, un comando que actúa sobre ellos y un panel que lo expone.
// 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' },
});
}No fuerces tu producto a un creador de sitios web genérico. Personaliza el editor en función de tu propio modelo de contenido y sistema de diseño.
Un lienzo sin restricciones produce páginas que avergüenzan al producto en el que viven. El editor es configurable en ambas direcciones — el entorno útil no es la máxima libertad, es la libertad acotada.
Da a los usuarios libertad creativa sin permitir que rompan el sistema de diseño de tu producto.
El mayor factor que determina si un creador de páginas se utiliza es lo que está esperando en el panel de bloques en la primera visita. Construye las secciones que tu producto realmente necesita, o instala una biblioteca y cámbiala el nombre.
Titular, línea de apoyo y acción principal.
Una cuadrícula repetitiva de capacidades o beneficios.
Columnas de planeo con reportajes y una llamada a la acción.
Citas con atribución, en fila o en carrusel.
Pares de preguntas y respuestas, extensibles o planos.
Una sección de formulario que publica en tu propio endpoint.
Una banda de ancho completo con una acción clara.
Columnas de navegación, enlaces legales y marcas de marca.
GrapesJS no aloja nada ni elige una base de datos. Registras un adaptador de almacenamiento con dos métodos — cargar y almacenar — y ambos se comunican con tu API. Nada sale de tu infraestructura.
El editor solo conoce 'load()' y 'store()'. Donde acaban esas llamadas — Postgres, MySQL, Mongo, S3, un CMS sin cabeza — es una decisión en la que el editor nunca participa.
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}`);
},
});
},
],
});Controlas tus datos y tu backend. El editor es un cliente de tu API como cualquier otra parte de tu app.
Dos artefactos salen del editor y no son intercambiables. Almacenar el incorrecto es el error que hace que las páginas sean ineditables seis meses después.
El documento completo editable: componentes, estilos, recursos, páginas. Devuélvelo a 'load()' y el usuario reanuda exactamente donde lo dejó. Esta es la fila que nunca debes perder.
Una representación del documento actual, producido bajo demanda. Regenerarlo en cada publicación en lugar de tratarlo como estado; no puede volver a convertirse en un proyecto editable.
El JSON es lo que lee el editor. El HTML es lo que leen tus visitantes. Almacenar solo el segundo es la puerta unidireccional: la página se renderiza para siempre y nunca podrá ser editada de nuevo.
// 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.Para volver a editar
Para publicar
Guarda los datos del proyecto para editar. Genera HTML y CSS cuando necesites un resultado publicable.
Autoría y publicación son trabajos diferentes. GrapesJS termina en el momento en que un usuario está satisfecho con una página; todo lo que viene después es tu flujo de trabajo, en tu infraestructura.
Inserta revisión, aprobación o programación donde tu producto lo necesite: el editor no tiene opinión sobre los pasos entre guardar y estar en vivo.
A dónde puede ir la producción publicada
GrapesJS se encarga de la autoría. Tu infraestructura se encarga de la publicación — no hay hosting incluido con el editor, y esta página no pretenderá lo contrario.
Cada cliente recibe sus propias páginas, sus propios activos, sus propias plantillas y su propia marca. Ese aislamiento es una propiedad de tu modelo de datos y de tu API: al editor simplemente le entregan el proyecto adecuado.
Your Vue SaaS
Org A
Org B
Org C
¿Qué implementan tu app y backend de Vue?
La multitenencia no es una función de GrapesJS. Nada en el editor la impone, y un constructor de páginas que depende del cliente para elegir el tenant correcto no es multi-inquilino: es una base de datos compartida con una convención UI.
Nada en la interfaz tiene que parecer una biblioteca. Los paneles, los iconos, la redacción y el flujo de trabajo son configuraciones — la mayoría de los constructores de GrapesJS que vienen son irreconocibles como GrapesJS.
Logotipo personalizado, colores, tipografía y panel cromado, aplicados por cliente si vendes a agencias.
Explora el white labelReorganiza o reemplaza los paneles por completo y controla el editor desde tus propios componentes y comandos Vue.
Ver editores embebidasRenombra bloques, categorías y acciones con las palabras que tus usuarios ya usan para ellos.
Ver embalaje SaaSPara aclarar lo que no existe: no hay un envoltorio oficial de GrapesJS para Vue ni ningún plugin específico de Vue en GJS.Market. Tú mismo llamas 'grapesjs.init()' desde 'onMounted', que son cinco líneas, y todos los plugins del catálogo funcionan sin cambios.
Empieza por arriba y añade solo las capas que tu producto realmente alcanza. La mayoría de los constructores nunca instalan nada desde la mitad inferior.
Listados reales de GJS.Market, agrupados por el problema que eliminan. Cada uno de ellos se instala en la misma instancia del editor que crea tu componente Vue.
El problema: un panel de bloques vacío en la primera ejecución. Lo que añaden: secciones ya hechas, gestión de plantillas y proyectos de varias páginas. ¿Quién los necesita: cualquiera cuyos usuarios no sean desarrolladores?
Explora esta categoríaUn set de bloques de partida, para que el panel sea útil antes de que escribas el tuyo propio.
Secciones basadas en Tailwind para productos cuyo sistema de diseño ya es Tailwind.
Guarda, lista y aplica diseños completos como puntos de partida reutilizables.
Varias páginas dentro de un mismo proyecto, con navegación entre ellas.
El problema: trabajo perdido y persistencia acumulada a mano. Lo que añaden: gestión de proyectos, autosave, recuperación de fallos y backends de almacenamiento alternativo. ¿Quién los necesita: todos los productos con clientes reales en el editor?
Explora esta categoríaListado de proyectos, creación y cambio, en lugar de un editor por ruta.
Recupera el trabajo no guardado tras un fallo o una pestaña cerrada — el fallo que los usuarios nunca perdonan.
Persistencia local en el navegador, útil para borradores y edición offline.
Lee y escribe proyectos a través de un backend Directus en lugar de un API personalizado.
El problema: manejo de imágenes y obtener resultados del editor. Lo que aportan: widgets de subida, integraciones con CDN, edición de imágenes y exportación de archivos. ¿Quién los necesita: constructores donde los usuarios traen su propio medio?
Explora esta categoríaSube y sirve medios editores a través de Cloudinary.
Una experiencia completa de subida — arrastrar, avanzar, múltiples fuentes.
Recorta, redimensiona y ajusta las imágenes dentro del editor en lugar de antes.
Descarga el proyecto actual como archivo HTML/CSS.
El problema: la superficie de edición es más fina de lo que tus usuarios esperan. Lo que añaden: edición de texto más rica, formularios, control de puntos de interrupción y código por componente. ¿Quién los necesita? Equipos reemplazando un editor existente.
Explora esta categoríaExtiende la edición de texto en línea más allá de la barra de herramientas integrada.
Componentes de formulario con campos tipados, para constructores que recogen entradas.
Gestiona los puntos de interrupción y los anchos de los dispositivos más allá de los tres valores predeterminados.
Edición HTML/CSS por componente para los usuarios que lo quieran.
El mismo catálogo, aunque recortado por el producto que estás construyendo. Instala la pila que coincida con tu caso y ignora el resto: un editor con cada plugin cargado es más lento y difícil de usar, no mejor.
Los clientes editan sus propias páginas dentro de tu producto.
Los equipos de contenido editan contenido estructurado visualmente.
Consulta la página de CMSCreación completa del sitio, multisección y responsiva.
Plantillas de campañas y transacciones, no páginas web.
Edición limitada con revisión, roles y aprobaciones.
Los precios mostrados son los precios actuales de la lista de GJS.Market; los plugins gratuitos están marcados.
Si una pila superior no coincide con tu producto, empieza por aquí. Estas son las secciones del catálogo, aproximadamente en el orden en que un constructor crece en ellas.
Ninguna de las dos columnas es gratuita. La cuestión es solo en cuál debería dedicar su tiempo tu equipo.
| Consideración | Hazlo en casa | Instalar desde GJS.Market |
|---|---|---|
| Adquisición de la capacidad | Tiempo de desarrollo en tu hoja de ruta | Instalar y configurar |
| Mantenerlo funcionando | Lo mantienes para siempre | Mantenido como un paquete publicado |
| Reutilización | Código solo interno | Una solución que otros productos ya ejecutan |
| Alcance | Tú construyes cada función tú mismo | Añade solo lo que tu producto necesite |
| Dónde está el coste | Tiempo de ingeniería | Un precio de lista, una vez |
| En qué trabaja tu equipo | Infraestructura de editores | Tu producto |
No aparecen cifras de coste ni de tiempo en esta tabla a propósito — no conocemos a tu equipo, y cualquier número aquí sería inventado.
Fila por fila, lo que estarías escribiendo tú mismo y lo que ya existe. "Extensible" significa que el motor proporciona el gancho y tú aportas el comportamiento — normalmente unas pocas líneas, a veces un plugin.
| Capacidad | Desde cero | GrapesJS |
|---|---|---|
| Lienzo de edición | Construcción | Incluido |
| Arrastrar y soltar | Construcción | Incluido |
| Modelo de componentes | Construcción | Incluido |
| Bloques | Construcción | Extensible |
| Style Manager | Construcción | Incluido |
| Edición responsiva | Construcción | Incluido |
| Árbol de capas | Construcción | Incluido |
| Deshacer y rehacer | Construcción | Incluido |
| Activos | Construcción | Extensible |
| Plantillas | Construcción | Extensible |
| Almacenamiento | Construcción | Extensible |
| Exportación HTML / CSS | Construcción | Incluido |
| Componentes Vue en el lienzo | Construcción | No incluido — el lienzo representa DOM |
| Multi-inquilinos, roles, publicación | Construcción | No incluido — tu solicitud |
Incluido = viene con el núcleo. Extensible = un punto de extensión documentado, más plugins donde existen.
Verificado contra GrapesJS 0.23.6 en 2026-09-02.
Construye tu producto Vue. No reconstruyas el editor visual.
Cinco pasos, un componente. No hay un envoltorio oficial de Vue y no lo necesitas: GrapesJS se renderiza en un elemento simple, así que la única pregunta específica de Vue es qué gancho de ciclo de vida llama a 'init()'. Instala grapesjs 0.23.6, crea el componente, inicializa en montaje, pasa tus plugins y destruye al desmontar.
npm install grapesjs<!-- 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>GrapesJS necesita un navegador DOM. En el renderizado del servidor de Nuxt no hay 'documento', así que el editor tiene que crearse en el cliente — lo cual 'onMounted' ya garantiza. '<ClientOnly>' es la versión de correa y refuerzo, y es donde reside el marcado de respaldo.
El servidor renderiza todo lo que rodea al editor; el propio editor aparece una vez que el componente está montado en el navegador.
<!-- 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>Reproducido, no asumido
Ejecuta en Node normal sin DOM en 2026-09-02. La diferencia importa: la importación es segura, así que no necesitas una importación dinámica para mantener el paquete seguro para el servidor — necesitas que la llamada de entrada ocurra en el navegador.
Cada uno de estos es barato de conseguir al principio y caro de arreglar una vez que los clientes están en el editor.
El error
Llamar a 'init()' en cualquier sitio que se ejecute en el servidor se lanza, porque no hay un 'documento' en el que renderizar el lienzo.
¿Qué hacer en su lugar
Crea el editor solo en 'onMounted' y envuelve la ruta en '<ClientOnly>' si quieres un recurso de respaldo renderizado por el servidor.
El error
La salida renderizada no puede volver a convertirse en un documento editable. Cada página guardada de esta manera se congela en el momento en que se publica.
¿Qué hacer en su lugar
Guarda el proyecto JSON como fuente de verdad y regenera HTML y CSS cada vez que publiques.
El error
La libertad total produce páginas que rompen tu sistema de diseño, y una experiencia de primera ejecución sin nada en el panel produce páginas en absoluto.
¿Qué hacer en su lugar
Envía bloques y plantillas seleccionados y limita el estilo que los usuarios pueden alcanzar las propiedades.
El error
Cada plugin añade paneles, peso del paquete y una superficie que tus usuarios deben entender. Un editor saturado es más difícil de usar, no más capaz.
¿Qué hacer en su lugar
Empieza con la pila para la forma de tu producto y añade un plugin cuando surja una necesidad real.
Las cosas que separan una demo funcional de algo que puedes poner delante de los clientes que pagan.
La instancia se comporta correctamente en cada cambio de ruta.
Nada de lo que un usuario haya escrito puede perderse.
Un no desarrollador puede crear una buena página sin ayuda.
La experiencia de primera ejecución decide la adopción más que el número de funcionalidades.
Cada norma se aplica cuando el cliente no puede acceder a ella.
Se define el camino desde un borrador aprobado hasta una URL activa.
El editor es una dependencia pesada y pertenece exactamente a una ruta. La mayoría de los problemas de rendimiento en un constructor provienen de cargarlo donde no es necesario.
Un creador de páginas acepta contenido arbitrario de los usuarios y lo convierte en páginas que otras personas ven. Trata cada entrada como no confiable y cada regla del lado del cliente como decorativa.
Nunca confíes solo en permisos del lado del cliente.
Productos diferentes, una sola arquitectura. Si reconoces a tu equipo aquí, el resto de esta página está escrito para ti.
Añadir edición visual a un producto existente para que los clientes dejen de presentar tickets por cambios de contenido.
Crear una experiencia de edición personalizada por cliente, sobre una base de código que manten.
Ofrecer a los clientes edición visual sobre contenido que la plataforma ya modela.
Permitir que los equipos de campaña lancen páginas sin que un desarrollador esté al tanto.
Crear flujos de trabajo internos controlados de edición con roles, revisión y aprobación.
Un editor visual dentro de una aplicación Vue que permite a alguien ensamblar y estilizar una página arrastrando secciones a un lienzo, en lugar de escribir marcado. La aplicación Vue proporciona las rutas, usuarios y datos; el editor proporciona el lienzo.
Sí. GrapesJS se renderiza en un elemento DOM simple, así que lo creas dentro de 'onMounted' y lo destruyes en 'onBeforeUnmount'. No hay ninguna biblioteca envolvente involucrada.
Sí. El editor se crea en el cliente; 'onMounted' ya garantiza eso, y '<ClientOnly>' te da una opción de respaldo renderizada por el servidor alrededor de ello.
Importar el módulo es seguro en el servidor — solo 'init()' requiere un DOM. Así que el servidor de página que lo rodea se renderiza normalmente y el editor aparece una vez que el componente se monta en el navegador.
Es un motor de edición independiente del framework, no una biblioteca Vue. Se convierte en un creador de páginas Vue cuando lo montas en un componente Vue y lo conectas a tu propio almacenamiento y publicación.
Instala el paquete, añade un componente con un elemento contenedor, llama a 'grapesjs.init()' en 'onMounted' con tus plugins y bloques, y llama a 'destroy()' al desmontar. La guía completa cubre eventos, composables y envoltorios.
Sí, y es el encaje natural — los ganchos del ciclo de vida son exactamente donde deben la creación y el desmontaje. Mantén la instancia en 'shallowRef' en lugar de 'ref'.
No. Hay un envoltorio oficial de React, pero nada para Vue; el paquete en npm está dirigido a Vue 2 y no se ha actualizado desde 2022. Llamar a 'init()' tú mismo son unas cinco líneas y evitar depender de código no mantenido.
Sí. Los bloques se registran en el Block Manager del editor con tu propio marcado, etiqueta y categoría, y puedes agruparlos según el vocabulario de tu producto.
Sí. Define tus propios tipos de componentes con sus propios ajustes, restricciones y comportamiento, y luego expóndelos como bloques. Así es como un constructor deja de parecer genérico.
No. El lienzo es un documento aislado que representa DOM simple, así que edita HTML y CSS en lugar de montar componentes Vue. Tu aplicación es Vue; la página editada es el marcado que tu app puede renderizar como quiera.
Sí. Guarda los diseños completos como puntos de partida, ya sea a través de tu propio almacenamiento o con un plugin de gestión de plantillas del catálogo.
Sí, y ese es el diseño previsto. Registras un adaptador de almacenamiento con los métodos de 'carga' y 'almacenar' que llaman a tu API — el editor nunca se comunica directamente con tu base de datos.
Guarda el proyecto JSON: es la fuente editable de verdad que el editor recarga. Genera HTML y CSS cuando publiques. Almacenar solo HTML hace que la página sea permanentemente imposible de editar.
Sí. Tu app Vue se encarga de cuentas, planos y rutas; el editor se encarga de la autoría; tu API se encarga de los proyectos. Esa combinación es la forma común de un constructor vendido como producto.
Sí, pero la tenencia reside en tu aplicación y en tu base de datos, no en el editor. Escala cada proyecto, activo y plantilla por inquilino y haz cumplir el control del servidor.
Sí. El logotipo, los colores, los paneles, la terminología y los bloques disponibles están configurados, para que a cada cliente se le pueda asignar un entorno que se parezca a tu producto.
Sí — es la primera versión más común. Selecciona un pequeño conjunto de secciones de marketing, añade plantillas y deja que el equipo de marketing publique a través de tu pipeline existente.
Sí. Registra tipos de componentes que reflejen tu modelo de contenido, para que los editores trabajen visualmente con tus entidades en lugar de con marcado libre.
Sí. Un plugin es una función que recibe la instancia del editor, así que todo el catálogo de GJS.Market funciona en una app Vue sin cambios — no hay una edición específica de Vue que buscar.
Sí. El núcleo está licenciado por BSD-3-Clause, lo que permite su uso comercial, incluso dentro de un producto que vendas. Revisa la licencia individual de cualquier plugin que instales.
¿Necesitas ayuda para integrar GrapesJS con Vue o Nuxt, crear bloques y componentes personalizados, conectar tu backend o crear un flujo de trabajo de edición listo para producción? Nosotros hacemos ese trabajo.
Para equipos que prefieren lanzar el producto antes que la infraestructura de editor.
Usa Vue para tu aplicación y GrapesJS para la experiencia de edición visual. Añade tus propios componentes, bloques, plantillas, flujo de trabajo de almacenamiento y publicación — y luego amplía el generador con plugins GJS.Market cuando necesites más.
Cinco pasos y un componente. Instala el paquete y ten un editor ejecutado en tu app Vue esta tarde.
EmpiezaBloques, plantillas, almacenamiento, recursos y exportación — instala las capacidades que de otro modo pondrías en la hoja de ruta.
Explorar pluginsIntegración, componentes personalizados, cableado backend y un flujo de trabajo de edición de producción, construido con tu equipo.
HáblanosTu app Vue. Tu editor. Tu producto.