The Angular rich text editor that ships as a standalone component.
Import RichTextEditorAngularComponent, drop <rich-text-editor> into your template, and bind typed change/ready events. Underneath: AI Toolkit, per-node CRDT collaboration, tracked changes, and clean HTML output.
Standalone-component era, no NgModule required.
[value], [config], [valueFormat] in; (change), (ready), (error) out — all typed.angular.json glob at the package’s runtime folder; assetBasePath defaults to /richtexteditor and auto-loads it.ViewChild the component for getHTMLCode, getJSON/setJSON, statistics, outline, and plugin accessors.Install and wire the assets once
One npm package ships the engine, the Angular bindings, and the plugin bundle. The editor runtime (its scripts, styles, and language files) is served as static assets — add one glob to angular.json and the component’s autoload takes care of loading them.
npm install @richscripts/richtexteditor
// angular.json - copy the editor runtime into your app's /richtexteditor path
"assets": [
"src/favicon.ico",
"src/assets",
{
"glob": "**/*",
"input": "node_modules/@richscripts/richtexteditor/richtexteditor",
"output": "/richtexteditor"
}
]The component
Standalone — import it straight into your component’s imports array. The change event carries the live editor instance and the current value in your chosen valueFormat (HTML by default, or the structured JSON document).
import { Component } from "@angular/core";
import {
RichTextEditorAngularComponent,
type RichTextEditorAngularChangeEvent
} from "@richscripts/richtexteditor/angular";
@Component({
selector: "app-composer",
standalone: true,
imports: [RichTextEditorAngularComponent],
template: `
<rich-text-editor
[value]="html"
[config]="{ height: 400 }"
(change)="onChange($event)"
(ready)="onReady()"
></rich-text-editor>
`,
})
export class ComposerComponent {
html = "<p>Draft your update...</p>";
onChange(event: RichTextEditorAngularChangeEvent) {
this.html = event.value as string; // valueFormat defaults to "html"
}
onReady() {
console.log("editor mounted");
}
}Reading and writing content imperatively
Grab the component with ViewChild for the full typed surface: HTML in/out, the structured JSON model, text statistics, document outline, accessibility audit, and accessors for AI Toolkit, comments, tracked changes, and collaboration.
import { Component, ViewChild } from "@angular/core";
import { RichTextEditorAngularComponent } from "@richscripts/richtexteditor/angular";
@Component({
selector: "app-form",
standalone: true,
imports: [RichTextEditorAngularComponent],
template: `
<rich-text-editor #editor></rich-text-editor>
<button (click)="save()">Save</button>
`,
})
export class FormComponent {
@ViewChild("editor") editor!: RichTextEditorAngularComponent;
save() {
const html = this.editor.getHTMLCode();
const json = this.editor.getJSON(); // structured document
// send html / json to your API ...
}
}Why teams pick it for Angular line-of-business apps
- Everything is included: AI Toolkit (bring your own key), per-node Yjs CRDT collaboration, tracked changes, comments, and revision history ship in the same license — no premium add-on tiers.
- Clean HTML out: publish-ready markup plus a structured JSON model, with server-side rendering helpers (
renderHTML) exported from the same Angular entry. - Perpetual license from $129: no subscription and no per-seat AI pricing — see pricing and the TinyMCE / CKEditor comparisons.