Skip to content

Commit d3aec98

Browse files
docs: add comparison with other libraries
1 parent 9dc732a commit d3aec98

4 files changed

Lines changed: 67 additions & 6 deletions

File tree

docs/docs/misc/comparison-with-other-libraries.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,65 @@ sidebar_position: 2
33
---
44

55
# Comparison with other libraries
6+
7+
React Native doesn't ship a built-in rich text component, so a number of
8+
community libraries exist. They fall into two broad categories: **native
9+
implementations** that render directly through the platform's text system, and
10+
**WebView wrappers** that embed a browser-based editor. This page compares
11+
React Native Enriched HTML with the most popular alternatives in each
12+
category.
13+
14+
## Native solutions
15+
16+
### React Native Aztec
17+
18+
[React Native Aztec](https://github.com/wordpress-mobile/react-native-aztec)
19+
was WordPress's native rich text component for Gutenberg Mobile. The repository
20+
was **archived in March 2025** and the code folded into the
21+
[Gutenberg monorepo](https://github.com/WordPress/gutenberg), where activity
22+
is focused on the WordPress editor itself rather than the standalone React
23+
Native wrapper. Aztec **does not support the New Architecture (Fabric)** and is
24+
dual-licensed under **GPL-2.0 / MPL-2.0** - both are copyleft licenses that
25+
may require you to distribute your own source code under the same terms,
26+
which can be a deal-breaker for proprietary apps.
27+
28+
### React Native Enriched Markdown
29+
30+
[React Native Enriched Markdown](https://github.com/software-mansion/react-native-enriched-markdown)
31+
is another fully native library from Software Mansion (MIT-licensed, New
32+
Architecture required). It focuses on **Markdown** rather than HTML:
33+
34+
- **Text component** - renders a wide range of Markdown features natively,
35+
including GFM tables, task lists, LaTeX math and spoiler text.
36+
- **Text input** - provides a rich editing experience with Markdown output.
37+
38+
The key difference is the **content format**. Enriched Markdown targets apps
39+
that work with Markdown end-to-end, while Enriched HTML is built for apps that
40+
need an **HTML-based editor with advanced, customisable formatting
41+
capabilities** and a matching display component. The two libraries can coexist in one app if you need both formats.
42+
43+
## WebView-based solutions
44+
45+
### 10tap Editor
46+
47+
[10tap Editor](https://github.com/10play/10tap-editor) wraps
48+
[TipTap](https://tiptap.dev) (ProseMirror) inside a React Native WebView.
49+
It offers a keyboard-aware toolbar and a familiar ProseMirror plugin system.
50+
51+
### React Native Pell Rich Editor
52+
53+
[React Native Pell Rich Editor](https://github.com/wxik/react-native-rich-editor)
54+
is a lightweight WebView-based editor that uses `contentEditable` and
55+
`document.execCommand`.
56+
57+
### Why native matters
58+
59+
All WebView-based editors share a set of inherent trade-offs compared to a
60+
fully native approach:
61+
62+
| | Native (Enriched HTML) | WebView editors |
63+
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
64+
| **Input latency** | Text goes through the platform's native text system - every keystroke, selection change and style toggle is processed without leaving the native layer. | Every interaction crosses the React Native ↔ WebView bridge, adding measurable latency, especially on lower-end devices. |
65+
| **Platform integration** | Full access to native APIs: system context menus, autocorrect / predictive text, VoiceOver / TalkBack, drag-and-drop, hardware keyboards. | Limited by what the WebView exposes; features like custom context-menu items or native accessibility trees require extra workarounds or are simply unavailable. |
66+
| **Memory & startup** | No WebView process to spin up - the component is just another native view in the hierarchy. | Each editor instance spawns a WebView, increasing memory use and adding a visible loading delay on first render. |
67+
| **Debugging** | Standard React Native / native debugging tools. | Requires separate WebView / browser dev-tools; bridge-related bugs can be hard to trace. |

docs/docs/misc/compatibility.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ installing.
2222

2323
The table assumes you're using the latest patch of each library minor version.
2424

25-
<EnrichedHtmlCompatibility />
25+
<EnrichedCompatibility />
2626

2727
## Platform differences
2828

@@ -69,7 +69,7 @@ selection color follow the system tint.
6969

7070
On iOS and Android, the library does not sanitize HTML. It makes no guarantees that the markup it accepts or produces is safe. You are fully responsible for sanitizing any HTML you persist, render elsewhere, or accept from untrusted sources.
7171

72-
Sanitization *is* enforced on the web, as injecting unsafe HTML directly into the DOM poses severe security risks (like XSS).
72+
Sanitization _is_ enforced on the web, as injecting unsafe HTML directly into the DOM poses severe security risks (like XSS).
7373

7474
### React Native layout ref methods
7575

docs/src/components/Compatibility/EnrichedHtmlCompatibility.tsx renamed to docs/src/components/Compatibility/EnrichedCompatibility.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ const REACT_NATIVE_VERSIONS = [
88
'0.84',
99
'0.85',
1010
'0.86',
11-
'0.87',
1211
];
1312

1413
const LIBRARY_VERSIONS = [
@@ -32,7 +31,7 @@ function isSupported(
3231
);
3332
}
3433

35-
export default function EnrichedHtmlCompatibility() {
34+
export default function EnrichedCompatibility() {
3635
return (
3736
<div className="compatibility">
3837
<table>

docs/src/theme/MDXComponents.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Indent from '@site/src/components/Indent';
99
import Row from '@site/src/components/Row';
1010
import Grid from '@site/src/components/Grid';
1111
import { Yes, No, Version, Spacer } from '@site/src/components/Compatibility';
12-
import EnrichedHtmlCompatibility from '@site/src/components/Compatibility/EnrichedHtmlCompatibility';
12+
import EnrichedCompatibility from '@site/src/components/Compatibility/EnrichedCompatibility';
1313
import { Badges } from '@swmansion/t-rex-ui';
1414

1515
export default {
@@ -27,6 +27,6 @@ export default {
2727
No,
2828
Version,
2929
Spacer,
30-
EnrichedHtmlCompatibility,
30+
EnrichedCompatibility,
3131
Badges,
3232
};

0 commit comments

Comments
 (0)