Necesitas una base completa de edición
Canvas, Blocks, Style Manager, Asset Manager, Layer Manager, comandos y Almacenamiento son módulos del núcleo más que un retraso. Si tu hoja de ruta contiene actualmente cuatro de esos, esa es la señal.
PageKit: el creador de sitios GrapesJS autoalojado, con el código fuente incluido. Obtener acceso anticipado
Compara Craft.js y GrapesJS, entiende las diferencias arquitectónicas, explora un editor visual en vivo y aprende cómo migrar un editor basado en Craft.js a GrapesJS.
Eres dueño de todo lo que rodea el árbol de nodos.
Los subsistemas de edición llegan ensamblados.
| Paquete | Versión | Licencia | Última versión | GitHub estrellas | Descargas de npm | |
|---|---|---|---|---|---|---|
| @craftjs/core | 0.2.12 | MIT | 2025-02-14 | 8,738 | 267k/mo | Fuente |
| grapesjs | 0.23.6 | BSD-3-Clause | 2026-08-25 | 26,188 | 1.4M/mo | Fuente |
Lee desde el registro npm y el GitHub API en 2026-09-03. Los conteos de estrellas y las cifras de descargas son señales del ecosistema, no una medida de qué proyecto se adapta a tu producto. Ambos repositorios están publicados activamente y ninguno está archivado.
GrapesJS y Craft.js resuelven problemas relacionados pero diferentes. Craft.js es un framework centrado en React para crear editores de páginas personalizables, mientras que GrapesJS ofrece una base más amplia de editor visual con componentes, bloques, estilo, recursos, almacenamiento y plugins.
GrapesJS puede ser una alternativa sólida cuando quieres más infraestructura de editores de fábrica, especialmente para editores visuales basados en HTML/CSS, creadores de páginas SaaS, superficies de edición CMS y constructores embebibles.
No es universalmente mejor. Si tu producto está profundamente centrado en React y el editor tiene que operar sobre un árbol de componentes React, Craft.js es el que encaja más directamente — y las secciones siguientes lo explican en detalle y no como un aviso legal.
No hay puntuaciones, porque las filas no son cantidades comparables. Cada capacidad está etiquetada con su procedencia: incluida en el proyecto, accesible mediante un complemento o definida por tu propio código.
| Capacidad | Craft.js | GrapesJS |
|---|---|---|
| Enfoque principal | Un framework React para crear tus propios editores de páginas. | Un marco de editor visual con la superficie de edición ya montada. |
| React-primero | IncluidoSí. Components son componentes React; el árbol es un árbol React. | ComplementoNo. El núcleo es independiente del framework; React llega a través de @grapesjs/react. |
| Lienzo visual | IncluidoTus componentes se renderizan en directo y son directamente selectable. | IncluidoUn lienzo aislado con selección directa y edición de texto en línea. |
| Componentes personalizados | IncluidoCualquier componente React, descrito mediante un descriptor Craft.js estático. | IncluidoCualquier tipo de componente, descrito con un modelo, traits y valores predeterminados. |
| Arrastrar y soltar | IncluidoIncluido. Los conectores forman un elemento draggable y droppable. | IncluidoIncluido. Components se mueve entre contenedores en el lienzo. |
| Paleta de arrastrar y soltar | PersonalizadoConstruyes la caja de herramientas que lista lo que se puede arrastrar. | IncluidoIncluido. Blocks se registra con el Block Manager y aparece en un panel. |
| Gestión de estilos | PersonalizadoDefinido por la aplicación. El estilismo es lo que ya hacen tus componentes. | IncluidoIncluido. El Style Manager edita el CSS por selector y por dispositivo. |
| Gestión de activos | PersonalizadoDefinido por aplicación. Tú proporcionas tu propio selector de medios. | IncluidoIncluido. El Asset Manager gestiona las subidas y una biblioteca multimedia. |
| Serialización | IncluidoIncluido. El árbol de nodos se serializa a JSON y vuelve a cargar. | IncluidoIncluido. Los datos del proyecto se serializan a JSON y se cargan de nuevo. |
| Capa de almacenamiento | PersonalizadoDefinido por la aplicación. Tú decides dónde va el JSON serializado. | IncluidoIncluido. El Storage Manager persiste localmente o en tu endpoint. |
| Deshacer y volver a hacer | IncluidoIncluido. Un historial de deshacer y volver a hacer forma parte del API principal. | IncluidoIncluido. El Undo Manager, con comandos que puedes asignar a un panel. |
| Panel de árbol de capas | ComplementoUn paquete adicional oficial renderiza el árbol. | IncluidoIncluido. El panel Layer Manager viene con el núcleo. |
| Arquitectura Plugin | PersonalizadoSin sistema de plugins. Compones tus propios paquetes y los de la comunidad. | IncluidoIncluido. Un plugin es una función que recibe el Editor y lo extiende. |
| Enfoque de framework | Enfocado en React por diseño. | Núcleo independiente del framework, integrado por framework. |
| Flujo de trabajo HTML y CSS | PersonalizadoDefinido por la aplicación. Renderizas React y produces el marcado tú mismo. | IncluidoNativo. Clean HTML y CSS son la salida principal. |
| Creadores de páginas SaaS | Posible. Construyes la superficie de edición que rodea. | Encaje fuerte. La mayor parte de esa superficie ya está ahí. |
| Editores de marca blanca | Posible. La interfaz es tuya desde el primer commit. | Ajuste fuerte. Viñetas, iconos, etiquetas y traducciones son todos reemplazables. |
Comparado con la propia documentación de ambos proyectos sobre 2026-09-03: Craft.js 0.2.12 y GrapesJS 0.23.6. "Personalizado" es una descripción, no una crítica — para varias filas es exactamente la razón por la que un equipo elige un framework sin opiniones.
Mira qué significa eso arquitectónicamenteLa mayor diferencia no es simplemente el número de funcionalidades. Los dos frameworks ofrecen a los desarrolladores diferentes puntos de partida para crear un editor visual.
Una cadena lineal. Craft.js posee el árbol de nodos; todas las demás capas son tuyas.
Una cadena con subsistemas. El motor llega con sus propios módulos de edición.
Craft.js empieza por abajo. Te da un árbol de nodos, conectores de arrastrar y soltar, serialización e historial, y deliberadamente no toma posición sobre el estilo, los recursos, el almacenamiento o los paneles alrededor del lienzo. Esa es una decisión de diseño, y para un equipo que quiere poseer toda su experiencia de edición, es la correcta.
GrapesJS empieza más arriba. El lienzo, el panel Blocks, Style Manager, Asset Manager, Layer Manager, los comandos y el Storage Manager son módulos del núcleo, y existe un plugin API para reemplazar o ampliar cualquiera de ellos.
Ninguno de los dos frameworks es una plataforma. Ninguno proporciona alojamiento, cuentas, permisos, facturación, multitenencia o una cadena de publicación. Esos están fuera de las dos cajas y siguen siendo tu responsabilidad en cualquier caso.
Así que la cuestión no es qué proyecto tiene más funcionalidades. Es qué punto de partida te deja construyendo las piezas que realmente quieres tener.
Si las capas que tendrías que construir están por encima de Craft.js en esa primera columna, GrapesJS merece la pena evaluar. Si están por debajo, migrar te aporta muy poco.
Craft.js es un marco bien diseñado con un propósito claro, y varias formas de producto simplemente encajan mejor para él. No son salvedades, sino casos en los que elegir GrapesJS sería una decisión equivocada.
Si todo, desde el enrutamiento hasta el estado y el renderizado, ya vive en React, un editor construido a partir de primitivas de React se queda dentro de un solo modelo mental. Nada tiene que cruzar un límite.
Craft.js edita un árbol React real. Si lo que tus usuarios organizan son tus componentes React — no marcado — esa correspondencia es todo el valor, y no es algo que un modelo HTML primero reproduzca.
Craft.js no impone paneles, barras de herramientas ni una superficie de configuración. Un equipo con opiniones de diseño firmes obtiene una hoja en blanco en lugar de algo que anular.
Memoización, contexto, límites de suspense, programación de renderizados: cuando esos detalles importan, mantener el árbol editable dentro de React los mantiene bajo tu control.
Un editor funcional con usuarios reales y contenido real es un activo. El coste de reemplazarlo rara vez se justifica solo con una lista de funciones.
Si tu resolver, tus paneles de configuración y tu pipeline de contenido asumen el modelo de nodos Craft.js, ese acoplamiento es profundo y reproducirlo en otros lugares es trabajo real.
En estas situaciones, reemplazar Craft.js puede generar un trabajo de migración innecesario.
Consulta la matriz de decisión completaLas señales que aparecen a continuación son sobre lo que tendrías que construir de otro modo. Cada carta recopila algunas de ellas; si varias describen tu proyecto, la evaluación merece tu tiempo.
Canvas, Blocks, Style Manager, Asset Manager, Layer Manager, comandos y Almacenamiento son módulos del núcleo más que un retraso. Si tu hoja de ruta contiene actualmente cuatro de esos, esa es la señal.
GrapesJS edita un documento y produce marcas y hojas de estilo limpias. Cuando el artefacto que crean tus usuarios tiene que renderizarse fuera de tu app React, eso es un flujo de trabajo nativo en lugar de un paso de exportación que escribes.
El esfuerzo de tu equipo se centra en cuentas, planes, plantillas y publicaciones, no en reconstruir un panel de estilos. GrapesJS es la capa de edición dentro de ese producto, nunca el producto en sí.
Guía para creadores de páginas SaaSEl editor se monta en un elemento DOM que controlas, dentro de una app que no necesariamente escribiste. Esa restricción es de lo que trata la guía de embebidos.
Guía de constructores embebiblesViñetas, iconos, etiquetas, traducciones y todo el lenguaje visual son reemplazables, para que el editor pueda llevar la marca de tu cliente en lugar de la tuya.
Guía de marca blancaEl correo exige marcado basado en tablas y CSS en línea — un modelo de documento diferente con la misma superficie de edición. Existen preajustes precisamente para eso.
Guía para editores de correo electrónicoNo te limites a comparar características. Prueba tú mismo con el editor: arrastra un bloque, selecciona un elemento, restylearlo y cambia el lienzo a un ancho de teléfono.
La demo oficial más tres editores publicados del marketplace. Cada uno carga al clic, en su propio frame.
Demo completa abiertaEl editor GrapesJS de serie sin plugins ni sistema de diseño. Esto es lo que te da el core antes de configurar nada.
Se carga en un marco en esta página.
Ambos proyectos llaman "componente" a lo que un usuario arrastra, pero las dos definiciones no son intercambiables. Esta es la diferencia que determina cuánto trabajo implica una migración.
Un componente React que el editor pasa por conectores. Su superficie editable son sus props React.
Una definición en el propio modelo de documento del editor. Su superficie editable es traits, atributos y estilos.
Un componente React con un descriptor Craft.js se convierte en un tipo de componente registrado con un modelo y se establece por defecto. El marcado que produce se traslada a ese modelo.
Los props que un usuario del editor podría cambiar se convierten en traits. Props que solo tus conjuntos de código se convierten en atributos o propiedades fijas del modelo.
El árbol de nodos serializado se convierte en datos de proyecto. Ambos son JSON, pero las formas difieren, así que esta es una transformación que escribes y pruebas.
Los paneles de configuración que escribiste en React son reemplazados por el panel de rasgos integrado, además de comandos y paneles personalizados donde necesitas comportamientos que el núcleo no tiene.
Esto es un mapeo conceptual, no un convertidor automático. Ninguna herramienta lee un resolvedor Craft.js y emite tipos de componentes GrapesJS — la correspondencia anterior es lo que se implementa, una vez por tipo de componente.
La misma idea — una sección hero con un encabezado y descripción editables — definida en cada lado. Léelos como dos definiciones de un mismo concepto, no como un antes y un después del mismo archivo.
// Craft.js: a component is a React component plus a `craft` descriptor.
// The editor drives it through connectors from useNode().
import { useNode } from '@craftjs/core';
export const Hero = ({ title, description }) => {
const { connectors: { connect, drag } } = useNode();
return (
<section ref={(ref) => connect(drag(ref))} className="hero">
<h1>{title}</h1>
<p>{description}</p>
</section>
);
};
Hero.craft = {
props: {
title: 'Build faster',
description: 'Create beautiful pages',
},
related: {
// The panel that edits those props is a React component you write.
settings: HeroSettings,
},
};// GrapesJS: a component type owns its markup and its editable traits.
// Traits are the closest analogue to Craft.js props.
editor.Components.addType('hero', {
model: {
defaults: {
tagName: 'section',
attributes: { class: 'hero' },
traits: [
{ name: 'title', type: 'text', changeProp: true },
{ name: 'description', type: 'text', changeProp: true },
],
components: [
{ tagName: 'h1', type: 'text', content: 'Build faster' },
{ tagName: 'p', type: 'text', content: 'Create beautiful pages' },
],
},
},
});
// A block is what makes the type draggable from the panel. Craft.js derives
// the equivalent from your toolbox; in GrapesJS it is a separate registration.
editor.Blocks.add('hero', {
label: 'Hero',
category: 'Sections',
content: { type: 'hero' },
});
// The trait panel edits those traits. You do not write it.Las definiciones de Component son solo la mitad. Todo lo que tus usuarios ya han creado se almacena en el formato de nodo Craft.js, y moverlo significa recorrer ese árbol y emitir las definiciones que entienden tus nuevos tipos de componentes.
// Craft.js persists `query.serialize()` — a JSON map of nodes keyed by id,
// each with { type: { resolvedName }, props, nodes }. Migrating it means
// walking that map and emitting the GrapesJS component definitions your new
// types understand: a transform you write once, per component type.
const toGrapesJs = {
Hero: ({ title, description }) => ({ type: 'hero', title, description }),
// …one entry per resolver entry in your Craft.js editor
};
function craftNodeToGjs(nodes, id) {
const node = nodes[id];
const map = toGrapesJs[node.type.resolvedName];
if (!map) throw new Error(`Unmapped Craft.js component: ${node.type.resolvedName}`);
return {
...map(node.props),
components: (node.nodes ?? []).map((child) => craftNodeToGjs(nodes, child)),
};
}
const nodes = JSON.parse(craftSerializedJson);
editor.setComponents(craftNodeToGjs(nodes, 'ROOT').components);Ambas muestras son ilustrativas. Muestran la forma del mapeo y la forma de la transformada; ninguna es una migración directa, y nada en ninguno de los dos proyectos genera una para ti.
Tres niveles generales. Ninguno de ellos tiene una duración, porque la respuesta honesta depende enteramente de tu base de código — y una página que te promete un número que no puede conocer no te ayuda a planificar.
Un puñado de tipos de componentes, una superficie de ajustes pequeña y contenido que aún no ha acumulado muchas variaciones.
Probablemente estés aquí si
Normalmente una migración relativamente enfocada.
Un editor real con sus propios paneles, una biblioteca de plantillas, documentos guardados y un conjunto de componentes que ha crecido para encajar en el producto.
Probablemente estés aquí si
Requiere mapeo de componentes y datos.
Components que dependen del contexto de la aplicación, el comportamiento del editor extendido en lugares no obvios y las reglas de negocio integradas en la experiencia de edición.
Probablemente estés aquí si
Requiere una revisión de arquitectura y una migración por etapas.
La complejidad de la migración depende de lo profundamente que esté acoplada la aplicación existente a Craft.js.
Sigue la lista de comprobaciónEl orden en que realmente se ejecuta una migración, agrupado en cuatro fases. Útil tanto si lo haces tú mismo como si se lo das a alguien.
Pasos 15Antes de reconstruir nada, averigua qué es lo que realmente tiene que moverse.
Tipos Component, la paleta y los controles que tus usuarios esperan.
Contenido existente, dónde se almacena y los medios que referencia.
Demuestra que funciona y luego mueve a la gente sin necesidad de un corte de corda.
Las cajas son un plan imprimible, no un estado guardado — nada aquí se almacena en tu navegador. Copia los pasos en el rastreador que ya use tu equipo.
Habla con alguien que ya lo haya hechoNo automáticamente.
Craft.js y GrapesJS utilizan modelos de componentes y editores diferentes. Un componente Craft.js es un componente React que el editor maneja a través de conectores; un tipo de componente GrapesJS es una definición dentro del propio modelo de documento del editor. No existe un adaptador que convierta uno en el otro, y cualquier página que te diga lo contrario describe un trabajo lo descubrirás más adelante.
Toma el marcado y el estilizado que produce tu componente React y exprésalo como un tipo de componente con traits. Este es el camino por defecto y suele ser menos trabajo del que parece, porque el marcado ya existe.
Coste: Una definición por tipo de componente, escrita a mano y revisada como cualquier otro código.
Las reglas de precios, la validación, la obtención de datos y el formato rara vez pertenecen al editor. Súbelos a módulos que llama el editor y sobreviven al traslado sin ser tocados.
Coste: Requiere separar la lógica del renderizado primero, lo cual a menudo merece la pena hacerlo de todas formas.
Algunos componentes realmente necesitan React en tiempo de renderizado. Esos pueden renderizarse en un contenedor que posee el editor, tratando el resultado como un solo componente.
Coste: La opción más cara. Úsala para los pocos componentes que la necesitan, no como estrategia general.
La superficie editable es lo que importa a tus usuarios. Mapear cada prop editable a un rasgo o atributo preserva la experiencia incluso cuando la implementación debajo es completamente nueva.
Coste: Los nombres y tipos de propiedades deben reconciliarse, y los valores predeterminados deben restablecerse.
Una ventaja de elegir GrapesJS es que puedes ampliar el editor mediante plugins en lugar de implementar todas las funciones desde cero. Estos son listados reales del catálogo GJS.Market — nombres, precios e imágenes vienen directamente del mercado, así que nada aquí puede desviarse de lo que realmente está a la venta.
Haz la lista de pasos 1 a 5. Conjuntos de componentes y bloques ya hechos puedes empezar en lugar de definir cada tipo a mano.
Explora la secciónUn conjunto base de bloques estructurales desde donde empezar la paleta.
Genera tipos de componentes a partir del margen existente.
Componentes de entrada con propiedades editables, listos para el panel de rasgos.
Permite que tu equipo registre su propio conjunto de bloques sin escribir la fontanería.
Paso 6 de la lista de comprobación. Edición de texto enriquecido en línea, que en un proyecto Craft.js casi siempre es un componente escrito por alguien de tu equipo.
Explora la secciónCambia la edición de texto integrada por CKEditor 5.
Cambia la edición de texto integrada por TinyMCE 6.
Cambia la edición de texto integrada por Froala.
Extiende la barra de texto integrada con más acciones de formato.
Si tus componentes React están construidos sobre una utilidad o framework de componentes, el mismo sistema puede respaldar los bloques que tus usuarios arrastran.
Explora la secciónBloques basados en Tailwind que coinciden con un sistema de diseño centrado en la utilidad.
Renderiza las clases Tailwind dentro del lienzo.
Bloques de diseño y contenido Bootstrap 5.
Cuadrícula Bootstrap 4 y bloques de contenido para sistemas antiguos.
Lista de pasos 8 a 10. Dónde se conservan los documentos y dónde va el contenido subido.
Explora la secciónGuarda documentos en el navegador — útil para prototipos y trabajos offline.
Persiste los datos del proyecto en la nube Firestore.
Las tiendas subieron medios en Firebase.
Utiliza Cloudinary como la biblioteca multimedia detrás del Asset Manager.
Cada uno de estos es un producto diferente, y cada uno tiene su propia guía con la arquitectura, los compromisos y los plugins que se aplican.
Construye un editor visual directamente dentro de tu producto SaaS.
Lee la guíaIntegra un editor visual en una app existente.
Lee la guíaConstruye aplicaciones basadas en React alrededor de GrapesJS.
Lee la guíaCrea flujos de trabajo visuales de edición de correo electrónico con resultados seguros para tablas.
Lee la guíaCrea una experiencia de edición de marca para tus clientes.
Lee la guíaAñade edición visual a un sistema de contenido sin pantalla.
Lee la guía@grapesjs/reactUn componente oficial de envoltorio, o una referencia simple y un efecto.Next.jsnext/dynamicSolo para el cliente, cargado de forma perezosa para que no llegue a la primera carga útil.VueonMounted()Enciéndelo en el gancho montado, destrúyelo cuando el componente se desmonte.AngularngAfterViewInit()Inícialo después de que la vista se inicialice, fuera de la detección de cambios.npm install grapesjs @grapesjs/reactimport grapesjs from 'grapesjs';
import GjsEditor from '@grapesjs/react';
import 'grapesjs/dist/css/grapes.min.css';
// GrapesJS owns an iframe canvas and touches `window`, so it mounts on the
// client. In Next.js, load this from a client component.
export default function VisualEditor() {
return (
<GjsEditor
grapesjs={grapesjs}
options={{
height: '100vh',
storageManager: { type: 'remote', autosave: true },
}}
onEditor={(editor) => {
// Register the component types you mapped from your Craft.js
// components here.
}}
/>
);
}La capa de integración es delgada a propósito. Tu framework es el propietario de la página, GrapesJS del lienzo y tus tipos de componentes se registran una vez que existe el editor.
Si has decidido que GrapesJS encaja, aún queda una segunda decisión: llevar el editor existente o construir uno nuevo al lado. Cuestan cosas diferentes.
Transporta el conjunto de componentes, las plantillas y el contenido guardado, y mantén el producto continuo para las personas que lo usan.
Elige migración cuando
Más trabajo de mapeo al principio, mucha menos interrupción para quienes ya dependen del editor.
Consulta la lista de comprobaciónConstruye el nuevo editor como algo propio, transmite el contenido cuando esté listo y aprovecha la oportunidad para arreglar lo que de otro modo llevarías.
Considera empezar de cero cuando
Menos trabajo de compatibilidad, pero la transformación de contenido aún debe escribirse si ya existen documentos.
Prueba primero con el editorUn requisito por fila, un punto de partida. Cuatro de estos apuntan a Craft.js, lo que hace que los otros cinco merezcan la pena leer.
| Tu requisito | Mejor punto de partida |
|---|---|
| Un editor que opera sobre un árbol de componentes React | Craft.js |
| Una base completa para editor visual | GrapesJS |
| Un creador de páginas HTML y CSS | GrapesJS |
| Una arquitectura profundamente React | Craft.js |
| Herramientas de edición visual integradas | GrapesJS |
| Una interfaz de editor React altamente personalizada | Craft.js |
| Un ecosistema de editores impulsados por plugins | GrapesJS |
| Un creador de páginas SaaS | GrapesJS |
| Una aplicación Craft.js existente y madura | Primero evalúa el coste de la migración |
No hay un ganador universal. La elección correcta depende de la arquitectura de tu editor y los requisitos del producto.
GJS.Market construye y migra editores GrapesJS. Si prefieres no seguir solo la lista de comprobación, estas son las etapas que cubre un compromiso — y la primera es una evaluación, que bien podría concluir que quedarse en Craft.js es la respuesta correcta.
Evaluación de la arquitectura
Leemos el editor existente, analizamos cuán profundamente está vinculado a Craft.js y decimos claramente si merece la pena hacer una migración.
Component y mapeo de plantillas
Cada tipo de componente se asigna a una definición GrapesJS, con sus propiedades editables convertidas en traits, y las plantillas existentes se mapean junto a ellas.
Migración de datos y activos
La transformación de contenido serializado Craft.js a datos de proyecto se escribe y prueba con tus documentos reales, y el medio se traslada con ellos.
Lógica y plugins personalizados de editor
El comportamiento que no tiene equivalente en el núcleo se reconstruye como comandos, paneles o plugins, para que se mantenga mantenible en lugar de parchear.
Almacenamiento y publicación
El Storage Manager está conectado por cable a tu backend y la ruta de publicación está conectada de extremo a extremo.
Corrida en paralelo y pruebas
Ambos editores se ejecutan lado a lado contra el mismo contenido para que el nuevo pueda ser verificado antes de que alguien se mueva a él.
Depende de lo que estés construyendo. GrapesJS es la alternativa más cercana para equipos que quieren una base de editor visual con componentes, bloques, estilo, recursos y almacenamiento ya montados. Puck está más cerca de Craft.js en espíritu si quieres seguir React primero. No hay una única mejor respuesta, por eso esta página es una comparación más que una recomendación.
No uno de entrada directa. Ambos tienen modelos de componentes diferentes, así que mover significa redefinir tus componentes y transformar el contenido almacenado. GrapesJS es un reemplazo en el sentido de que puede hacer el mismo trabajo, no en el sentido de que puedas intercambiar la dependencia.
Craft.js es un framework React para construir editores de páginas: posee un árbol de nodos de tus componentes React y deja el estilo, los recursos, el almacenamiento y la interfaz circundante en tus manos. GrapesJS es un framework de editor visual cuyo núcleo ya incluye un lienzo, bloques, un Style Manager, un Asset Manager, un Layer Manager, comandos, almacenamiento y un sistema de plugins.
No. El núcleo es independiente del framework y no depende de React. Existe un paquete oficial de envolvimiento React, pero internamente GrapesJS mantiene su propio modelo de documento en lugar de un árbol React.
Sí. Un envoltorio oficial monta el editor como un componente React, y puedes iniciarlo tú mismo desde una referencia y un efecto. La app React aloja el editor; el editor sigue teniendo su propio lienzo.
No automáticamente. Un componente Craft.js es un componente React que el editor pasa por conectores; un tipo de componente GrapesJS es una definición en el propio modelo del editor. La mayoría de los equipos reconstruyen la definición visual, mantienen la lógica de negocio en módulos fuera del editor y añaden una capa de integración solo para los componentes que realmente necesitan React en momento de renderizado.
Sí, mapeándolos en lugar de convertirlos. Cada componente Craft.js se convierte en un tipo de componente registrado, sus props editables se convierten en traits, y el marcado que generó se traslada al modelo del tipo. Es trabajo manuscrito, aproximadamente una definición por tipo de componente.
Props: un usuario del editor puede cambiar el mapeo a traits. Props solo tus conjuntos de código mapean atributos o fijan propiedades del modelo. La aplicación indica que un componente se lee en tiempo de renderizado no tiene equivalente directo y normalmente debe moverse fuera del componente y entrar en el código alrededor del editor.
Sí, una vez que existen los tipos de componentes. Una plantilla es contenido almacenado, por lo que pasa por la misma transformación que cualquier otro documento: recorrer el árbol de nodos serializado, emitir los componentes equivalentes de GrapesJS y guardar el resultado como plantilla en el nuevo sistema.
Sí, con una transformación se escribe. Craft.js persiste un mapa JSON de nodos, cada uno con un nombre de componente resuelto, sus props y sus hijos. GrapesJS carga los datos del proyecto en su propia forma JSON. Ambos son JSON, así que la migración es un recorrido por árbol más una función de mapeo por tipo de componente.
Es un uso común para ello. GrapesJS proporciona la capa de edición; cuentas, planos, permisos, plantillas, alojamiento y publicación siguen siendo tuyos para construir. La guía de construcción de páginas de SaaS cubre cómo se dividen esas responsabilidades.
Sí. GrapesJS es solo cliente — toca los globales del navegador al arrancar — así que se carga de forma perezosa y se renderiza fuera del servidor. Eso también evita aproximadamente 300 KB de tu primera carga útil.
Sí. El paquete envia sus propias definiciones de tipos, así que no se necesita un paquete de tipos separado. La guía TypeScript cubre el nivel de la versión y los tipos que se declaran pero no se exportan.
Sí. Paneles, botones, iconos, etiquetas y traducciones son todos reemplazables, y el plugin API puede eliminar o reconstruir partes de la interfaz por completo. Eso es lo que lo hace viable como editor integrado en el producto de marca de otra persona.
Sí. Un plugin es una función que recibe el Editor y registra tipos de componentes, bloques, comandos, paneles o adaptadores de almacenamiento. Este es el principal mecanismo de extensión, y es sobre lo que se basan los listados del marketplace.
GJS.Market es un catálogo de plugins, bloques, presets e integraciones de GrapesJS, organizados por sección de catálogo. La sección de plugins de esta página muestra los listados actuales con precios en vivo.
Migra cuando tengas muchas plantillas, usuarios que dependan del editor actual o lógica de negocio que merezca la pena transmitir. Empieza de cero cuando el editor Craft.js sigue siendo pequeño, hay poco contenido guardado o la arquitectura de componentes está cambiando de todos modos. En cualquier caso, los documentos existentes aún necesitan una transformación.
Sí. Un compromiso comienza con una evaluación de arquitectura, luego abarca el mapeo de componentes y plantillas, migración de datos y activos, lógica de editor personalizado, almacenamiento y publicación, y un periodo de ejecución paralela. La evaluación puede concluir que quedarse en Craft.js es la respuesta correcta.
Si tu editor actual requiere demasiada infraestructura personalizada, evalúa GrapesJS con un proyecto real. Empieza con el editor, amplíalo con plugins y personaliza la arquitectura alrededor de tu producto.
Usa el editor que está más arriba en esta página, luego usa la demo oficial y las demos del marketplace para una duración más larga.
Abre el editorComponents, bloques, edición de texto enriquecido, sistemas de diseño, almacenamiento y recursos — extensiones que sustituyen el trabajo que de otro modo escribirías.
Explorar los pluginsPrimero una evaluación, luego mapeo de componentes, migración de datos y ejecución paralela. Incluir una respuesta honesta si migrar no merece la pena.
Solicitar ayuda para migrar