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

Puck vs GrapesJS

Alternativa a Puck para desarrolladores

Construye una experiencia de edición visual más completa con GrapesJS. Puck es un editor React primero para componer tus propios componentes. Si tu producto está creciendo hasta convertirse en un creador de páginas completas, editor web, editor de correo electrónico o editor visual orientado al cliente, GrapesJS te ofrece una base de editores más amplia para integrar y ampliar.

Código abierto, autoalojadoNúcleo independiente del frameworkSubsistemas de editor integradosEcosistema extensible de plugins
Puck

Componentes React entrando, React saliendo.

  1. React Application
  2. React Components
  3. Puck
  4. JSON
  5. React Renderer
GrapesJS

Un documento visual, luego lo que publiques a partir de él.

  1. Application
  2. GrapesJS
  3. Canvas · Components · Blocks · Styles · Layers · Assets · Commands
  4. Project Data
  5. Your Backend / Publishing

26k+

GrapesJS GitHub estrellas

100+

plugins en GJS.Market

1.4M+

GrapesJS Descargas npm / mes

BSD-3-Clause

Licencia del núcleo de GrapesJS

Cifras de GrapesJS y GJS.Market, verificadas 2026-09-03. Describen el proyecto que recomienda esta página, no una puntuación contra Puck — un recuento de estrellas no es prueba de que un editor encaje mejor con tu producto que otro.

La respuesta corta

¿Sigue siendo Puck el adecuado para el equipo?

Ambos son editores de código abierto que puedes alojar por tu cuenta y poner delante de tus usuarios. Parten de diferentes direcciones arquitectónicas, así que la verdadera pregunta no es cuál es mejor, sino si estás construyendo un editor de componentes React o una experiencia completa de edición visual.

Quédate con Puck si

Tu editor es un editor de componentes React, y eso es lo que debería mantener.

Esto describe tu producto

  • Tu aplicación está profundamente centrada en React.
  • Tu editor gira en torno a tus propios componentes React.
  • Quieres una experiencia de configuración de componentes nativa React.
  • Quieres controlar la mayor parte de la experiencia de usuario del editor tú mismo.
  • Tu modelo de contenido se corresponde de forma natural con los componentes React.

Nada en esta página es motivo para migrar. Puck está bien documentado, desarrollado activamente y con licencia MIT.

Lee la documentación de Puck

Considera GrapesJS si

Tu editor se está convirtiendo en una superficie de producto propia, con subsistemas a la altura.

Esto describe tu hoja de ruta

  • Estás construyendo un constructor de páginas visual completo.
  • Necesitas edición visual HTML y CSS.
  • Necesitas bloques, capas, estilos y recursos.
  • Necesitas un editor embebido dentro de un producto SaaS.
  • Necesitas flexibilidad en el framework más allá de React.
  • Quieres un ecosistema de editores extensible para apoyarte.
  • Necesitas flujos de trabajo de email o de creadores de páginas lado a lado.
  • Tu editor se está convirtiendo en una característica principal del producto.

Una base de editores más amplia significa menos infraestructura editorial para que tu equipo diseñe, construya y mantenga.

Abre un editor en vivo
Señales

¿Cuándo tiene sentido cambiar de Puck?

Estas son señales concretas de producto, no una afirmación sobre lo que hacen la mayoría de los equipos. Si varias de ellas describen tu hoja de ruta, tu editor ha superado un configurador de componentes.

Tu editor se está convirtiendo en algo más que un simple configurador de componentes

Los usuarios han empezado a pedir composición visual de páginas, bloques reutilizables, controles responsivos, flujos de trabajo de recursos, plantillas, controles de estilo, capas y varias páginas — características del editor en lugar de más componentes.

Tu producto necesita un editor orientado a documentos

En lugar de un componente React con props serializados en JSON, necesitas una página compuesta por secciones, componentes, estilos, recursos y maquetación — un documento que tus usuarios editan en lugar de una configuración que ellos mismos rellenan.

Tu editor necesita soportar más que React

Si el mismo editor tiene que reutilizarse en diferentes entornos de aplicación, o incrustado en un lugar donde React no es el anfitrión, la independencia del framework deja de ser teórica.

Los usuarios quieren controlar el estilo, no solo el contenido

Una capa de estilo visual es un subsistema grande. Cuando "dejar que los usuarios elijan el espacio" se convierte en un elemento de hoja de ruta, un editor que ya tiene un Style Manager guarda un proyecto.

Necesitas HTML y CSS como salida, no solo React

Las exportaciones, la publicación estática, los embedos de terceros y el correo electrónico requieren marcado portátil. Renderizar exclusivamente a través de componentes React hace que eso sea más difícil de lo necesario.

Las plantillas de correo electrónico aparecieron en la hoja de ruta

El correo electrónico es un objetivo de renderizado diferente con sus propias limitaciones. No es para lo que Puck está documentado, y es un flujo de trabajo que el ecosistema GrapesJS ya cubre.

El editor es ahora una función que vendes

Una vez que el editor forma parte de lo que pagan los clientes, el coste de construir y mantener la infraestructura del editor por ti mismo se convierte en una decisión del producto más que en un detalle de implementación.

El caso honesto

¿Cuándo deberías quedarte con Puck?

No necesitas migrar simplemente porque GrapesJS exista. Puck es un editor bien documentado, licenciado por MIT y desarrollado activamente, y para toda una clase de productos es el que mejor se adapta.

  • Tu producto es completamente React

    Puck se ejecuta dentro de tu árbol React, así que tus componentes, contexto, ganchos y sistema de diseño están disponibles en el editor sin una capa de integración.

  • Tu modelo de contenido son componentes React

    Si lo que los usuarios editan es un árbol de componentes con props tipados, Puck lo expresa directamente. Un modelo visual de documento sería un paso extra de traducción.

  • Tu editor está relativamente centrado

    Un configurador con un conjunto de componentes fijo no necesita un Style Manager, un Asset Manager ni un Layer Manager. Los subsistemas no utilizados siguen siendo área superficial para ocultar.

  • Quieres tener el editor UI

    Puck documenta trece espacios de anulación más la redacción, por lo que los equipos que quieren diseñar toda la experiencia de edición tienen un camino claro.

  • Necesitas una integración sólida con React

    El soporte React con opción voluntaria Server Component, props dinámicos, resolvers y fuentes de datos externas están documentados, preocupaciones nativas de React.

  • No necesitas un modelo de edición HTML/CSS

    Si nada en tu hoja de ruta requiere editar el marcado o los estilos visualmente, la base más amplia de editor es una capacidad que tendrías sin usar.

Si esos descritos describen tu producto, quedarse en Puck es la decisión correcta — y esta página ha cumplido su función.

¿Sigues comparando? Consulta la matriz completa de características
Arquitectura

Puck y GrapesJS parten de modelos diferentes

Puck está diseñado para editar y componer componentes React. GrapesJS está diseñado para la edición visual de documentos y proporciona un conjunto más amplio de subsistemas de editor para hacerlo.

Puck

Los componentes y sus accesorios son el modelo de contenido.

  1. React
  2. Components
  3. Fields / Props
  4. Puck
  5. JSON
  6. React
GrapesJS

Un documento visual es el modelo de contenido.

  1. Application
  2. Visual Document
  3. Components · Blocks · Styles · Layers · Assets · Commands
  4. Project Data
  5. HTML / CSS / Other Outputs

Ninguno de los dos modelos puede describirse como falta de capacidades que el otro tiene: cualquier cosa que GrapesJS venga como módulo puede implementarse encima de Puck, y cualquier cosa que Puck haga de forma nativa con React puede integrarse en GrapesJS. La diferencia es el punto de partida.

El punto de partida cambia es cuánta infraestructura de editores tiene que montar tu equipo antes de que el producto parezca terminado — que es la pregunta que las dos siguientes secciones responden concretamente.

Ninguna de las dos arquitecturas es universalmente superior. Optimizan para cosas diferentes, y la adecuada es la que se ajusta a lo que tus usuarios están editando realmente.

Construir vs adoptar

¿Cuánta infraestructura de editor necesita tu equipo?

La decisión real rara vez es "Puck o GrapesJS". Es cuánta infraestructura de editor debe poseer e implementar tu equipo. Esta tabla lee cada capacidad de la propia documentación de cada proyecto: "núcleo" significa un módulo documentado, "configurable" significa que el proyecto la soporta mediante configuración o sobreescrituras, y "implementación personalizada" significa que tu equipo la escribe. Ninguna de estas celdas significa "imposible".

CapacidadPuckGrapesJS
Edición de componentes ReactFuerza del coreIntegración — tipos de componentes personalizados o el envoltorio React
Lienzo visualDisponible — Vista previa de iframeNúcleo
BloquesComponentes y configuraciónCore — Block Manager
Sistema de estilosPersonalizados y configurablesCore — Style Manager
Capas y contornoDisponible y personalizableCore — Layer Manager
ActivosImplementación o integración personalizadaCore — Asset Manager
Edición responsivaViewports y configuraciónCore — Device Manager
CommandsPersonalizado, en tu aplicaciónCore — Commands
AlmacenamientoResponsabilidad de la aplicaciónNúcleo — Storage Manager, además de tu integración
Datos del proyectoJSON de hélices componentesDatos del proyecto: estructura, estilo, recursos y páginas
Salida HTML y CSSNo el modelo principalCaso de uso principal
Editor personalizado UIAltamente personalizableAltamente personalizable
PluginsPlugin APIPlugin API y ecosistema de mercado
Flujos de trabajo de correo electrónicoNo es un enfoque documentadoDisponible a través del ecosistema

Verificado 2026-09-03 contra puckeditor.com/docs y grapesjs.com/docs. Una capacidad marcada como "implementación personalizada" para un proyecto no es un fallo, sino una decisión de diseño sobre qué pertenece a la biblioteca y qué pertenece a tu aplicación.

Capacidades

Cuando GrapesJS es el mejor ajuste

Estos son módulos documentados del núcleo GrapesJS, y son lo que "una base de editor más amplia" significa concretamente para un creador visual de páginas web, creador de páginas SaaS, editor CMS, creador de correo electrónico o editor de marca blanca.

Lienzo visual

Un entorno completo de edición visual que renderiza un documento en vivo, no una vista previa de un árbol de componentes.

Componentes

Define tipos de componentes editables con su propio modelo, traits y comportamiento en el lienzo.

Bloques

Registra bloques reutilizables de arrastrar y soltar que los usuarios componen páginas.

Style Manager

Controles visuales para tipografía, espaciado, color, dimensiones y más, limitados por selector.

Asset Manager

Navega, sube y reutiliza imágenes y otros medios desde dentro del editor.

Device Manager

Define los viewports y permite que los usuarios editen entre puntos de interrupción responsivos.

Almacenamiento

Conecta los datos del editor a tu propio backend, con almacenamiento local o remoto y autosave.

Commands

Extiende el comportamiento del editor de scripts y asigna el comportamiento a tu propio UI.

Plugins

Añadir funcionalidad sin modificar el editor central — el punto de extensión sobre el que se construye el ecosistema.

HTML / CSS

Exporta marcado portátil y estilos que puedas renderizar donde quieras.

Correo electrónico

Extiende el mismo editor para el correo HTML y los flujos de trabajo MJML mediante plugins del ecosistema.

Matriz de características

Puck vs GrapesJS

Capacidad por capacidad, en el propio vocabulario de cada proyecto. Ambos proyectos se mueven, así que esto refleja lo que cubre su documentación a fecha de verificación a continuación. Las celdas evitan un simple sí/no donde la respuesta honesta sea "soportado, pero lo configuras o implementas".

CapacidadGrapesJSPuck
ArquitecturaEditor visual de documentos con su propio árbol de componentesÁrbol de componentes React, editado como props tipados
LicenciaBSD-3-Clause core, MIT React wrapperMIT — @puckeditor/core 0.23.0
Código abierto
Dependencia de ReactNinguno en el núcleo; el envoltorio oficial de React disponibleObligatorio — React es el runtime
Flexibilidad del marcoNúcleo independiente del frameworkEnfoque en React por diseño
Lienzo visualCore — un documento en vivo en un iframeIntegrado — vista previa del mismo origen del iframe
ComponentesTipos de componentes con modelo, vista y traitsFuerza del core — tus propios componentes React
BloquesCore — Block ManagerCajón de componentes; campos slot para anidamiento
Capas / esquemaCore — Layer ManagerIntegrado — región de contorno, reemplazable mediante anulaciones
Gestión de estilosCore — Style Manager con controles visuales CSSTu propio CSS y sistema de diseño; el Theming API inspira el editor UI
Activos y mediosNúcleo — Asset Manager con fuentes enchufablesImplementación personalizada — suministrar un campo UI o una fuente externa
Vista previa del dispositivoCore — Device ManagerIncorporado — Viewports
Edición responsivaEdición de puntos de interrupción visual mediante el Style ManagerCambio de viewport; las reglas responsivas están en tu propio CSS
CommandsCore — CommandsResponsabilidad de la aplicación — despacho y acciones
Deshacer y volver a hacerCore — UndoManagerIncorporado — historia documentada API
Edición de texto enriquecidoRTE integrado, extensibleIncorporado — Componentes de campo richtext y menú de texto enriquecido
Componentes personalizadosComponente API — addType()Core — cualquier componente React más un ComponentConfig
Editor personalizado UIAltamente personalizable — paneles, vistas personalizadas, reemplazo completo de UIAltamente personalizable — trece ranuras de anulación más composición
PlantillasPlugin — plantillas listados del gestorResponsabilidad de la aplicación — almacenar y recargar los datos guardados
AlmacenamientoCore — Storage Manager, local o en tu backendResponsabilidad de la aplicación — persistes los datos
Datos del proyectoComponentes, estilos, recursos, páginas y estado del editorJSON de props de componentes, bajo contenido y raíz
Salida HTML y CSSCaso de uso principal — exporta HTML y CSS portátilesNo el modelo principal — la salida se renderiza React
Renderizado ReactIntegración — montar React o renderizar marcado exportadoCore — un componente de Render reproduce los datos guardados
React Server ComponentsEditor del lado del cliente — revisa tus requisitos de integraciónSoporte voluntario, documentado
Flujos de trabajo de correo electrónicoDisponible a través del ecosistema de pluginsNo es un caso de uso documentado
MJMLPlugin — presets y exportación de MJMLNo aplicable
PluginsPlugin API y un mercado públicoAnulaciones Plugin API y UI
Asistencia de IANo en el núcleo — integración personalizadaPlugin de IA documentada y cliente en la nube
AutoalojamientoSí — tú diriges el editorSí — tú diriges el editor
Marca blancaUI reemplazable, paneles y marcaAnulaciones Theming API y UI
Incrustación SaaSIntegra el editor dentro de tu productoIntegra el editor dentro de tu producto React
Backend y base de datos personalizadosStorage Manager habla con tu propio APIResponsabilidad de la aplicación — tú eres el propietario del transporte
PermisosResponsabilidad de la aplicación — bloquea los comandos que exponesIncorporado — permisos API y activación de funciones
PublicaciónResponsabilidad de la aplicaciónResponsabilidad de la aplicación
Mercado de pluginsGJS.Market — 100+ pluginsLista de plugins de la comunidad

Verificado 2026-09-03 con la documentación oficial de cada proyecto. "Core" significa un módulo documentado de la biblioteca; "mediante configuración" e "implementación personalizada" significan que la capacidad es alcanzable pero tu equipo la ensambla. No tener celda aquí significa que un proyecto no puede hacer algo.

Integración

¿Y si tu producto es React primero?

Entonces ambos son viables. Puck es el mejor encaje cuando React es la arquitectura central de la aplicación, los componentes son el modelo de contenido, el editor debe manipular los componentes y tu sistema de diseño ya está profundamente integrado con React. GrapesJS es el mejor ajuste cuando React es una sola capa de integración en lugar de toda la arquitectura del editor — cuando también necesitas edición visual HTML y CSS, quieres reutilizar el editor en diferentes entornos frontend o necesitas subsistemas de editor más amplios.
  1. Next.js
  2. React
  3. GrapesJS
  4. Your Components
  5. Your Backend
npm install grapesjs @grapesjs/react
Monta el editortsx
import { useRef } from 'react';
import grapesjs from 'grapesjs';
import GjsEditor from '@grapesjs/react';
import 'grapesjs/dist/css/grapes.min.css';

// GrapesJS runs on the client: it owns an iframe canvas and a live document.
// In Next.js, mount it from a client component.
export default function Editor() {
  return (
    <GjsEditor
      grapesjs={grapesjs}
      options={{
        height: '100vh',
        storageManager: { type: 'remote', autosave: true },
      }}
      onEditor={(editor) => {
        // Register the component types you mapped from your Puck config here.
      }}
    />
  );
}

Tus componentes siguen siendo tuyos. El editor se sitúa entre ellos y el documento que tus usuarios están construyendo, y guarda en tu propio backend.

Decide

¿Qué editor se adapta a tu producto?

Una forma de producto por fila, un veredicto. Tres de estos van directamente a Puck, y uno es realmente un empate — si cada fila apuntara igual, la tabla no merecería la pena leerla.

Lo que estás construyendoMejor punto de partida
Un configurador de componentes ReactPuck
Un editor para tu sistema de diseño ReactPuck
Una experiencia de edición altamente personalizada y nativa de ReactPuck
Un creador de páginas de marketingGrapesJS
Un creador de páginas dentro de tu producto SaaSGrapesJS
Un creador de páginas web orientado al clienteGrapesJS
Un generador de correo electrónicoGrapesJS
Un editor visual independiente del frameworkGrapesJS
Una superficie de edición visual para un CMS sin cabezaCualquiera

Si aún no puedes decir qué fila describe tu producto, elegir un editor es prematuro. Anota las tres cosas que tus usuarios deben poder cambiar, y la respuesta normalmente se resuelve sola.

SaaS

¿Incorporar un editor visual a tu SaaS?

Esta es la sección que impide que el resto de la página prometa demasiado. GrapesJS proporciona la capa de edición. Tu SaaS sigue siendo dueño de autenticación, autorización, persistencia, facturación, publicación y lógica de negocio — y esa es la mayor parte del proyecto.

Tu SaaS es el propietario

Responsabilidades 8

Todo lo que lo convierte en un producto y no en un editor.

  • Autenticación y sesiones
  • Organizaciones y membresía del equipo
  • Roles y permisos
  • Facturación, planes y derechos
  • Tu base de datos y modelo de datos
  • Publicación y alojamiento de lo que los usuarios construyen
  • Versionado, borradores y retroceso
  • Pruebas de auditoría y herramientas de soporte

GrapesJS proporciona

Responsabilidades 5

La capa de edición, como módulos documentados que configuras.

  • El lienzo y el árbol de componentes
  • Bloques, capas, estilos y recursos
  • Edición responsiva y vista previa del dispositivo
  • Commands, deshacer y volver a hacer
  • Datos del proyecto entran, datos del proyecto salen

Sigues construyendo

Responsabilidades 6

La integración entre ambos — el proyecto real.

  • Tu propia biblioteca de componentes y bloques
  • El editor UI se adaptó a tu producto
  • Almacenamiento cableado a tu API y modelo de arrendamiento
  • Subir assets a tu propio almacenamiento
  • Bloqueo de permisos de los comandos del editor
  • La canalización de publicación y las URLs de vista previa
Sistema de diseño

Construye el editor alrededor de tu sistema de diseño

Esta es la parte que Puck acierta por defecto, y la parte sobre la que una integración de GrapesJS debe ser deliberada. Tus usuarios deberían trabajar con los componentes y bloques que tengan sentido para tu producto, no con primitivas genéricas de creadores de páginas.

  • Secciones de marketing

    Las secciones de las que está hecha una página de destino.

    Bloques en el panel

    • Hero
    • Pricing
    • CTA
    • Testimonials
  • Superficies de producto

    Piezas reutilizables de cromo e interactivas.

    Bloques en el panel

    • Product Card
    • Navigation
    • Forms
    • Footer
  • Bloques comerciales

    Componentes específicos de la tienda con sus propios datos.

    Bloques en el panel

    • Collection Grid
    • Cart Summary
    • Checkout Steps
    • Badges

En GrapesJS son tipos de componentes registrados con addType() y expuestos a través del Block Manager, con traits para los accesorios que el usuario puede cambiar. Restringir la paleta a tu propio sistema es lo que mantiene la salida en la marca sin controlarla después.

Explorar bloques y preajustes
Más allá de las páginas web

¿Necesitas algo más que un creador de páginas web?

Si tu hoja de ruta incluye boletines, plantillas CRM, automatización de marketing, plantillas transaccionales o un generador de correo electrónico orientado al cliente, el mismo núcleo de editor puede ampliarse con herramientas de correo electrónico y MJML. El renderizado de correo electrónico es una disciplina propia: ningún editor garantiza la compatibilidad universal con los clientes, y las plantillas finales aún deben probarse en clientes reales.
Your SaaSGrapesJS
  • Web Page Builder
  • Email BuilderLa rama de correo electrónico continúa:MJMLEmail HTML
Pruébalo

Prueba GrapesJS antes de migrar

Cuatro editores publicados, todos con el mismo núcleo. Nada carga hasta que haces clic, así que la página se mantiene rápida.

Abrir pantalla completa

La demo propia del proyecto GrapesJS — la línea base libre, con el panel completo por defecto.

grapesjs.com/demo.htmlGratis

Carga una demo externa en un iframe

Ecosistema

Extiende tu editor GrapesJS

Agrupado según lo que estás construyendo. Cada tarjeta de abajo es un anuncio real — nombre, precio y miniatura vienen directamente del catálogo, así que nada aquí puede anunciar un plugin que no exista.

Fibrados

Donde suelen empezar los equipos

Cuatro puntos de partida por tipo de producto. Cada anuncio es real y tiene precios en directo desde el catálogo.

Los precios que se muestran son los precios actuales del catálogo.

Migración

Migración de Puck a GrapesJS

Puck y GrapesJS usan modelos de contenido y editor diferentes, por lo que una migración es una transformación del modelo de datos en lugar de un reemplazo de paquete. Todo lo que sigue describe esa transformación.

Puck

Tu configuración, más los props de cada componente colocado.

  • Configuration
  • Component Props
  • JSON Data
GrapesJS

Un documento de proyecto que cubre estructura, estilo, medios y estado editor.

  • Components
  • Styles
  • Assets
  • Pages
  • Editor State
  • Storage

Los modelos de contenido existentes y la configuración del editor deben ser mapeados, no portados. Las dos siguientes secciones muestran el mapeo y la hoja de ruta.

Cartografía

De componentes Puck a componentes GrapesJS

Cada lado tiene su propio vocabulario para la misma idea: algo que los usuarios pueden colocar y las partes que pueden editar. Una migración es la transformación entre ambos.

Puck
  • Component
  • Props
  • Fields
  • Render
Capa de migración

Una transformación que escribes una vez por tipo de componente. No hay un convertidor automático — este es el trabajo.

GrapesJS
  • Component
  • Traits
  • Attributes
  • Blocks
  • Commands
  • Storage

Qué hay que mapear

  • Componentes

    Cada tipo de componente Puck se convierte en un tipo de componente GrapesJS.

  • Campos editables

    Los campos Puck se convierten en traits, atributos o componentes hijos editables.

  • Accesorios y valores predeterminados

    defaultProps se asignan a los valores predeterminados del modelo de componentes.

  • Validación

    Las restricciones de campo pasan a definir rasgos o a tus propias comprobaciones.

  • Renderizado

    Una función de renderizado React se convierte en marcado que el lienzo puede alojar.

  • Bloques

    Lo que estaba implícito en la configuración se convierte en un registro explícito de bloques.

  • Contenido almacenado

    El Puck JSON existente debe transformarse en datos de proyecto.

  • Editor UI

    Los paneles, campos y anulaciones se reconfiguran, no se portan.

El esfuerzo de migración depende del número de componentes, tu esquema de contenido existente, cualquier comportamiento personalizado de los editores y tus integraciones. Un puñado de componentes simples es una tarea muy diferente a una gran biblioteca con interfaces de campo a medida.

Ejemplo

Ejemplo: migrar un componente hero

Un antes y después conceptual, simplificado para mostrar la forma de la aplicación. Trata la correspondencia exacta campo-rasgo como ilustrativa en lugar de como una conversión automática universal.

Puck: configuración + renderizadojsx
// Puck: a component is configuration + a React render function.
// Field types are documented at puckeditor.com/docs/api-reference/fields
const config = {
  components: {
    Hero: {
      fields: {
        title: { type: 'text' },
        description: { type: 'textarea' },
        image: { type: 'text' },
      },
      defaultProps: {
        title: 'Ship faster',
        description: 'The visual editor your team already knows.',
        image: '/hero.png',
      },
      render: ({ title, description, image }) => (
        <section className="hero">
          <img src={image} alt="" />
          <h1>{title}</h1>
          <p>{description}</p>
        </section>
      ),
    },
  },
};
GrapesJS: tipo de componente + bloquejs
// GrapesJS: a component type owns its markup, its editable traits and how it
// is exposed to the canvas. Traits are the closest analogue to Puck fields.
editor.Components.addType('hero', {
  model: {
    defaults: {
      tagName: 'section',
      attributes: { class: 'hero' },
      traits: [
        { name: 'title', type: 'text', changeProp: true },
        { name: 'description', type: 'text', changeProp: true },
        { name: 'image', type: 'text', changeProp: true },
      ],
      components: [
        { type: 'image' },
        { tagName: 'h1', type: 'text', content: 'Ship faster' },
        { tagName: 'p', type: 'text', content: 'The visual editor…' },
      ],
    },
  },
});

// A block is what makes the type draggable from the panel. Puck derives this
// from the config; in GrapesJS it is a separate, explicit registration.
editor.Blocks.add('hero-block', {
  label: 'Hero',
  category: 'Sections',
  content: { type: 'hero' },
});

Migración de contenido que ya tienes

La configuración es solo la mitad. Todo lo que tus usuarios ya guardan es Puck JSON, y tiene que ser recorrido y transformado en componentes que tus nuevos tipos entiendan.

Migración de contenido que ya tienesjs
// Existing Puck content is a JSON tree of { type, props } nodes. Migrating it
// means walking that tree and emitting the GrapesJS component definitions your
// new types understand — a transform you write once, per component type.
function puckNodeToGjs(node) {
  const map = {
    Hero: ({ title, description, image }) => ({
      type: 'hero',
      title,
      description,
      image,
    }),
    // …one entry per component type in your Puck config
  };

  const toGjs = map[node.type];
  if (!toGjs) throw new Error(`Unmapped Puck component: ${node.type}`);
  return toGjs(node.props);
}

// Puck stores content under `data.content`; `data.root` holds page-level props.
const components = puckData.content.map(puckNodeToGjs);
editor.setComponents(components);

Ejemplo conceptual. Los tipos de campo, las definiciones de rasgos y el modelo exacto de componentes dependerán de tus propios componentes.

Hoja de ruta

Una migración práctica de Puck a GrapesJS

  1. 1
    Paso 1

    Inventario

    Haz una lista de lo que existe: los componentes Puck, sus campos, tus tipos de contenido, el JSON guardado, el renderizador y el flujo de publicación. La mayoría de las sorpresas en una migración están en esta lista.

  2. 2
    Paso 2

    Componentes de la aplicación

    Decide la correspondencia antes de escribir código: Puck componente a GrapesJS tipo de componente, Puck campo a rasgo, atributo o UI personalizado, Puck layout a estructura de componentes, Puck datos a datos de proyecto.

  3. 3
    Paso 3

    Reconstruir el editor UI

    Recrea solo la interfaz que realmente usan tus usuarios. Una migración es el momento más barato para dejar los paneles que nadie abrió.

  4. 4
    Paso 4

    Migrar contenido existente

    Recorre el árbol Puck almacenado y emite las definiciones de componentes que tus nuevos tipos entienden. Mantén la transformación en control de versiones: la ejecutarás más de una vez.

  5. 5
    Paso 5

    Ejecuta ambos en paralelo

    Cuando el riesgo es alto, mantén el editor antiguo renderizando contenido antiguo mientras el nuevo toma contenido nuevo. El renderizado dual te da la capacidad de parar.

  6. 6
    Paso 6

    Validar

    Compara la salida visual, el comportamiento responsivo, la publicación, los datos guardados y los flujos de trabajo que realmente realizan tus usuarios — no solo eso que carga el editor.

  7. 7
    Paso 7

    Corta

    Mueve los usuarios una vez que la comparación esté limpia, dejando el camino antiguo accesible hasta que el nuevo haya pasado por un ciclo completo de uso.

Sin puerta

La guía de migración está en esta página

Todo lo anterior es la guía: no se requiere correo electrónico, nada bloqueado, ni plazo prometido. El esfuerzo de migración depende de cuántos componentes tengas, cuánta personalización de editores hayas creado y cuánto contenido ya existe, así que no vamos a citar una duración que no podamos respaldar.

Mapeo conceptual

Configuración, campos, props y renderizado de Puck, coinciden con los tipos de componentes GrapesJS, traits, bloques y almacenamiento.

Lista de verificación de componentes

Las ocho cosas que hay que mapear por tipo de componente, enumeradas arriba.

Lista de verificación de modelos de datos

Qué Puck persiste frente a lo que contiene un proyecto GrapesJS, y dónde cae cada pieza.

Configuración de React y Next.js

Cómo se monta el editor dentro de una app de React, y qué significa eso en Next.js.

Estilo y configuración de activos

¿Qué subsistemas configurar primero para que el editor parezca terminado en vez de en bruto?

Despliegue y control de calidad

Migrar una superficie a la vez, conservar los originales y la salida renderizada por diferencias contra la fuente.

Servicios de migración

¿No quieres construir la migración tú mismo?

Podemos ayudarte a mapear tus componentes y modelos de contenido Puck existentes a una implementación GrapesJS lista para producción. El alcance y el calendario se acuerdan tras la revisión de la arquitectura — no citamos plazos antes de ver la base de código.

  1. 1
    1

    Revisión de arquitectura

    Leemos tu configuración Puck, las personalizaciones del modelo de contenido y del editor, y anotamos lo que realmente tiene que moverse.

  2. 2
    2

    Mapeo de componentes

    Cada componente Puck se convierte en un tipo específico de componente GrapesJS con su traits, bloque y restricciones.

  3. 3
    3

    Migración de datos

    Una transformación para tu contenido almacenado, ejecutada contra tus datos reales en lugar de una muestra.

  4. 4
    4

    Editor personalizado UI

    Los paneles, Chrome e interacciones que tus usuarios necesitan — diseñados para adaptarse a tu producto, no a la demo predeterminada.

  5. 5
    5

    Plugins y extensiones

    Plugins del marketplace donde encajan, plugins personalizados donde no.

  6. 6
    6

    Integración en el backend

    Almacenamiento, recursos, permisos y publicación conectados a tu propio API y base de datos.

  7. 7
    7

    Pruebas y despliegue

    Comparación de salida, revisiones rápidas y un plan de cambio con una forma de regresar.

FAQ

Puck y GrapesJS: preguntas frecuentes

¿Cuál es la mejor alternativa a Puck?

No hay una única mejor alternativa — depende de para qué esté tu editor. GrapesJS es la opción más sólida cuando necesitas una base más amplia de editor visual con un lienzo, bloques, estilos, capas, recursos y edición responsiva integrada. Craft.js está más cerca de Puck en espíritu como un framework React primero. Si tu editor realmente es un configurador de componentes React, la mejor alternativa puede ser quedarse con Puck.

¿Es GrapesJS una alternativa a Puck?

Sí, para un tipo específico de producto. Ambos permiten crear un editor visual dentro de la app y ambos son de código abierto y autoalojados. Difieren en el punto de partida: Puck edita un árbol de componentes React, GrapesJS edita un documento visual. GrapesJS es una alternativa genuina cuando necesitas el modelo visual del documento; es peor cuando los componentes React son el modelo de contenido.

¿Cuál es la diferencia entre Puck y GrapesJS?

Puck es un editor React primero construido para componer y configurar tus propios componentes React: sus datos son JSON que describen tipos de componentes y props, y el renderizado se realiza a través de React. GrapesJS es una base más amplia de editor visual construida alrededor de un documento visual, con módulos documentados para componentes, bloques, estilos, capas, recursos, dispositivos, comandos y almacenamiento, y HTML y CSS como salida de primera clase.

¿El Puck es solo React?

Puck se ejecuta dentro de React — React es el tiempo de ejecución tanto del editor como de la salida renderizada. Sus datos son JSON simples, así que otro sistema podría leerlos, pero la experiencia de edición y renderizado es nativa de React por diseño. Eso es una fortaleza para los productos React y una limitación si el mismo editor tiene que ejecutarse en un lugar donde React no es el anfitrión.

¿Puede GrapesJS funcionar con React?

Sí. GrapesJS incluye un envoltorio oficial React, @grapesjs/react, y el editor central es independiente del framework, así que se monta dentro de una aplicación React o Next.js como cualquier otro componente del lado del cliente. Consulta la guía de integración GrapesJS React para los patrones de montaje.

¿Puede GrapesJS usar componentes React?

Puedes integrar componentes React en un editor GrapesJS, pero no de la manera que Puck. Los tipos de componentes GrapesJS poseen su marcado en el documento canvas, por lo que un componente React normalmente se refleja como un tipo GrapesJS con traits correspondiente, o se renderiza en el lienzo a través de una vista personalizada. Es una capa de integración en lugar del modelo nativo.

¿Puedo usar GrapesJS con Next.js?

Sí. GrapesJS es un editor del lado del cliente que posee un lienzo iframe, así que tiene que montarse desde un componente cliente. En Pages Router eso suele significar una importación dinámica con SSR desactivado; en App Router un componente cliente es suficiente.

¿Puede Puck editar HTML y CSS?

No como modelo principal. Puck edita props de componentes, y el marcado y el estilo provienen de los componentes React que has escrito. Por supuesto, puedes construir un componente que acepte marcado en bruto o nombres de clase, pero no hay una superficie visual documentada de edición HTML o CSS como GrapesJS proporciona un Style Manager y un documento editable.

¿Es GrapesJS adecuado para productos SaaS?

Sí — está diseñado para ser incrustado y se utiliza como capa de edición dentro de los productos SaaS. Proporciona el editor, no el producto: autenticación, organizaciones, permisos, facturación, persistencia y publicación siguen siendo tuyos para construir.

¿Puedo crear un constructor de páginas con GrapesJS?

Sí. Ese es el caso de uso principal: un lienzo, una paleta de bloques, controles de estilo, capas, recursos, dispositivos responsivos y salida HTML y CSS. Lo que añades es tu propia biblioteca de bloques, editor UI y almacenamiento.

¿Puedo construir un editor de marca blanca con GrapesJS?

Sí. El editor UI es reemplazable: paneles, botones y vistas pueden intercambiarse o reconstruirse, y no hay una marca de fabricante que tengas que mostrar. La marca multi-inquilino, los conjuntos de bloques por inquilino y los permisos son cosas que tu aplicación implementa encima.

¿Puedo construir un editor de correo electrónico con GrapesJS?

Sí, usando plugins del ecosistema para bloques de correo electrónico y autoría y exportación de MJML. El renderizado de correo es una disciplina aparte: ningún editor puede garantizar compatibilidad universal entre correo y cliente, así que las plantillas aún necesitan pruebas en los clientes que tus destinatarios realmente usan.

¿Puedo migrar contenido de Puck a GrapesJS?

Sí, transformándolo. Puck almacena un árbol JSON de tipos de componentes y props; GrapesJS almacena datos de proyectos que describen componentes, estilos, recursos y páginas. La migración significa recorrer el árbol Puck y emitir las definiciones de componentes GrapesJS que tus nuevos tipos entienden — una transformación que escribes una vez por tipo de componente.

¿Existe un convertidor automático de Puck a GrapesJS?

No. No hay un convertidor automático, y cualquier página que lo afirme lo está exagerando. Los dos editores persisten cosas diferentes, así que el mapeo depende de tus componentes y de tu esquema de contenido. Lo que se puede reutilizar es la forma de la transformación, que muestra esta página.

¿Qué tan difícil es una migración de Puck?

Depende del número de tipos de componentes, de cuánto comportamiento personalizado de editor hayas construido, de cuánto contenido ya existe y de lo acoplado que está tu renderizador con React. No publicamos una duración, porque una migración de seis componentes con datos limpios y una de sesenta con JSON editado a mano no son el mismo proyecto.

¿Puedo usar mi sistema de diseño React actual con GrapesJS?

Sí, pero lo conectas deliberadamente. Normalmente registras un tipo de componente GrapesJS por cada componente del sistema de diseño, expones los props que los usuarios pueden cambiar como traits y añades cada uno al Block Manager. Esa restricción es lo que mantiene la salida en marca.

¿Puedo conectar GrapesJS a mi propia base de datos?

Sí. El Storage Manager se puede configurar para leer y escribir a través de tu propio API, así que los datos del proyecto permanecen en tu base de datos en la forma que elijas. Nada tiene que pasar por un servicio de terceros.

¿Puedo autoalojar GrapesJS?

Sí. Es un paquete npm que incluyes en tu propia aplicación — no hay servicio alojado, ni cuenta ni licencia por asiento. El núcleo está licenciado por BSD-3-Clause y el envoltorio de React es MIT.

¿Necesito usar plugins GJS.Market?

No. GrapesJS es totalmente utilizable sin ningún plugin del marketplace, y los módulos principales son gratuitos y de código abierto. Los plugins existen para que puedas comprar una capacidad en lugar de construirla — un editor UI shell, herramientas de correo electrónico, una biblioteca de bloques — cuando ese intercambio merece la pena para tu equipo.

¿Debería migrar de Puck a GrapesJS?

Solo si tu editor ya ha superado el modelo de configurador de componentes. Si los usuarios piden estilo visual, bloques, capas, recursos, plantillas, controles responsivos o salida no React, una base más amplia ahorrará trabajo. Si tu editor compone tus componentes React y eso es lo que debe seguir haciendo, quedarse en Puck es la decisión correcta.

Siguiente paso

Build más allá del editor de componentes

Si Puck ya encaja en tu modelo de componente React, puede que no haya razón para cambiar. Pero si tu editor se está convirtiendo en un producto visual completo, GrapesJS te da una base más amplia sobre la que construir, personalizar y ampliar.

Desarrolladores

Prueba GrapesJS

Abre un editor en vivo, luego lee la documentación y construye. No hay nada que instalar para empezar a buscar.

Abre una demo en directo
Equipos

Explora los plugins GJS.Market

Extiende el editor con lo que construirías de otro modo: shells UI, bloques, correo electrónico, recursos y almacenamiento.

Explorar plugins
SaaS y empresa

Obtén ayuda con migración

Auditamos tu implementación de Puck, diseñamos la arquitectura objetivo y hacemos la migración contigo.

Habla con un experto