Choosing an Angular rich text editor: the numbers first

Updated · 9 min read

The short answer

If you want MIT licensing and the largest ecosystem, use ngx-quill — accepting that each release supports exactly one Angular major. If you need CKEditor 5 or TinyMCE features, know that both engines are GPL-2.0-or-later unless you buy a commercial licence. If you want a small, self-contained editor with no GPL obligations, @ebdev/ngx-richtext covers Angular 18–22 in one 446 kB package. Read the peerDependencies before the feature lists — that is where the real cost of each option lives.

Search this query and the first page is vendor pages: TinyMCE explaining why TinyMCE is best, CKEditor explaining why CKEditor is, Froala and Syncfusion and Kendo doing the same. None of them prints the number that decides most evaluations — what installing the thing actually commits you to, in Angular versions, in disk and dependency weight, and in licence obligations.

Disclosure before anything else: we publish one of the five packages below, @ebdev/ngx-richtext. Its trade-offs are listed in the same section format as everyone else’s, and every number on this page comes from the npm registry or a package’s own licence file, quoted with the command that produced it so you can re-run it.

What was measured, and how

Everything below comes from npm view against the registry and from reading the licence file inside each published tarball. No dev builds, no vendor documentation, no memory of what a package probably requires.

npm view <package> version peerDependencies — run 24 Aug 2026
$ npm view ngx-quill version peerDependencies
version = '31.0.1'
peerDependencies = { '@angular/core': '^22.0.0', quill: '^2.0.0', rxjs: '^7.0.0' }

$ npm view @ckeditor/ckeditor5-angular version peerDependencies
version = '11.2.0'
peerDependencies = { '@angular/core': '>=19.2.19', ckeditor5: '>=47.0.0', ... }

$ npm view @tinymce/tinymce-angular version peerDependencies
version = '9.1.1'
peerDependencies = { '@angular/core': '>=16.0.0', tinymce: '^8.0.0 || ^7.0.0 || ^6.0.0 || ^5.5.0', ... }

$ npm view ngx-editor dist-tags
{ latest: '19.0.0-beta.1' }

$ npm view @ebdev/ngx-richtext version peerDependencies
version = '0.4.1'
peerDependencies = { '@angular/core': '^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0', ... }
Registry facts, 24 August 2026. Sizes are dist.unpackedSize — see the caveat below.
PackageLicenceAngular peersEngineUnpacked size
@ebdev/ngx-richtext 0.4.1Commercial; free core, no GPL18 – 22own, built in446 kB total
ngx-quill 31.0.1MIT + BSD-3 (Quill)^22 onlyquill 2.0.3280 kB + 3.0 MB
@ckeditor/ckeditor5-angular 11.2.0GPL-2.0+ or commercial≥ 19.2.19ckeditor5 48.4.0103 kB + 42.4 MB
@tinymce/tinymce-angular 9.1.1GPL-2.0+ or commercial≥ 16tinymce 8.8.2171 kB + 12.0 MB
ngx-editor 19.0.0-beta.1MIT≥ 19.2 (beta)ProseMirror (10 pkgs)547 kB + deps

The licence terms, from the licence files

Both CKEditor 5 and TinyMCE moved to a dual-licence model: GPL-2.0-or-later, or commercial terms. This is stated in the licence file inside the published npm package, not in fine print:

[email protected] license.md, from the npm tarball
Licensed under, and subject to the restrictions of:
1. The terms of GNU General Public License Version 2 or later; or
2. The Tiny Technologies, Inc Software Terms & Conditions of Use ...
[email protected] LICENSE.md, from the npm tarball
Licensed under a dual-license model, this software is available under:
* the GNU General Public License Version 2 or later (see COPYING.GPL),
* or commercial license terms from CKSource Holding sp. z o.o.

What that means in practice: to use either engine without paying, the terms of the GPL apply to the application you distribute. Whether that is acceptable is a question for your team and possibly your lawyers — internal tools and server-rendered SaaS sit in different places here — but it is not the "free editor" a feature-comparison table implies. The commercial tiers are priced per vendor and change; check their pricing pages, not this one.

ngx-quill is the clean open-source option: MIT wrapper over a BSD-3-Clause engine, no dual licence, no obligations beyond attribution. ngx-editor is MIT as well. @ebdev/ngx-richtext is commercial with a free core: the free tier has no GPL obligations because there is no GPL — premium features unlock with a paid key, verified offline.

Angular version support is where upgrades hurt

The single most expensive line in any of these package.json files is ngx-quill’s peer range: '@angular/core': '^22.0.0'. One Angular major, exactly. When Angular 23 ships, applications on ngx-quill wait for (and take) a new ngx-quill major to upgrade — the registry’s old-version dist-tag pointing at 21.0.2 shows the project maintaining a trailing line for exactly this reason. It is a deliberate, defensible policy; it is also a recurring migration you are signing up for.

TinyMCE’s wrapper is the widest: >=16.0.0 with engine peers spanning four TinyMCE majors. CKEditor’s requires >=19.2.19. ngx-editor’s latest published release is a beta (19.0.0-beta.1) requiring Angular 19.2 or newer — worth knowing before putting it in front of a form your business depends on. ngx-richtext declares five majors explicitly, 18 through 22.

The five, one at a time

ngx-quill — the ecosystem default

The most-adopted Angular wrapper, over Quill 2. MIT + BSD-3, a decade of Stack Overflow answers, and a module ecosystem (mentions, image resize, cursors) that none of the others match. The costs: the one-major peer pin above, Quill’s Delta document model — powerful, but a second data format your backend has to understand if you store anything richer than HTML — and a 3.0 MB engine in node_modules. Pick it when ecosystem depth matters more than upgrade friction.

CKEditor 5 — the most capable, and priced like it

Real-time collaboration, track changes, comments, revision history — features the others simply do not have. The 42.4 MB unpacked engine is the largest here by an order of magnitude, and the licence is GPL-2.0+ or commercial. If you need collaborative editing in Angular, this is the shortlist of one; if you do not, you are carrying its weight and licence for nothing.

TinyMCE — the widest compatibility, same licence question

The wrapper accepts Angular 16 onward and engines back to TinyMCE 5.5 — the safest choice for an older codebase that upgrades slowly. Classic WYSIWYG feature set, 12.0 MB engine, and the same GPL-or-commercial dual licence as CKEditor since TinyMCE 7. Budget accordingly or read the GPL carefully.

ngx-editor — MIT and ProseMirror, currently in beta

The only fully MIT option built on ProseMirror, which is the engine many modern editors (including Tiptap) build on. The schema-based document model is the right foundation for structured content. Two facts temper it: the latest release on the registry is a beta, and you inherit ten ProseMirror and floating-ui packages to audit. Pick it if you want ProseMirror semantics without a licence bill and can live with beta cadence.

ngx-richtext — small and self-contained; ours

One package, 446 kB unpacked, no engine dependency — the only runtime dependencies are tslib and two audited crypto libraries used for offline licence verification. Toolbar, tables, images, RTL and theming are in the free core. The trade-offs, stated plainly: it is a 0.x package from a small vendor — the API can still move between minors; there is no plugin ecosystem to reach for; and while the [(value)] binding is free, binding through formControl / ngModel is a premium feature ($9.99 a year). If you need collaboration, Deltas or a plugin marketplace, one of the packages above serves you better.

What integration looks like

For scale, the entire free-tier integration of ngx-richtext — the same pattern the live demo runs:

post-editor.component.ts — free tier, signal binding
import { Component, model } from '@angular/core';
import { RteEditorComponent } from '@ebdev/ngx-richtext';

@Component({
  selector: 'app-post-editor',
  imports: [RteEditorComponent],
  template: `
    <ngx-rte [(value)]="html" placeholder="Write the post…" minHeight="280px" />
  `,
})
export class PostEditorComponent {
  readonly html = model('<p></p>');
}

The other four wrappers are comparably small to integrate — a component import and a config object each. Integration effort does not separate these packages; the licence, the peer range and the dependency weight do.

Questions

Which Angular rich text editor is free for commercial use?
ngx-quill (MIT, over BSD-3 Quill) with no strings attached; ngx-editor (MIT), currently published as a beta. CKEditor 5 and TinyMCE are free only under GPL-2.0-or-later obligations — otherwise commercial. ngx-richtext has a free core under a commercial licence, with premium features paid.
Do the sizes in the table equal what ships to the browser?
No. They are npm unpacked sizes — the node_modules footprint. Production bundle size depends on tree-shaking and lazy loading and was not benchmarked here; treat the column as install and audit weight, not page weight.
Which editor supports the most Angular versions at once?
By declared peers on 24 August 2026: @tinymce/tinymce-angular accepts Angular 16 onward, ngx-richtext declares 18–22 explicitly, CKEditor 5’s wrapper requires 19.2.19 or newer, ngx-editor’s beta requires 19.2, and ngx-quill 31 requires exactly Angular 22.