Skip to content
ironmark

HTML to Markdown

Needs the html-parser feature (on by default).

use ironmark::{html_to_markdown, HtmlParseOptions};
 
fn main() {
    let md = html_to_markdown(
        "<h1>Hello</h1><p><strong>Bold</strong> text</p>",
        &HtmlParseOptions::default(),
    );
    // "# Hello\n\n**Bold** text\n"
}

AST

For AST access, use parse_html_to_ast():

use ironmark::{parse_html_to_ast, HtmlParseOptions, UnknownInlineHandling};
 
fn main() {
    // Default: strip unknown tags, keep text content
    let ast = parse_html_to_ast("<p>H<sub>2</sub>O</p>", &HtmlParseOptions::default());
 
    // Preserve unknown tags as raw HTML
    let ast = parse_html_to_ast(
        "<p>H<sub>2</sub>O</p>",
        &HtmlParseOptions {
            unknown_inline_handling: UnknownInlineHandling::PreserveAsHtml,
            ..Default::default()
        },
    );
}

HtmlParseOptions

FieldTypeDefaultDescription
max_nesting_depthusize128Limit nesting depth (DoS prevention)
unknown_inline_handlingUnknownInlineHandlingStripTagsHow to handle unknown HTML tags
max_input_sizeusize0Truncate input beyond this byte count

UnknownInlineHandling variants:

  • StripTags: remove unknown tags, keep their text (default).
  • PreserveAsHtml: keep unknown tags as raw HTML in the output.