
lexical_html
HTML import and export for
lexical_core. Pure Dart.
dependencies:
lexical_html: ^1.0.0
final html = editor.read($generateHtmlFromNodes);
editor.update(() {
final selection = $getSelection();
if (selection is RangeSelection) {
selection.insertNodes($generateNodesFromHtml(pasted));
}
});
Export writes HTML, not a private dialect
<strong>, not <span class="lexical-bold">. Text that leaves the editor has
to be readable by a mail client, a CMS, or a browser that has never heard of
Lexical — that is the entire point of an HTML export.
Import never drops content
An unrecognized tag contributes its text. A paste that silently loses part of what the user copied is the one outcome worth designing against, so anything this package cannot map to a node type still arrives as words.
Tables are converted as their text rather than as a grid. Reproducing a browser's table model — colspan, rowspan, implied sections — inside a paste path is a great deal of code that fails in ways nobody can predict from a screenshot.
Two things to know before you ship it
The clipboard. Flutter's built-in Clipboard carries plain text only.
Putting HTML on the system clipboard needs a platform plugin, which this
package deliberately does not pull in: it converts whatever HTML the host
hands it and leaves the transport to the host.
Trust. Neither direction sanitizes. Import keeps a URL verbatim because validating it belongs where the link is made tappable, and export escapes every value it writes but does not filter what a document contains. An application that renders the result as live HTML must sanitize it, exactly as it must for any HTML it did not author.
Parsing is bounded — nesting depth, node count and text length — because pasted markup is untrusted input.
Licence
MIT. Portions derived from Lexical, © Meta Platforms, Inc. See the repository.
Libraries
- lexical_html
- HTML import and export for
lexical_core.