Inicio rápido
Empieza con un solo editor en una página y la barra de herramientas predeterminada. Primero consigue que funcionen la escritura y el formato; añade más tarde las cargas, la IA y la colaboración. Para los wrappers específicos de cada framework (React, Vue, Angular, Svelte, Blazor, ASP.NET, PHP), consulta Descargar.
¿Qué configuración necesitas?
- Una aplicación de ejemplo nueva: usa el proyecto inicial de React paso a paso.
- Una aplicación existente con un framework: sigue la guía de React, Angular o Next.js.
- Una página HTML simple: elige una de las opciones de instalación de abajo y luego crea el editor.
Lo habrás conseguido cuando puedas escribir texto, seleccionarlo y aplicarle negrita. Leer el HTML es el siguiente paso; guardarlo de forma permanente requiere el backend de tu aplicación.
¿Ya lo intentaste y te atascaste? Consulta los problemas de configuración más abajo.¿Problemas al escribir o con la selección en React? Sigue la lista de diagnóstico de los saltos del cursor y elige un patrón de estado del editor.
1. Consigue el editor
Tres caminos. El CDN no necesita ninguna instalación y es la forma más rápida de ver el editor en funcionamiento; los otros dos son los que se usan en los despliegues de producción.
Opción A: descarga el paquete con licencia
Ve a /download y descarga el paquete de tu framework. Descomprímelo en tu sitio para que el editor quede en /richtexteditor/:
your-site/
├── richtexteditor/
│ ├── rte.js ← protected production build (~410 KB)
│ ├── rte_theme_default.css
│ ├── plugins/
│ │ ├── all_plugins.js ← AI Toolkit, comments, slash, mentions, etc.
│ │ ├── aitoolkit.css
│ │ ├── crdt-engine.min.js ← Per-node Yjs CRDT (load only if you use collab)
│ │ └── ...
│ └── lang/ ← optional translations
└── your-page.htmlOpción B: npm (recomendado)
npm install @richscripts/richtexteditor
# or scaffold a complete working example app:
npm create @richscripts/richtexteditor my-app -- --react # also: --vue, --angular, --svelteDespués importa los estilos y el bundle desde tu proceso de compilación:
// Side-effect import attaches `RichTextEditor` to `window`.
import "@richscripts/richtexteditor/richtexteditor/rte.js";
import "@richscripts/richtexteditor/richtexteditor/plugins/all_plugins.js";
// Or via the typed React wrapper (Vue / Angular wrappers shipped too):
import { RichTextEditorComponent } from "@richscripts/richtexteditor/react";Opción C: CDN, sin nada que instalar
jsDelivr y unpkg replican el paquete de npm publicado, así que un editor que funciona son dos etiquetas en un archivo HTML vacío: sin descarga, sin paso de compilación y sin cuenta. Pega esto en un CodePen y funciona:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/rte_theme_default.min.css" />
<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/rte.js"></script>
<div id="div_editor1">Hello RichTextEditor</div>
<script>
var editor1 = new RichTextEditor("#div_editor1");
</script>Eso te da el editor principal y su barra de herramientas. Añade una etiqueta más para el conjunto completo de plugins (AI Toolkit, comentarios, comandos de barra, menciones, tablas de diseño y el resto):
<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/plugins/all_plugins.min.js"></script>Una línea opcional. La superficie de edición pide su hoja de estilos del contenido en /richtexteditor/runtime/richtexteditor_content.css en tu origen, que una página solo con CDN no tiene, así que verás un 404 en el panel de red. No se rompe nada (el editor lleva los mismos valores predeterminados en línea y la superficie tiene estilo en cualquier caso), pero puedes apuntarlo a la copia del CDN y la solicitud desaparece:
var editor1 = new RichTextEditor("#div_editor1", {
contentCssUrl: "https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/runtime/richtexteditor_content.css"
});Fija la versión. Todas las rutas de arriba indican @2.16.0 a propósito: una URL con versión fija es inmutable y se almacena en caché durante un año, así que tu página no puede cambiar sin que lo sepas. @2 se resuelve a la versión 2.x más reciente, algo útil durante la evaluación y poco prudente en producción. Cambia el host por https://unpkg.com/ y las mismas rutas funcionan allí.
O sírvelo desde nuestro dominio. Los mismos archivos están publicados en cdn.richtexteditor.com: byte a byte la misma compilación que usa este sitio, en caché en el borde de Cloudflare, sin ningún tercero entre tú y nosotros:
<link rel="stylesheet" href="https://cdn.richtexteditor.com/richtexteditor/rte_theme_default.min.css" />
<script src="https://cdn.richtexteditor.com/richtexteditor/rte.js"></script>
<script src="https://cdn.richtexteditor.com/richtexteditor/plugins/all_plugins.min.js"></script>La contrapartida es la fijación de la versión, y funciona al revés. Estas rutas no llevan versión, así que siempre sirven la versión actual y no puedes mantener una página en una más antigua; se indica a los navegadores que vuelvan a comprobar cada cuatro horas. Las URL de jsDelivr de arriba son inmutables para cada versión, que es lo que quieres para una compilación que necesites reproducir dentro de unos meses. Usa cdn.richtexteditor.com cuando prefieras no añadir un tercero a tu página, y las URL de jsDelivr con versión fija cuando necesites dejar la versión bien atada.
Dos cosas que conviene saber antes de publicarlo. El CDN es un tercero que sirve tu página: cómodo para pruebas, prototipos e informes de errores, pero las rutas autoalojadas de arriba son las que mantienen el editor por completo dentro de tu propia infraestructura, que es la razón de ser de una licencia perpetua. Y un CDN cambia cómo llegan los archivos al navegador, no lo que tu licencia te permite hacer con ellos; consulta /license.
2. Añade el script y crea tu primer editor
<link rel="stylesheet" href="/richtexteditor/rte_theme_default.css" />
<script src="/richtexteditor/rte.js"></script>
<script src="/richtexteditor/plugins/all_plugins.js"></script>
<div id="div_editor1">Hello RichTextEditor</div>
<script>
var editor = new RichTextEditor("#div_editor1");
</script>Ya tienes un editor que funciona con la barra de herramientas predeterminada. Ábrelo en un navegador y empieza a escribir.
3. Personaliza la barra de herramientas
Pasa un objeto de configuración como segundo argumento:
var editor = new RichTextEditor("#div_editor1", {
toolbar: "basic", // "basic" | "full" | "mobile" | "custom"
height: "500px",
showStatistics: true, // word / character count in the bottom bar
showFloatTextToolBar: true
});Para una barra de herramientas personalizada con grupos explícitos:
var editor = new RichTextEditor("#div_editor1", {
toolbar: "custom",
toolbar_custom:
"{bold,italic,underline}|" +
"{insertorderedlist,insertunorderedlist}|" +
"{insertlink,insertimage}|" +
"{aiassist,aichat}|" +
"{undo,redo}"
});Consulta la referencia de elementos de la barra de herramientas y los menús para ver todos los nombres de comando.
4. Lee y escribe el contenido
// Get the current HTML
var html = editor.getHTMLCode();
// Replace the editor's content
editor.setHTMLCode("<p>New content</p>");
// Get plain text (no markup)
var text = editor.getPlainText();
// Get a structured-content JSON document (lossless round-trip with setJSON())
var json = editor.getJSON();
editor.setJSON(json);5. Envía el contenido con un formulario
Si tu editor está dentro de un <form>, RichTextEditor escribe automáticamente el HTML del editor en un campo oculto que replica el id del contenedor del editor. En el servidor, lo lees de la solicitud como cualquier otro campo del formulario. Para envíos dinámicos, llama a editor.getHTMLCode() desde tu controlador de envío:
document.getElementById("save").addEventListener("click", function () {
fetch("/api/save", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ html: editor.getHTMLCode() })
});
});¿Tienes problemas para empezar?
- npm no se reconoce
- Instala Node.js con npm, vuelve a abrir la terminal y comprueba
node --versionynpm --version. Si la instalación informa de un motor no compatible, usa una versión de Node compatible con las dependencias de tu proyecto inicial. - El ejemplo no arranca
- Ejecuta los comandos dentro de la carpeta que contiene
package.json, después de que terminenpm install. El proyecto inicial de React usanpm run dev; el de Angular usanpm start. Abre la URL que aparece en la terminal. - El editor está en blanco o RichTextEditor no está definido
- Busca el primer error en la consola del navegador y las solicitudes de scripts fallidas en la pestaña de red. Confirma que la URL del runtime carga JavaScript, no un 404 ni una página HTML alternativa. En HTML simple, carga el runtime antes de crear el editor y después de que exista su contenedor.
- La barra de herramientas aparece sin estilos
- Comprueba que la hoja de estilos del tema del editor se carga correctamente. Usa la hoja de estilos y los scripts de la misma versión del editor.
- Mi contenido desaparece al recargar
- Leer el HTML no lo guarda en una base de datos. La URL
/api/savede arriba es un endpoint de ejemplo que debes implementar; comprueba su respuesta y carga el HTML guardado al volver a abrir el editor.
Contacta con soporte indicando las versiones de tu framework y del editor, el comando o la acción que falló, el primer mensaje de error y un ejemplo pequeño que lo reproduzca. Quita las claves de API, las contraseñas y el contenido privado de los documentos antes de compartirlo.
6. Elige tu siguiente paso
AI Toolkit
Ask AI desde la barra de herramientas, el panel AI Chat acoplado y sugerencias en cola en el panel AI Review. Conéctalo a OpenAI / Anthropic / Azure con una línea de inyección de dependencias en el servidor, o pasa un callback setResolver() en el cliente.
CRDT de Yjs por nodo
Escritura simultánea en el mismo párrafo sin conflictos al combinar. Pasa textSync: "crdt" a editor.collab.attach() con cualquier proveedor de Yjs que alojes tú mismo.
Referencia de configuración
Todas las opciones de configuración, todas las posiciones de la barra de herramientas y todos los nombres de eventos en una sola página con búsqueda. Los valores predeterminados están al principio de rte.js y se pueden editar a propósito, para que no tengas que recompilar nada.
Wrappers para frameworks
Bindings nativos para React, Vue, Angular, Svelte, Blazor Server, ASP.NET Core, ASP.NET Web Forms, Classic ASP y PHP. El mismo editor, con una interfaz idiomática en el stack que elijas.
El principio de rte.js es JavaScript simple y editable
Todos los bundles rte.js tienen al principio un bloque RTE_DefaultConfig en JavaScript simple, seguido del código del editor con licencia. Abre rte.js en cualquier editor de texto y cambia valores como RTE_DefaultConfig.skin, la toolbar predeterminada, los valores de idioma predeterminados, las URL de carga, etc.: estos ajustes se mantienen editables a propósito para que puedas personalizar el comportamiento en todo el sitio sin volver a ejecutar ningún proceso de compilación.