Arrastrar y soltar
Los usuarios mueven bloques y componentes a un lienzo en lugar de editar un archivo plantilla. Tú decides qué bloques existen, dónde pueden dejarse y qué pueden contener.
PageKit: el creador de sitios GrapesJS autoalojado, con el código fuente incluido. Obtener acceso anticipado
Construye visualmente páginas HTML con componentes de arrastrar y soltar, editar estilos sin escribir CSS a mano y mantener el control del HTML y CSS que produce tu aplicación.
26k+
GitHub estrellas
1.4M+
Descargas mensuales de npm
100+
Plugins en GJS.Market
BSD-3-Clause
Licencia principal
Este es todo el argumento de la página en un solo componente. La pestaña Visual es lo que tu usuario arrastra y edita. Las otras dos son lo que el editor te devuelve al código — nada oculto, nada propietario, solo texto de marcado y hojas de estilo que puedes almacenar, transformar y publicar como quieras.
<div id="editor">Lo que ve el usuario: bloques a la izquierda, la página en el centro, controles de estilo a la derecha.
Bloques
Build faster
Launch your next project.
Get startedEstilos
<body>
<section class="hero">
<h1 class="hero__title">Build faster</h1>
<p class="hero__text">Launch your next project.</p>
<a href="/start" class="hero__cta">Get started</a>
</section>
</body>* { box-sizing: border-box; } body {margin: 0;}
.hero{
padding-top:96px;
padding-right:24px;
padding-bottom:96px;
padding-left:24px;
text-align:center;
background-color:rgb(15, 23, 42);
}
.hero__title{
font-size:48px;
color:rgb(255, 255, 255);
}
.hero__cta{
display:inline-block;
padding-top:14px;
padding-right:28px;
padding-bottom:14px;
padding-left:28px;
border-top-left-radius:8px;
border-top-right-radius:8px;
border-bottom-right-radius:8px;
border-bottom-left-radius:8px;
background-color:rgb(99, 102, 241);
color:rgb(255, 255, 255);
}
@media (max-width: 480px){
.hero__title{ font-size:32px; }
}Ambos paneles de código son los valores de retorno reales de GrapesJS 0.23.6, reindentados para poder leerlos: cada llamada devuelve en realidad una sola línea. Dos detalles que conviene saber antes de construir sobre ellos: getHtml() serializa el wrapper, así que el resultado queda encerrado en <body>…</body>, y getCss() expande las declaraciones abreviadas en propiedades individuales y normaliza los colores a rgb(). La hoja de estilos empieza además con un pequeño reinicio que GrapesJS inyecta; getCss({ avoidProtected: true }) lo omite.
Un generador de HTML de arrastrar y soltar permite a los usuarios ensamblar las estructuras de las páginas visualmente mientras tu aplicación mantiene el control del contenido subyacente, el estilizado y el flujo de trabajo de publicación.
Los usuarios mueven bloques y componentes a un lienzo en lugar de editar un archivo plantilla. Tú decides qué bloques existen, dónde pueden dejarse y qué pueden contener.
El contenido, la maquetación y los estilos se editan mediante viñetas en lugar de escribir a mano cada regla CSS. El editor convierte esas elecciones en reglas ordinarias de hojas de estilo.
Recupera el HTML y CSS resultantes en dos cadenas simples y llévalos a tu propia aplicación, tu propio almacenamiento y tu propio flujo de trabajo de publicación.
Es un editor que permite a una persona ensamblar una página web arrastrando piezas a un lienzo, ajustándolas mediante controles en lugar de código, y sacando HTML y CSS reales por el otro lado. Para hacerlo de forma convincente, tiene que combinar todo lo siguiente en un solo software coherente:
La diferencia entre un editor visual de HTML y una simple librería de arrastrar y soltar es que el editor gestiona todo el estado de edición — selección, componentes, estilos, comandos, almacenamiento y salida — como un solo sistema. Una biblioteca mueve un cuadro por la pantalla; un editor sabe qué es ese recuadro, qué puede contener, a qué regla CSS pertenece y cómo serializar el resultado.
Tres versiones públicas de GrapesJS. Nada carga hasta que das clic — los fotogramas no se solicitan, así que esta sección no te cuesta nada al llegar.
La demo original de GrapesJS. Arrastra un bloque, seleccionalo, cambia un estilo — luego abre la vista de código en su barra de herramientas y observa cómo cambian el HTML y el CSS contigo.
Carga una demo de terceros en un iframe. No se solicita nada hasta que haces clic.
Elige un bloque
El usuario elige de la paleta que definiste. Un bloque es un punto de partida reutilizable y nombrado — un hero, una tabla de precios, un formulario — no un div vacío arbitrario.
Arrástrala al lienzo
El editor decide dónde puede aterrizar legalmente el bloque, inserta el componente y lo selecciona. Las reglas de drop son tuyas para establecer por tipo de componente.
Editar contenido y estilos
El texto se edita en su lugar; el diseño, el espaciado, la tipografía y el color provienen del Style Manager. Cada cambio se convierte en una regla CSS que el editor registra.
Guarda el proyecto
El Storage Manager envía el estado del editor al punto final al que lo apuntes. Este es el estado necesario para seguir editando, no la página terminada.
Exportar o publicar HTML + CSS
Llama a getHtml() y getCss(), y luego haz lo que exija tu producto: sanear el HTML, envolverlo en tu plantilla, versionarlo, cachearlo y desplegarlo.
Exactamente tanto como permitas. Cada uno de estos es algo que el editor puede exponer — y algo que puedes fijar por tipo de componente para que un marketer no pueda romper un diseño diseñado por un ingeniero.
Texto, encabezados, enlaces y cualquier contenido que marques como editable. Los componentes que prefieres mantener intactos pueden simplemente dejarse no editables.
Secciones, columnas, contenedores y el espaciado entre ellos, a través de los controles Dimension y Flex en el Style Manager.
Familia de fuentes, tamaño, grosor, altura y alineación de línea, escritos como declaraciones CSS ordinarias.
Texto, fondos, bordes y otras propiedades visuales. Los valores se serializan como rgb() en la hoja de estilos emitida.
Se gestiona a través del Asset Manager, que puedes apuntar a tu propio punto final de subida o a un proveedor de almacenamiento.
Reglas asignadas a un dispositivo. Estilizar mientras un punto de interrupción está activo emite una consulta de medios coincidente en lugar de sobrescribir la regla base.
Elementos estructurados y reutilizables definidos por ti — la unidad en la que se convierte un bloque una vez que se deja caer, y lo que tu app puede reconocer después.
Los rasgos se convierten en los campos del panel de ajustes, así que un componente personalizado puede mostrar un titular y un enlace objetivo y nada más.
Algunos de estos son configuraciones más que predeterminados. GrapesJS incluye el Style Manager con General, Flex, Dimension, Tipografía, Decoraciones y Extra de fábrica; las subidas de assets, el comportamiento de texto enriquecido y los permisos por componente son cosas para las que puedes cablear — o instalar un plugin.
Un editor visual solo es útil si el resultado puede encajar en tu aplicación. GrapesJS mantiene dos cosas separadas, y la distinción importa más que cualquier lista de características: el estado que necesita para seguir editando y el marcado que realmente reciben tus usuarios.
Del lienzo a la página publicada
// What the editor needs to keep editing — components, styles,
// pages, assets and symbols. Store this to resume a session.
const projectState = editor.getProjectData();
// What your users actually receive. Two plain strings.
const html = editor.getHtml(); // <body>…</body>
const css = editor.getCss(); // one line of CSS
// From here it is your application's decision: sanitize it, wrap it
// in your own layout, version it, cache it, put it behind your CDN.
await fetch(`/api/pages/${pageId}/publish`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ html, css }),
});Una nota sobre expectativas: la hoja de estilos emitida es fiel, no está ajustada a mano. Las propiedades abreviadas salen expandidas en propiedades individuales, los colores como rgb(), y se antepone un pequeño reinicio salvo que lo desactives. Trata la salida como una fuente fiable que post-procesas, igual que harías con el resultado de cualquier paso de compilación.
Todo editor visual de HTML necesita el mismo conjunto de subsistemas antes de poder hacer algo interesante. La cuestión no es si los vas a necesitar, sino si escribirlos es la parte de tu producto que vale la pena para los próximos seis meses de tu equipo.
Lo que necesita un editor HTML antes de editar nada
Y los posees permanentemente: el lienzo que tiene que mantenerse editable mientras se renderiza como un navegador, la lógica de drop-target, la pila de deshacer que sobrevive a todo lo demás, el serializador que convierte tu árbol en memoria de nuevo en marcado — además de todos los informes de errores contra ellos mientras el producto exista.
El lienzo, arrastrar y soltar, modelo de componentes, Block Manager, Style Manager, Device Manager, Asset Manager, deshacer historial, Storage Manager y las APIs de salida HTML/CSS vienen con el núcleo. Lo que escribes es la parte específica de tu producto.
Esto no es una afirmación de que GrapesJS sea tu producto completo. El almacenamiento, la autenticación, los permisos, la publicación, la sanitización y cada flujo de trabajo específico del producto siguen siendo tuyos — consulta el diagrama de arquitectura a continuación para ver exactamente dónde cae la línea.
La columna de la derecha no garantiza que un subsistema esté terminado para tu caso de uso: nombra la parte de GrapesJS que amplías en lugar del archivo en blanco desde el que de otro modo empezarías.
| Subsistema de editor | Constrúyelo tú | Empieza con GrapesJS |
|---|---|---|
| Lienzo | Lo construyes tú | Base del editor |
| Arrastrar y soltar | Lo construyes tú | Base del editor |
| Modelo de componentes | Lo construyes tú | DomComponents |
| Bloques | Lo construyes tú | Block Manager |
| Controles de estilo | Lo construyes tú | Style Manager |
| Edición responsiva | Lo construyes tú | Device Manager |
| Activos | Lo construyes tú | Asset Manager |
| Deshacer / volver a hacer | Lo construyes tú | Comandos e historial |
| Almacenamiento | Lo construyes tú | Storage Manager |
| Salida HTML | Lo construyes tú | editor.getHtml() |
| Salida CSS | Lo construyes tú | editor.getCss() |
| Componentes personalizados | Lo construyes tú | DomComponents.addType |
| Arquitectura de plugins | Lo construyes tú | API de plugins existente |
| Autorización y permisos | Lo construyes tú | Tu solicitud |
| Sanitización | Lo construyes tú | Tu solicitud |
| Publicación | Lo construyes tú | Tu solicitud |
Las tres últimas filas son las honestas. Nada de incrustar un editor elimina tu responsabilidad sobre quién puede editar qué, qué se almacena y qué llega al público.
El editor es una capa de tu producto — no el producto en sí. Tu aplicación conserva a los usuarios, los permisos, los datos y la decisión sobre qué se activa.
Tu solicitud
Tú eres dueño de la superficie
Capa incrustada
Editor visual GrapesJS
Amplíalo con pluginsPersistencia
Tu API
Datos
Tu base de datos
Entrega
Tu publicación
Cinco responsables hacen la mayor parte del trabajo. Los conocerás en menos de una hora desde que empiezas, así que merece la pena saber de qué es responsable cada uno.
Los elementos HTML representados como componentes editables, con sus propias reglas sobre lo que contienen, si pueden arrastrarse y qué propiedades exponen.
La paleta. Los bloques son lo que los usuarios arrastran; cada uno nombra el componente en el que se convierte. El núcleo incluye una paleta vacía, así que lo que aparece ahí es totalmente tu decisión.
Controles visuales de propiedades CSS, agrupados en sectores — General, Flex, Dimension, Tipography, Decorations y Extra por defecto. Los sectores y propiedades son configurables.
Persiste el estado del proyecto en almacenamiento local, un punto final remoto o un adaptador de almacenamiento que tú mismo escribas. El guardado automático es una bandera de configuración.
Imágenes y medios: el selector que ven los usuarios y la ruta de subida detrás de él, que apuntas a tu propio endpoint o a un plugin de proveedor.
Aquí es donde un constructor HTML deja de ser genérico. Define un tipo de componente, decide qué renderiza y expone solo las propiedades que los usuarios deberían controlar: el resto del marcado permanece exactamente como lo escribieron tus ingenieros.
// A block is what the user drags out of the panel.
editor.BlockManager.add('hero', {
label: 'Hero',
category: 'Sections',
content: { type: 'hero' },
});
// A component type is what that block becomes on the canvas — and the
// only place you decide what the user may change about it.
editor.DomComponents.addType('hero', {
model: {
defaults: {
tagName: 'section',
attributes: { class: 'hero' },
components: '<h1 class="hero__title">Build faster</h1>',
// Traits become the fields in the settings panel.
traits: [{ type: 'text', name: 'headline', label: 'Headline' }],
droppable: false,
},
},
});Cuatro cosas comparten nombre en la mayoría de los tutoriales y son realmente diferentes. Mantenerlos separados es la diferencia entre un constructor que puedes mantener y un montón de cadenas HTML.
Bloquear
Una entrada de paleta: una etiqueta, una categoría y el contenido que inserta. Puramente un punto de partida — no tiene vida después de la caída.
Componente
El tipo registrado en DomComponents. Decide la etiqueta, los hijos por defecto, si es posible soltar y cómo lo trata el editor a partir de ahí.
Rasgos
Los campos en el panel de ajustes. Un rasgo es un agujero deliberado en un componente que de otro modo está sellado — un titular, un enlace objetivo, un ID de plan.
Margen
El componente se serializó de nuevo a HTML, con las clases y atributos que definiste, listo para lo que haga tu backend a continuación.
Diseña esta cadena deliberadamente y los usuarios no técnicos tienen verdadera libertad dentro de los límites que elijas. Si lo sáltas, habrás enviado un editor de texto que emite divs.
Estos son los tipos de secciones que casi todo constructor necesita desde el primer día, descritos por el marcado que emiten más que por su aspecto. Construyéndolos contra la API Block Manager, o instala un plugin de bloques y empieza desde una paleta completa.
Una sección con un encabezado, un párrafo de apoyo y un enlace estilizado como un botón.
Un encabezado con un elemento de logotipo y una lista de navegación que se pliega en anchos estrechos.
Un contenedor de cartas repetidas, cada una con una ranura de icono, un encabezado y una copia del cuerpo.
Planifica tarjetas con un elemento de precio, una lista de características y un enlace de llamada a la acción.
Elementos de cita bloqueada con una cita y una imagen de avatar opcional.
Una cuadrícula de imágenes cuyas fuentes se llenan desde el Asset Manager.
Una única sección centrada con un título y un enlace principal.
Un elemento de forma con entradas etiquetadas y una acción que apuntas a donde quieras.
Columnas de enlace, texto legal y navegación secundaria en un elemento de pie de página.
Vale la pena ser preciso: estos son ejemplos de tipos de bloques, no una lista de cosas integradas en GrapesJS. El núcleo comienza con un Block Manager vacío a propósito — qué paleta obtienen tus usuarios es una decisión que tomas, ya sea escribiendo los bloques o instalando uno de los plugins de bloques más abajo en esta página.
El mismo núcleo de edición, señalando seis problemas diferentes. Cada uno de estos necesita control a nivel HTML por una razón distinta.
Ofrece a los usuarios una forma visual de editar páginas que ya existen como HTML. Como el editor hace el marcado de ida y vuelta, estás ampliando tus páginas actuales en lugar de migrarlas al formato propietario de alguien.
Constructor de páginas WYSIWYGDeja que los profesionales del marketing ensamblen las páginas de campaña a partir de bloques que diseñó tu equipo, manteniendo intactas las clases y la estructura que espera tu sistema de diseño en el resultado.
Creador de páginas de aterrizajeIntegra la edición visual como una característica de tu producto. Los clientes crean páginas dentro de tu app, en tu dominio, almacenadas en tu base de datos.
Creador de páginas SaaSAñade una capa visual a una plataforma de contenido sin reemplazarla. El editor produce HTML que el CMS ya sabe almacenar y renderizar.
Editor de CMS sin cabezaEl HTML del correo electrónico es una disciplina aparte: tablas, estilos en línea, peculiaridades del cliente. GrapesJS lo gestiona a través de los presets de MJML y del boletín en lugar de por la ruta de la página web.
Generador de correo ReactIncluye el editor dentro de un panel existente, detrás de tu propia autenticación y navegación, sin redirección a un sitio de terceros.
Creador de páginas embebibleDiferentes equipos llegan aquí por distintos motivos, pero el requisito es el mismo: edición visual que no les cueste el control del marcado.
Añadir edición visual a una aplicación que ya existe, sin tener que adoptar una plataforma ni reescribir el front-end en torno al runtime de otra persona.
Convierte la creación de páginas en una función por la que los clientes pagan, con el editor en tu dominio y los datos en tu base de datos.
Da a los equipos de contenido edición visual sin reemplazar el CMS debajo, porque lo que sale es HTML que el sistema ya maneja.
Construye un sistema de edición de páginas con tus propios bloques y componentes, y luego reutilízalo entre proyectos del cliente en lugar de reconstruirlo por proyecto.
Permite que los usuarios compongan páginas de destino de forma visual mientras tu plataforma mantiene las plantillas, el seguimiento y la cadena de publicación consistentes.
No tienes que enviar usuarios a otra web para editar sus páginas. Monta el editor dentro de tu propia aplicación y mantén tu autenticación, navegación y backend existentes.
Dónde se sienta el editor
En la práctica, esta es una ruta en tu app que renderiza un contenedor e inicializa el editor contra él. El usuario nunca sale de tu dominio, la sesión es la que ya tiene, y el proyecto carga y guarda a través de los endpoints que has escrito.
Apunta el Storage Manager a tu API y cada página se convierte en una fila en tu base de datos, detrás de tu propia autenticación. GrapesJS no aloja nada, y GJS.Market tampoco: nunca llega ningún contenido de usuario.
Dos cosas para guardar, no una
const editor = grapesjs.init({
container: '#editor',
// Editor state goes to your API, behind your own authentication.
storageManager: {
type: 'remote',
autosave: true,
options: {
remote: {
urlStore: `/api/pages/${pageId}`,
urlLoad: `/api/pages/${pageId}`,
fetchOptions: { credentials: 'include' },
},
},
},
});Mantén la distinción clara. El estado del editor es lo que el editor necesita para reabrir una página y poder editarla más. La salida publicada es el HTML y CSS que recibe un visitante. Tienen diferentes ciclos de vida, diferentes reglas de acceso y normalmente tablas distintas — y un plugin puede ayudar con el cableado, pero la arquitectura es tuya.
Edición
El usuario trabaja en el lienzo. Nada es público todavía; el editor solo toca el estado del proyecto.
Guarda un borrador
El guardado automático o un guardado explícito escribe el estado a través de tu endpoint de almacenamiento, bajo tus reglas de permiso.
Vista previa
Renderiza el HTML y CSS actuales en una ruta de vista previa para que el autor vea la página real, no el lienzo.
Aprobar
Si tu producto necesita ser revisado, este es tu flujo de trabajo: el editor no tiene opinión sobre quién puede aprobar.
Publicar
Toma getHtml() y getCss(), sanea el resultado, envuélvelo en tu plantilla, versiónalo y escríbelo allí donde sirvas tus páginas.
Live HTML
La página publicada es HTML y CSS simples en tu infraestructura. No se requiere tiempo de ejecución de editor para que un visitante la vea.
Esta es la diferencia más clara respecto a un creador de páginas alojado. No hay un proveedor que decida cuándo tu página se publica, en qué dominio se atiende o qué pasa si dejas de pagar.
El Device Manager cambia el lienzo entre anchos, y los estilos establecidos mientras un dispositivo está activo se escriben como una consulta multimedia con alcance a ese ancho en lugar de sobrescribir la regla base. GrapesJS viene con Escritorio, Tableta, Horizontal móvil y Vertical móvil; la lista y sus anchos son configuración, no un conjunto fijo.
Qué pueden cambiar los usuarios por punto de ruptura
Los anchos que se muestran son los valores predeterminados de GrapesJS. Vale la pena decirlo claramente: el editor define las reglas CSS — cómo se renderiza finalmente una página publicada sigue dependiendo del marcado y la hoja de estilos que envíes y del navegador que las lea.
Todo lo que hay a continuación es una lista real en GJS.Market, con el nombre, precio y miniatura mostrados en directo desde el catálogo. Agrupado de la forma en que esta página piensa sobre el problema: primero código y salida, luego los paneles que los rodean.
Permite que los usuarios —o tus propios desarrolladores— lean y editen el marcado y los estilos detrás de un componente sin salir del editor.
Explora esta categoríaAbre el HTML y CSS del componente seleccionado para la edición directa — la forma más rápida de hacer evidente la relación visual/código para un desarrollador escéptico.
Una superficie de edición de código dentro del constructor para los usuarios que quieran bajar a marcar en una sección y mantenerse visualmente en todas las demás secciones.
Saca el HTML y CSS: en un paquete descargable, convertido en servidor o enviado directamente a un host.
Explora esta categoríaEmpaqueta el HTML, CSS y recursos del proyecto en un archivo descargable para transferir un sitio estático.
Convierte el JSON almacenado del proyecto en HTML y CSS en el servidor, por lo que publicar no requiere una sesión de navegador.
Envía la salida generada directamente desde el editor a un host, para productos que requieren publicación con un solo clic.
Paletas listas para usar, así que el Block Manager vacío se llena de secciones en lugar de un panel en blanco.
Explora esta categoríaUna paleta inicial de bloques estructurales comunes, para que el primer día no se dedique a escribir llamadas Block Manager.
Bloques que emiten clases de utilidad Tailwind, para equipos cuyo resultado debe coincidir con un sistema de diseño Tailwind existente.
Mejor edición CSS: sugerencias de clases mientras escribes, selectores de color y degradados más ricos.
Explora esta categoríaSugiere clases CSS existentes mientras se escribe el Selector Manager, lo que mantiene el marcado generado consistente en lugar de disperso.
Un selector de degradado para el Style Manager, que cubre un caso que el control de color por defecto no hace.
Elementos y herramientas reutilizables y sincronizadas para convertir tu propio marcado en un componente de editor.
Explora esta categoríaAmplía el editor de texto en línea para que la edición de contenido se sienta como un documento en lugar de un campo de código.
Explora esta categoríaConecta el Asset Manager a un almacenamiento real para que las imágenes tengan un sitio donde vivir.
Explora esta categoríaAdaptadores de persistencia para equipos que prefieren configurar un backend antes que escribir uno.
Explora esta categoríaUn adaptador de almacenamiento remoto ya fabricado, para prototipos y productos ya en Firebase.
Mantiene el estado del proyecto en el navegador — útil para borradores offline y para demos sin backend alguno.
Configuraciones preconfiguradas y gestión de plantillas, para empezar desde un editor funcional en lugar de uno vacío.
Explora esta categoríaUna configuración configurada para editar páginas web, más parecida a un builder funcional que a una simple llamada de init.
Gestión de plantillas para productos donde los usuarios parten de un diseño elegido en lugar de un lienzo en blanco.
El HTML de correo electrónico tiene sus propias reglas. La ruta MJML existe precisamente por esa razón.
Explora esta categoríaTres configuraciones iniciales, montadas solo a partir de anuncios que realmente existen. Trátalos como una forma para adaptar, no como un paquete para comprar.
Para desarrolladores que necesitan un editor visual sencillo y nada más
Consulta la guía WYSIWYGPara sitios de varias páginas con un sistema de diseño real detrás
Consulta la guía de la página de aterrizajePara edición orientada al cliente dentro de tu propio producto
Los precios se muestran en directo desde el catálogo.
No son cuatro productos compitiendo por el mismo puesto, sino cuatro oficios diferentes. El objetivo de la tabla es hacer explícito el intercambio, no declarar ganador.
| Consideración | GrapesJS | Biblioteca de arrastrar y soltar | Creador de páginas alojado | Construir desde cero |
|---|---|---|---|---|
| Incluye editor visual | Sí | Parcial — solo el gesto | Sí | Lo que construyas |
| Control sobre HTML y CSS | Alta — la salida es tuya para post-procesar | Alto — tú escribes el margen | Varía según el proveedor | Total |
| Autoalojado | Sí | Sí | Normalmente no | Sí |
| Incrustable en tu app | Sí | Sí | Depende del proveedor | Sí |
| Modelo de componentes y rasgos | Incorporado | Escríbela tú | Modelo del proveedor | Escríbela tú |
| Controles de estilo y puntos de interrupción | Incorporado | Tú los escribes | Incorporado | Tú los escribes |
| Hora de un editor en activo | Días | Meses | Actas | Meses a años |
| Personalización de productos | Alto | Alto | Delimitado por el proveedor | No Acotado |
| Mantenimiento continuo | Tu integración, más un núcleo upstream | Todo el editor | Vendedores | Todo, para siempre |
| Licencia y coste | Núcleo BSD-3-Clause, $0 para usar | Normalmente permisivo | Suscripción | Tiempo de ingeniería |
Verificado frente al núcleo GrapesJS (BSD-3-Clause, v0.23.6) en 2026-09-03. Las filas de constructores alojados son deliberadamente vagas porque sus capacidades varían según el proveedor y cambian con frecuencia — comprueba el producto específico que estás considerando en lugar de confiar en una afirmación a nivel de categoría.
Este es el error de juicio más caro en este ámbito. Un equipo elige una biblioteca de listas ordenables, envía una demo en una semana y luego pasa un año descubriendo qué faltaba.
Todo lo necesario para mover una caja de un lugar a otro, y nada más allá. Realmente útil — para reordenar una lista.
Estado que persiste en todos esos gestos, y un serializador que puede convertir todo en marcado que un navegador renderizará.
Arrastrar y soltar es una interacción. Un creador de páginas es todo un sistema de edición.
Un paquete, un contenedor, una llamada de entrada. Todo en esta página crece a partir de estas pocas líneas.
npm install grapesjsimport grapesjs from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';
// Mount the editor on any container in your own application.
const editor = grapesjs.init({
container: '#editor',
height: '100vh',
// Core ships no blocks: you decide what users are allowed to drag.
blockManager: { blocks: [] },
});El editor ahora se ejecuta pero tiene una paleta vacía — el núcleo deliberadamente no envia bloques. Registra el primero y el tipo de componente en el que se convierte en:
// A block is what the user drags out of the panel.
editor.BlockManager.add('hero', {
label: 'Hero',
category: 'Sections',
content: { type: 'hero' },
});
// A component type is what that block becomes on the canvas — and the
// only place you decide what the user may change about it.
editor.DomComponents.addType('hero', {
model: {
defaults: {
tagName: 'section',
attributes: { class: 'hero' },
components: '<h1 class="hero__title">Build faster</h1>',
// Traits become the fields in the settings panel.
traits: [{ type: 'text', name: 'headline', label: 'Headline' }],
droppable: false,
},
},
});A partir de aquí el trabajo es trabajo de producto: qué bloques reciben tus usuarios, qué se les permite cambiar y qué hace tu backend con el marcado que sale.
Esta página cubre la edición y salida a nivel HTML. Las guías vecinas toman el mismo núcleo desde otros ángulos.
La guía más amplia para crear un creador de páginas de arrastrar y soltar: el gesto, los bloques, las plantillas y las decisiones de producto que los rodean.
Lee la guíaCómo evaluar un creador de páginas de código abierto: licencias, gobernanza, extensibilidad y a qué te compromete realmente el autoalojamiento.
Compara las opcionesConstruir un constructor de páginas dentro de una aplicación React, y donde un modelo de componentes React y uno de componentes HTML divergen.
Lee la guíaEl envoltorio oficial de React: montar el editor como un componente, gestionar su ciclo de vida y mantenerlo fuera del bucle de renderizado de React.
Ver la integraciónEmpieza con GrapesJS, ofrece a los usuarios una experiencia visual de edición HTML y mantén el control de tu aplicación, datos y flujo de trabajo de publicación.
Un paquete npm y una llamada de iniciación. Tendrás un lienzo funcional antes de terminar tu café.
Prueba GrapesJSPaletas de bloques, vistas de código, controles de estilo, adaptadores de almacenamiento y herramientas de exportación — listados reales, precios reales.
Explora los plugins GJS.MarketComponentes, bloques, estilos, almacenamiento y la API de plugins, directamente del proyecto upstream.
Lee la guía del constructorArrastra. Suelta. Edita el HTML. Controla la salida.
Más sobre cómo construir editores con GrapesJS: