PageKit: el creador de sitios GrapesJS autoalojado, con el código fuente incluido. Obtener acceso anticipado

Alternativa a Craft.js

Alternativa a Craft.js: crea un Visual Editor listo para producción con GrapesJS

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.

Editor visual de arrastrar y soltarComponentes personalizadosBlocksStyle ManagerAsset ManagerAlmacenamientoEcosistema Plugin
Craft.js

Eres dueño de todo lo que rodea el árbol de nodos.

  1. Aplicación React
  2. Craft.js
  3. Tu interfaz Editor
GrapesJS

Los subsistemas de edición llegan ensamblados.

  1. Tu aplicación
  2. GrapesJS
    • Canvas
    • Blocks
    • Style Manager
    • Storage
  3. Publicación

Lanzamientos actuales

PaqueteVersiónLicenciaÚltima versiónGitHub estrellasDescargas de npm
@craftjs/core0.2.12MIT2025-02-148,738267k/moFuente
grapesjs0.23.6BSD-3-Clause2026-08-2526,1881.4M/moFuente

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.

La respuesta corta

¿Es GrapesJS una buena alternativa a Craft.js?

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.

Lado a lado

Craft.js vs GrapesJS en 30 segundos

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.

  • Incluido
  • Complemento
  • Personalizado
CapacidadCraft.jsGrapesJS
Enfoque principalUn framework React para crear tus propios editores de páginas.Un marco de editor visual con la superficie de edición ya montada.
React-primeroIncluidoSí. 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 visualIncluidoTus 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 personalizadosIncluidoCualquier componente React, descrito mediante un descriptor Craft.js estático.IncluidoCualquier tipo de componente, descrito con un modelo, traits y valores predeterminados.
Arrastrar y soltarIncluidoIncluido. Los conectores forman un elemento draggable y droppable.IncluidoIncluido. Components se mueve entre contenedores en el lienzo.
Paleta de arrastrar y soltarPersonalizadoConstruyes 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 estilosPersonalizadoDefinido 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 activosPersonalizadoDefinido por aplicación. Tú proporcionas tu propio selector de medios.IncluidoIncluido. El Asset Manager gestiona las subidas y una biblioteca multimedia.
SerializaciónIncluidoIncluido. 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 almacenamientoPersonalizadoDefinido 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 hacerIncluidoIncluido. 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 capasComplementoUn paquete adicional oficial renderiza el árbol.IncluidoIncluido. El panel Layer Manager viene con el núcleo.
Arquitectura PluginPersonalizadoSin 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 frameworkEnfocado en React por diseño.Núcleo independiente del framework, integrado por framework.
Flujo de trabajo HTML y CSSPersonalizadoDefinido 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 SaaSPosible. Construyes la superficie de edición que rodea.Encaje fuerte. La mayor parte de esa superficie ya está ahí.
Editores de marca blancaPosible. 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ónicamente
Arquitectura

La diferencia arquitectónica

La 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.

Craft.js

Una cadena lineal. Craft.js posee el árbol de nodos; todas las demás capas son tuyas.

  1. Aplicación React
  2. Craft.js
  3. Árbol React Component
  4. Tu interfaz Editor
  5. Tu sistema de estilos
  6. Tu almacenamiento
  7. Tu publicación
GrapesJS

Una cadena con subsistemas. El motor llega con sus propios módulos de edición.

  1. Tu aplicación
  2. GrapesJS
    • Canvas
    • Components
    • Blocks
    • Style Manager
    • Asset Manager
    • Commands
    • Storage
    • Plugins
  3. Tu backend / CMS
  4. Publicación
  • Proporcionado por el marco
  • Proporcionado por ti

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.

El caso honesto

Cuándo Craft.js podría ser la mejor opción

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.

  • Tu producto está profundamente centrado en React

    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.

  • El editor debe operar sobre un árbol de componentes React

    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.

  • Tu equipo quiere construir la mayor parte de la interfaz

    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.

  • Necesitas un control muy estricto sobre el renderizado de React

    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.

  • Ya tienes una implementación madura de Craft.js

    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.

  • Tu sistema de componentes ya está construido alrededor de Craft.js

    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 completa
La otra dirección

Cuando GrapesJS encaje mejor

Las 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.

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.

HTML y CSS son formatos de salida importantes

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.

Estás construyendo un creador de páginas SaaS

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 SaaS

Necesitas un editor embebible

El 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 embebibles

Quieres una experiencia de edición de marca blanca

Viñ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 blanca

Necesitas un editor de correo electrónico, u otro especializado

El 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ónico
Prácticas

Prueba el GrapesJS Editor

No 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.

  • Drag & drop
  • Blocks
  • Layers
  • Style Manager
  • Responsive devices
  • Assets
  • Undo / redo
Modelos Component

Craft.js Components vs GrapesJS Components

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.

Craft.js

Un componente React que el editor pasa por conectores. Su superficie editable son sus props React.

  1. React Component
  2. React Props
  3. Craft.js Node
GrapesJS

Una definición en el propio modelo de documento del editor. Su superficie editable es traits, atributos y estilos.

  1. Block
  2. Component Type
  3. Component Tree
  4. Attributes / Traits / Styles

Cómo se corresponden los conceptos

  • Craft.js ComponentGrapesJS Component Type

    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.

  • React PropsTraits / Properties / Attributes

    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.

  • Craft.js Editor StateGrapesJS Project Data

    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.

  • Custom Editor UIGrapesJS UI + Custom Commands / Panels

    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.

Ejemplo recorrido

Migración de un Component de Craft.js a GrapesJS

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.

Hero.jsx — Craft.jsjsx
// 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,
  },
};
hero-type.js — GrapesJSjs
// 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.

Y el contenido que ya existe

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.

migrate-content.jsjs
// 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.

Alcance

¿Qué tan difícil es una migración de Craft.js?

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.

  1. Sencillo

    Componentes básicos, poca lógica de editor personalizado

    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

    • Menos de unos diez tipos de componentes
    • Los paneles de configuración son principalmente texto y entrada numérica
    • Poco o ningún contenido en producción todavía

    Normalmente una migración relativamente enfocada.

  2. Medio

    Componentes personalizados, interfaz del editor, almacenamiento y plantillas

    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

    • Paneles de configuración personalizados con campos condicionales
    • Una biblioteca de plantillas desde la que tus usuarios puedan empezar
    • Contenido guardado que tiene que sobrevivir al movimiento

    Requiere mapeo de componentes y datos.

  3. Complejo

    Dependencias profundas de renderizado React y comportamiento personalizado

    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

    • Components lee el estado o contexto de la app para renderizar
    • Gestión de estados personalizada conectada al editor
    • Reglas de negocio que residen en el comportamiento del editor, no en los datos

    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ón
El plan

Lista de verificación de migración Craft.js → GrapesJS

El 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 15
01

Entiende lo que tienes

Antes de reconstruir nada, averigua qué es lo que realmente tiene que moverse.

  • Auditar los componentes de Craft.js
  • Identificar lógica de negocio reutilizable
  • Mapear componentes a tipos de componentes GrapesJS
  • Mapear los propulsores de React a traits y sus propiedades
02

Reconstruir la superficie de edición

Tipos Component, la paleta y los controles que tus usuarios esperan.

  • Reconstruir los bloques
  • Recrear controles del editor
  • Mapear las plantillas
03

Mueve los datos

Contenido existente, dónde se almacena y los medios que referencia.

  • Planificar la migración de datos del proyecto
  • Conectar almacenamiento
  • Configurar activos
  • Reconstruir comandos personalizados
04

Verificar y desplegar

Demuestra que funciona y luego mueve a la gente sin necesidad de un corte de corda.

  • Probar el comportamiento adaptable
  • Probar la publicación
  • Ejecutar editores antiguos y nuevos en paralelo
  • Migrar usuarios gradualmente

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 hecho
La pregunta que todos hacemos

¿Puedo reutilizar mi React Components existente?

No 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.

Lo que realmente hacen los equipos

  1. 1

    Reconstruir la definición visual en GrapesJS

    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.

  2. 2

    Reutiliza la lógica de negocio fuera del editor

    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.

  3. 3

    Crea una capa de integración donde realmente se requiera el renderizado React

    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.

  4. 4

    Mapea las propiedades en lugar de los componentes

    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.

El ecosistema

Extiende tu GrapesJS Editor en vez de montarlo todo tú mismo

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.

Formas de producto

¿Qué puedes construir con GrapesJS?

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.

Integración

¿Y qué pasa con React, Next.js, Vue y Angular?

GrapesJS tiene un núcleo independiente del framework y puede integrarse en aplicaciones construidas con frameworks frontend modernos. Se renderiza en un elemento DOM que posee, así que la integración es principalmente una cuestión de qué punto de ciclo de vida inicia el editor y cuál lo desmonta. Eso es diferente a que GrapesJS funcione como un sistema de componentes nativo para tu framework: internamente mantiene su propio modelo de documento, el framework que lo aloje.
  1. React / Next.js / Vue / Angular
  2. Integration Layer
  3. GrapesJS
  4. Your Component Types
  5. Your Backend
npm install grapesjs @grapesjs/react
VisualEditor.tsxtsx
import 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.

Dos rutas

¿Deberías migrar o empezar de cero?

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.

Migrar

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

  • Tienes muchas plantillas existentes.
  • Los usuarios existentes dependen del editor actual.
  • Tu biblioteca de componentes contiene lógica de negocio reutilizable.
  • Necesitas una transición gradual.

Más trabajo de mapeo al principio, mucha menos interrupción para quienes ya dependen del editor.

Consulta la lista de comprobación

Empieza de cero

Construye 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

  • El editor Craft.js sigue siendo pequeño.
  • Hay pocas plantillas existentes.
  • La arquitectura de componentes está cambiando de todas formas.
  • Quieres rediseñar la experiencia de edición.

Menos trabajo de compatibilidad, pero la transformación de contenido aún debe escribirse si ya existen documentos.

Prueba primero con el editor
El veredicto

¿Qué Editor deberías elegir?

Un 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 requisitoMejor punto de partida
Un editor que opera sobre un árbol de componentes ReactCraft.js
Una base completa para editor visualGrapesJS
Un creador de páginas HTML y CSSGrapesJS
Una arquitectura profundamente ReactCraft.js
Herramientas de edición visual integradasGrapesJS
Una interfaz de editor React altamente personalizadaCraft.js
Un ecosistema de editores impulsados por pluginsGrapesJS
Un creador de páginas SaaSGrapesJS
Una aplicación Craft.js existente y maduraPrimero 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.

Ayuda profesional

¿Necesitas ayuda para migrar desde Craft.js?

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.

  1. 1
    Etapa 1

    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.

  2. 2
    Etapa 2

    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.

  3. 3
    Etapa 3

    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.

  4. 4
    Etapa 4

    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.

  5. 5
    Etapa 5

    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.

  6. 6
    Etapa 6

    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.

Preguntas

Preguntas frecuentes

¿Cuál es la mejor alternativa a Craft.js?

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.

¿Es GrapesJS un sustituto de Craft.js?

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.

¿Cuál es la diferencia entre Craft.js y GrapesJS?

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.

¿GrapesJS está basado en React?

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.

¿Puede GrapesJS funcionar con 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.

¿Puedo reutilizar mis componentes Craft.js React?

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.

¿Puedo migrar componentes Craft.js a GrapesJS?

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.

¿Cómo se mapea el estado de los componentes Craft.js a GrapesJS?

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.

¿Puedo migrar plantillas Craft.js existentes?

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.

¿Puedo migrar los datos del proyecto Craft.js?

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 GrapesJS adecuado para creadores de páginas SaaS?

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.

¿Puedo usar GrapesJS con Next.js?

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.

¿GrapesJS es compatible con TypeScript?

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.

¿Se puede hacer un modelo de marca blanca en GrapesJS?

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.

¿Puedo extender GrapesJS con plugins?

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.

¿Dónde puedo encontrar plugins GrapesJS?

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.

¿Debería migrar desde Craft.js o empezar un nuevo proyecto?

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.

¿Puede GJS.Market ayudar a migrar un editor Craft.js?

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.

Siguiente paso

¿Listo para ir más allá de Craft.js?

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.

Gratis

Prueba GrapesJS

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 editor
Mercado

Explorar los plugins

Components, 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 plugins
Servicios

Habla con un experto en migración

Primero 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