Démarrage rapide
Commencez avec un seul éditeur sur une page et la barre d’outils par défaut. Faites d’abord fonctionner la saisie et la mise en forme ; ajoutez plus tard l’envoi de fichiers, l’IA et la collaboration. Pour les wrappers propres à chaque framework (React, Vue, Angular, Svelte, Blazor, ASP.NET, PHP), consultez Télécharger.
De quelle installation avez-vous besoin ?
- Une nouvelle application d’exemple : utilisez le starter React pas à pas.
- Une application existante avec un framework : suivez le guide React, Angular ou Next.js.
- Une simple page HTML : choisissez l’une des options d’installation ci-dessous, puis créez l’éditeur.
C’est réussi lorsque vous pouvez taper du texte, le sélectionner et le mettre en gras. Lire le HTML est l’étape suivante ; l’enregistrer de façon permanente nécessite le backend de votre application.
Vous avez déjà essayé et vous êtes bloqué ? Consultez les problèmes d’installation ci-dessous.Problèmes de saisie ou de sélection dans React ? Suivez la liste de diagnostic des sauts de curseur et choisissez un modèle d’état pour l’éditeur.
1. Obtenir l’éditeur
Trois voies. Le CDN ne nécessite aucune installation et c’est le moyen le plus rapide de voir l’éditeur fonctionner ; les deux autres sont celles qu’utilisent les déploiements en production.
Option A — Télécharger le bundle sous licence
Rendez-vous sur /download et récupérez le bundle de votre framework. Décompressez-le dans votre site pour que l’éditeur se trouve sous /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.htmlOption B — npm (recommandé)
npm install @richscripts/richtexteditor
# or scaffold a complete working example app:
npm create @richscripts/richtexteditor my-app -- --react # also: --vue, --angular, --svelteImportez ensuite les styles et le bundle depuis votre pipeline de build :
// 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";Option C — CDN, rien à installer
jsDelivr et unpkg reflètent tous deux le package npm publié : un éditeur fonctionnel tient donc en deux balises dans un fichier HTML vide — sans téléchargement, sans étape de build, sans compte. Collez ceci dans un CodePen et cela fonctionne :
<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>Vous obtenez ainsi l’éditeur de base et sa barre d’outils. Ajoutez une balise de plus pour l’ensemble complet des plugins — AI Toolkit, commentaires, commandes slash, mentions, tableaux de mise en page, etc. :
<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/plugins/all_plugins.min.js"></script>Une ligne facultative. La surface d’édition demande sa feuille de style de contenu à l’adresse /richtexteditor/runtime/richtexteditor_content.css sur votre origine, qu’une page utilisant uniquement le CDN ne possède pas : vous verrez donc une erreur 404 dans le panneau Réseau. Rien ne casse — l’éditeur embarque les mêmes valeurs par défaut en ligne et la surface est stylée dans tous les cas —, mais vous pouvez la faire pointer vers la copie du CDN, et la requête disparaît :
var editor1 = new RichTextEditor("#div_editor1", {
contentCssUrl: "https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/runtime/richtexteditor_content.css"
});Figez la version. Chaque chemin ci-dessus indique @2.16.0 à dessein : une URL figée est immuable et mise en cache pendant un an, si bien que votre page ne peut pas changer à votre insu. @2 correspond à la dernière version 2.x, ce qui est utile pendant l’évaluation et imprudent en production. Remplacez l’hôte par https://unpkg.com/ et les mêmes chemins fonctionnent.
Ou servez-le depuis notre domaine. Les mêmes fichiers sont publiés sur cdn.richtexteditor.com — le build exact, à l’octet près, qu’utilise ce site, mis en cache à la périphérie de Cloudflare, sans tiers entre vous et nous :
<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>Le compromis porte sur le figeage de version, et il joue dans l’autre sens. Ces chemins ne portent pas de version : ils servent donc toujours la version courante, et vous ne pouvez pas maintenir une page sur une version plus ancienne ; les navigateurs sont invités à revérifier toutes les quatre heures. Les URL jsDelivr ci-dessus sont immuables pour chaque version, ce que vous voulez pour un build que vous devrez reproduire dans plusieurs mois. Utilisez cdn.richtexteditor.com lorsque vous préférez ne pas ajouter de tiers à votre page, et les URL jsDelivr figées lorsque vous avez besoin de verrouiller la version.
Deux choses à savoir avant de mettre en production. Le CDN est un tiers qui sert votre page — pratique pour les essais, les prototypes et les rapports de bug, mais ce sont les voies auto-hébergées ci-dessus qui gardent l’éditeur entièrement dans votre propre infrastructure, ce qui est tout l’intérêt d’une licence perpétuelle. Et un CDN change la façon dont les fichiers parviennent au navigateur, pas ce que votre licence vous autorise à en faire ; consultez /license.
2. Ajouter le script et créer votre premier éditeur
<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>Vous avez un éditeur fonctionnel avec la barre d’outils par défaut. Ouvrez la page dans un navigateur et commencez à taper.
3. Personnaliser la barre d’outils
Transmettez un objet de configuration en second argument :
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
});Pour une barre d’outils personnalisée avec des groupes explicites :
var editor = new RichTextEditor("#div_editor1", {
toolbar: "custom",
toolbar_custom:
"{bold,italic,underline}|" +
"{insertorderedlist,insertunorderedlist}|" +
"{insertlink,insertimage}|" +
"{aiassist,aichat}|" +
"{undo,redo}"
});Consultez la référence des éléments de barre d’outils et de menu pour tous les noms de commandes.
4. Lire et écrire le contenu
// 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. Envoyer le contenu avec un formulaire
Si votre éditeur se trouve dans un <form>, RichTextEditor écrit automatiquement le HTML de l’éditeur dans un champ masqué qui reprend l’id du conteneur de l’éditeur. Côté serveur, vous le lisez dans la requête comme n’importe quel autre champ de formulaire. Pour des envois dynamiques, appelez editor.getHTMLCode() depuis votre gestionnaire d’envoi :
document.getElementById("save").addEventListener("click", function () {
fetch("/api/save", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ html: editor.getHTMLCode() })
});
});Des difficultés pour démarrer ?
- npm n’est pas reconnu
- Installez Node.js avec npm, rouvrez votre terminal et vérifiez
node --versionetnpm --version. Si l’installation signale un moteur non pris en charge, utilisez une version de Node prise en charge par les dépendances de votre starter. - L’exemple ne démarre pas
- Exécutez les commandes dans le dossier qui contient
package.json, une foisnpm installterminé. Le starter React utilisenpm run dev; le starter Angular utilisenpm start. Ouvrez l’URL affichée dans le terminal. - L’éditeur est vide ou RichTextEditor n’est pas défini
- Recherchez la première erreur dans la console du navigateur et les requêtes de scripts en échec dans l’onglet Réseau. Vérifiez que l’URL du runtime charge bien du JavaScript, et non une erreur 404 ou une page HTML de repli. En HTML simple, chargez le runtime avant de créer l’éditeur, après que son conteneur existe.
- La barre d’outils n’a pas de style
- Vérifiez que la feuille de style du thème de l’éditeur se charge correctement. Utilisez la feuille de style et les scripts de la même version de l’éditeur.
- Mon contenu disparaît après un rafraîchissement
- Lire le HTML ne l’enregistre pas dans une base de données. L’URL
/api/saveci-dessus est un exemple de point de terminaison que vous devez implémenter ; vérifiez sa réponse et chargez le HTML enregistré lorsque vous rouvrez l’éditeur.
Contactez le support en indiquant les versions de votre framework et de l’éditeur, la commande ou l’action qui a échoué, le premier message d’erreur et un petit exemple reproductible. Retirez les clés d’API, les mots de passe et le contenu des documents privés avant de partager.
6. Choisir l’étape suivante
AI Toolkit
Ask AI depuis la barre d’outils, ancrez le panneau AI Chat, mettez les suggestions en file d’attente dans le panneau AI Review. Branchez OpenAI / Anthropic / Azure avec une ligne d’injection de dépendances sur le serveur, ou transmettez un callback setResolver() côté client.
CRDT Yjs par nœud
La saisie simultanée dans un même paragraphe, sans conflits de fusion. Transmettez textSync: "crdt" à editor.collab.attach() avec n’importe quel provider Yjs que vous hébergez vous-même.
Référence de configuration
Chaque option de configuration, chaque emplacement de barre d’outils, chaque nom d’événement, dans une seule page consultable par recherche. Les valeurs par défaut se trouvent en tête de rte.js et sont volontairement modifiables : vous n’avez rien à recompiler.
Wrappers pour les frameworks
Des liaisons natives pour React, Vue, Angular, Svelte, Blazor Server, ASP.NET Core, ASP.NET Web Forms, Classic ASP et PHP. Le même éditeur, avec une interface idiomatique dans la stack de votre choix.
Le début de rte.js est du JavaScript lisible et modifiable
Chaque bundle rte.js comporte en tête un bloc RTE_DefaultConfig en JavaScript lisible, suivi du code sous licence de l’éditeur. Ouvrez rte.js dans n’importe quel éditeur de texte et modifiez des valeurs comme RTE_DefaultConfig.skin, la toolbar par défaut, les langues par défaut, les URL d’envoi, etc. — ces réglages sont volontairement gardés modifiables pour que vous puissiez personnaliser le comportement sur tout le site sans relancer de pipeline de build.