html_to_markdown
High-performance HTML to Markdown converter for Dart and Flutter, powered by the Rust html-to-markdown engine via FFI bindings. 150-280 MB/s throughput — 10-80x faster than pure Dart alternatives.
Features
- Blazing fast: Rust-powered conversion engine via FFI
- Byte-identical output: Matches the Rust core exactly for all input
- Full metadata extraction: Title, description, author, keywords, OpenGraph, JSON-LD
- Comprehensive options: 40+ conversion settings (heading style, code blocks, links, whitespace, etc.)
- Visitor pattern: Customize element-level conversion behavior
- Cross-platform: Android, iOS, macOS, Linux, Windows
Installation
dart pub add html_to_markdown
Quick Start
import 'package:html_to_markdown/html_to_markdown.dart';
void main() {
final html = '<h1>Hello World</h1><p>This is a <strong>test</strong>.</p>';
// Basic conversion
final result = convert(html);
print(result.content);
// # Hello World
//
// This is a **test**.
}
Configuration
final options = ConversionOptions()
..headingStyle = HeadingStyle.setext
..linkStyle = LinkStyle.referenced
..extractMetadata = true
..wrap = true
..wrapWidth = 80;
final result = convert(html, options: options);
Metadata Extraction
final options = ConversionOptions()..extractMetadata = true;
final result = convert(htmlWithMeta, options: options);
print(result.metadata?.title); // Page title
print(result.metadata?.description); // Meta description
print(result.metadata?.author); // Author
print(result.metadata?.keywords); // Keywords list
Custom Visitor
class ScriptStripper extends Visitor {
@override
VisitResult visitElementStart(NodeContext ctx) {
if (ctx.tagName == 'script' || ctx.tagName == 'style') {
return VisitResult.skip;
}
return VisitResult.continue_;
}
}
final result = convert(html, visitor: ScriptStripper());
Platform Support
| Platform | Arch | Status |
|---|---|---|
| macOS | arm64, x64 | ✓ |
| Linux | arm64, x64 | ✓ |
| Windows | x64 | ✓ |
| Android | arm64-v8a, armeabi-v7a, x86_64 | ✓ |
| iOS | arm64 | ✓ |
| Web | — | Not supported (use WASM binding) |
API Reference
Functions
convert(String html, {ConversionOptions? options, Visitor? visitor}) → ConversionResult
Classes
ConversionOptions— 40+ configuration fieldsConversionResult— Output with content, metadata, tables, images, warningsHtmlMetadata— Extracted page metadataVisitor— Abstract class with 38 element-level callbacksNodeContext— Context passed to visitor callbacks
Enums
HeadingStyle, LinkStyle, CodeBlockStyle, WhitespaceMode, OutputFormat,
NewlineStyle, HighlightStyle, ListIndentType, PreprocessingPreset,
VisitResult, NodeType, WarningKind
Exceptions
HtmlToMarkdownException, InvalidInputException, ConversionErrorException
Development
The native library (libhtml_to_markdown_ffi) must be built before running tests:
# Build the Rust FFI library
cargo build --release -p html-to-markdown-ffi
# Run tests
cd packages/dart
dart pub get
dart test
Related
- Rust core
- kreuzberg — Document intelligence framework
- All language bindings
Libraries
- convert
- exceptions
- html_to_markdown
- High-performance HTML to Markdown converter for Dart and Flutter.
- html_to_markdown_bindings
- models/conversion_options
- models/conversion_result
- models/enums
- native_library
- visitor
- visitor_bridge