← Toda a documentação

Início rápido

Comece com um único editor em uma página e a barra de ferramentas padrão. Primeiro faça a digitação e a formatação funcionarem; adicione uploads, IA e colaboração depois. Para wrappers específicos de frameworks (React, Vue, Angular, Svelte, Blazor, ASP.NET, PHP), veja Download.

Qual configuração você precisa?

  • Um novo aplicativo de exemplo: use o starter React passo a passo.
  • Um aplicativo existente com framework: siga o guia de React, Angular ou Next.js.
  • Uma página HTML simples: escolha uma das opções de instalação abaixo e depois crie o editor.

Funcionou se você consegue digitar texto, selecioná-lo e aplicar negrito. Ler o HTML é o próximo passo; salvá-lo de forma permanente exige o backend do seu aplicativo.

Já tentou e travou? Veja os problemas de configuração abaixo.

Problemas de digitação ou de seleção no React? Siga o checklist de diagnóstico de saltos do cursor e escolha um padrão de estado do editor.

1. Obtenha o editor

Três caminhos. A CDN não exige nenhuma instalação e é a forma mais rápida de ver o editor funcionando; os outros dois são os usados em implantações de produção.

Opção A — Baixe o pacote licenciado

Acesse /download e baixe o pacote do seu framework. Descompacte-o no seu site para que o editor fique em /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.html

Opção B — npm (recomendado)

npm install @richscripts/richtexteditor

# or scaffold a complete working example app:
npm create @richscripts/richtexteditor my-app -- --react   # also: --vue, --angular, --svelte

Depois, importe os estilos e o pacote no seu 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";

Opção C — CDN, sem nada para instalar

O jsDelivr e o unpkg espelham o pacote npm publicado, então um editor funcionando são duas tags em um arquivo HTML vazio — sem download, sem etapa de build, sem conta. Cole isto em um CodePen e ele 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>

Isso fornece o core do editor e a barra de ferramentas. Adicione mais uma tag para o conjunto completo de plugins — AI Toolkit, comentários, comandos de barra, menções, tabelas de layout e o restante:

<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/plugins/all_plugins.min.js"></script>

Uma linha opcional. A área de edição solicita sua folha de estilo de conteúdo em /richtexteditor/runtime/richtexteditor_content.css na sua origem, que uma página só com CDN não tem, então você verá um 404 no painel de rede. Nada quebra — o editor traz os mesmos padrões inline e a área recebe estilo de qualquer forma —, mas você pode apontá-la para a cópia na CDN e a requisição desaparece:

var editor1 = new RichTextEditor("#div_editor1", {
  contentCssUrl: "https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/runtime/richtexteditor_content.css"
});

Fixe a versão. Todos os caminhos acima indicam @2.16.0 de propósito: uma URL com versão fixa é imutável e fica em cache por um ano, então sua página não pode mudar sem você saber. @2 resolve para a release 2.x mais recente, o que é útil durante a avaliação e imprudente em produção. Troque o host por https://unpkg.com/ e os mesmos caminhos funcionam lá.

Ou sirva a partir do nosso domínio. Os mesmos arquivos são publicados em cdn.richtexteditor.com — byte a byte o mesmo build que este site usa, em cache no edge da Cloudflare, sem terceiros entre você e nós:

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

A desvantagem é a fixação de versão, e ela funciona ao contrário. Esses caminhos não têm versão, então sempre servem a release atual e você não consegue manter uma página em uma versão anterior; os navegadores são instruídos a verificar de novo a cada quatro horas. As URLs do jsDelivr acima são imutáveis por versão, que é o que você quer para um build que precisa reproduzir daqui a meses. Use cdn.richtexteditor.com quando preferir não adicionar terceiros à sua página, e as URLs do jsDelivr com versão fixa quando precisar da versão bem definida.

Duas coisas que vale saber antes de publicar. A CDN é um terceiro servindo a sua página — prático para avaliações, protótipos e relatórios de bug, mas são os caminhos auto-hospedados acima que mantêm o editor inteiramente dentro da sua própria infraestrutura, que é o propósito de uma licença perpétua. E uma CDN muda a forma como os arquivos chegam ao navegador, não o que sua licença permite fazer com eles; veja /license.

2. Adicione o script e crie seu primeiro 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>

Pronto: um editor funcionando com a barra de ferramentas padrão. Abra-o em um navegador e comece a digitar.

3. Personalize a barra de ferramentas

Passe um objeto de configuração 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 uma barra de ferramentas personalizada com grupos explícitos:

var editor = new RichTextEditor("#div_editor1", {
    toolbar: "custom",
    toolbar_custom:
        "{bold,italic,underline}|" +
        "{insertorderedlist,insertunorderedlist}|" +
        "{insertlink,insertimage}|" +
        "{aiassist,aichat}|" +
        "{undo,redo}"
});

Veja a referência de itens da barra de ferramentas e de menus para todos os nomes de comando.

4. Leia e grave o conteúdo

// 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. Envie o conteúdo com um formulário

Se o seu editor estiver dentro de um <form>, o RichTextEditor grava automaticamente o HTML do editor em um campo oculto que espelha o id do contêiner do editor. No servidor, você o lê da requisição como qualquer outro campo de formulário. Para envios dinâmicos, chame editor.getHTMLCode() no seu handler de envio:

document.getElementById("save").addEventListener("click", function () {
    fetch("/api/save", {
        method:  "POST",
        headers: { "Content-Type": "application/json" },
        body:    JSON.stringify({ html: editor.getHTMLCode() })
    });
});

Problemas para começar?

npm não é reconhecido
Instale o Node.js com o npm, reabra o terminal e verifique node --version e npm --version. Se a instalação informar um engine não suportado, use uma versão do Node suportada pelas dependências do seu starter.
O exemplo não inicia
Execute os comandos dentro da pasta que contém o package.json, depois que o npm install terminar. O starter React usa npm run dev; o starter Angular usa npm start. Abra a URL exibida no terminal.
O editor fica em branco ou RichTextEditor is not defined
Verifique o primeiro erro no Console do navegador e, na aba Network, as requisições de script que falharam. Confirme que a URL do runtime carrega JavaScript, e não um 404 ou uma página HTML de fallback. Em HTML simples, carregue o runtime antes de criar o editor, depois que o contêiner dele existir.
A barra de ferramentas aparece sem estilo
Verifique se a folha de estilo do tema do editor carrega com sucesso. Use a folha de estilo e os scripts da mesma versão do editor.
Meu conteúdo desaparece depois de atualizar a página
Ler o HTML não o salva em um banco de dados. A URL /api/save acima é um endpoint de exemplo que você precisa implementar; verifique a resposta dele e carregue o HTML salvo ao reabrir o editor.

Entre em contato com o suporte informando as versões do seu framework e do editor, o comando ou a ação que falhou, a primeira mensagem de erro e um pequeno exemplo reproduzível. Remova chaves de API, senhas e conteúdo de documentos privados antes de compartilhar.

6. Escolha seu próximo passo

Adicione IA

AI Toolkit

Use o Ask AI na barra de ferramentas, fixe o painel AI Chat e enfileire sugestões na gaveta AI Review. Conecte à OpenAI / Anthropic / Azure com uma linha de DI no servidor, ou passe um callback setResolver() no lado do cliente.

Adicione colaboração em tempo real

CRDT Yjs por nó

Digitação simultânea no mesmo parágrafo sem conflitos de mesclagem. Passe textSync: "crdt" para editor.collab.attach() com qualquer provider Yjs que você hospede.

Personalize tudo

Referência de configuração

Todas as flags de configuração, todos os slots da barra de ferramentas e todos os nomes de eventos em uma única página pesquisável. Os padrões ficam no início do rte.js e são editáveis de propósito, para que você não precise recompilar nada.

Conecte seu backend

Wrappers para frameworks

Bindings nativos para React, Vue, Angular, Svelte, Blazor Server, ASP.NET Core, ASP.NET Web Forms, Classic ASP e PHP. O mesmo editor, com uma interface idiomática na stack que você escolher.

Personalize os padrões sem recompilar

O início do rte.js é JavaScript simples e editável

Todo pacote rte.js tem um bloco RTE_DefaultConfig no início, em JavaScript simples, seguido do código licenciado do editor. Abra o rte.js em qualquer editor de texto e altere valores como RTE_DefaultConfig.skin, a toolbar padrão, os padrões de idioma, as URLs de upload etc. — essas configurações são mantidas editáveis de propósito, para que você possa personalizar o comportamento em todo o site sem executar nenhum pipeline de build de novo.