api
FreeUse html-to-markdown-rs api reference documentation.
The English summary is being prepared. Showing the original description.
Convert HTML to Markdown, Djot, or plain text with structured extraction. Use when writing code that calls html-to-markdown APIs in Rust, Python, TypeScript, Go, Ruby, PHP, Java, C#, Elixir, R, C, or WASM. Covers installation, conversion, configuration, metadata extraction, tables, document structure, inline images, URL fetching, and CLI usage.
The English summary is being prepared. Showing the original description.
Run score Not tested
See how to installReview the instructions the agent will receive before you install.
html-to-markdown is a high-performance HTML→Markdown converter with a Rust core and 12 native language bindings. It converts HTML to CommonMark Markdown, Djot, or plain text in a single pass, optionally extracting metadata, tables, inline images, and a structured document tree.
Use this skill when writing code that:
| Capability | CLI | SDKs |
|---|---|---|
| HTML→Markdown / Djot / plain text | html-to-markdown FILE | convert(html, options) |
| Read HTML from stdin / file / URL | cat f | …, FILE, --url URL | convert(htmlString, …) |
| ~30 config options (headings, code blocks, lists, escaping, wrapping…) | flags | ConversionOptions |
| Metadata extraction | --json (default-extracted) | result.metadata |
| Table extraction | --json --include-structure → tables[] | result.tables with structure enabled |
| Document structure tree | --json --include-structure | include_document_structure=true |
| Inline image extraction | --json --extract-inline-images | extract_images=true |
| HTML preprocessing | --preprocess [--preset …] | PreprocessingOptions |
| Extraction-only (no Markdown body) | --json --no-content | options + read fields |
# (Homebrew 6.0+ requires explicit trust for third-party taps)
brew trust xberg-io/tap
brew install xberg-io/tap/html-to-markdown
# or download a prebuilt binary from the latest GitHub release:
# https://github.com/xberg-io/html-to-markdown/releases/latest
# or build from source:
cargo install html-to-markdown-cli
pip install html-to-markdown # Python
pnpm add @xberg-io/html-to-markdown # TypeScript / Node.js
cargo add html-to-markdown-rs # Rust (features: metadata default; full = all)
gem install html-to-markdown # Ruby
composer require xberg-io/html-to-markdown # PHP
go get github.com/xberg-io/html-to-markdown/packages/go/v3 # Go
dotnet add package XbergIo.HtmlToMarkdown # C#
pnpm add @xberg-io/html-to-markdown-wasm # WASM
io.xberg:html-to-markdown{:html_to_markdown, "~> 3.8"} in mix.exsinstall.packages("htmltomarkdown", repos = "https://xberg-io.r-universe.dev").so / .dll / .dylib from GitHub releases--json | jq. Flags only for conversion (FILE is positional; omit or use - for stdin); the only subcommand is mcp.html-to-markdown mcp exposes convert_html and extract_metadata as agent tools, so an MCP client can convert an HTML string directly with no shell-out. This plugin auto-registers it; see the html-to-markdown-using-the-mcp-server skill.Both share the same ConversionResult shape, so output is interchangeable.
Rule of thumb: single HTML in → Markdown out = html-to-markdown. Many URLs / a site = crawlberg. Non-HTML documents = xberg.
# Convert a file to stdout
html-to-markdown input.html
# Convert and save
html-to-markdown input.html -o output.md
# Read from stdin
cat page.html | html-to-markdown
# Fetch and convert a URL
html-to-markdown --url https://example.com > out.md
# ConversionResult as JSON with structured tables
html-to-markdown --json --include-structure input.html
# JSON with document structure tree
html-to-markdown --json --include-structure input.html
# Extraction-only (no Markdown body)
html-to-markdown --json --no-content input.html
# Aggressive web-page cleanup
html-to-markdown input.html --preprocess --preset aggressive
use html_to_markdown_rs::convert;
let result = convert("<h1>Hello World</h1><p>A paragraph.</p>", None)?;
println!("{}", result.content.unwrap_or_default());
from html_to_markdown import convert
result = convert("<h1>Hello World</h1><p>A paragraph.</p>")
print(result.content) # # Hello World\n\nA paragraph.
print(result.metadata) # title, links, headers, …
import { convert } from "@xberg-io/html-to-markdown";
// Node's convert() returns a ConversionResult object directly.
const result = convert("<h1>Hello World</h1><p>A paragraph.</p>");
console.log(result.content);
All languages return the same structure (dict, object, or struct).
| Field | Description |
|---|---|
content | Converted text (Markdown/Djot/plain). null only in extraction-only mode. |
metadata | Title, OG, headers, links, images, structured data. |
tables | Tables with grid (structured cells) and markdown fields. |
images | Extracted inline images (requires inline-image extraction). |
document | Structured document tree when structure extraction is enabled. |
warnings | Non-fatal processing warnings (message, kind). |
All languages expose the same ~30 options. See references/configuration.md for the complete table. Common ones:
| Option | Values | Default |
|---|---|---|
heading_style | atx, underlined, atx-closed | atx |
code_block_style | backticks, indented, tildes | backticks |
output_format | markdown, djot, plain | markdown |
wrap / wrap_width | bool / 20–500 | off / 80 |
autolinks (SDK) / --no-autolinks (CLI) | bool / flag | true (on); disable in CLI with --no-autolinks |
| preprocessing | minimal / standard / aggressive | off |
use html_to_markdown_rs::{convert, ConversionOptions, HeadingStyle, OutputFormat};
let options = ConversionOptions::builder()
.heading_style(HeadingStyle::Atx)
.output_format(OutputFormat::Markdown)
.wrap(true)
.wrap_width(100)
.build();
let result = convert(html, Some(options))?;
from html_to_markdown import convert, ConversionOptions, PreprocessingOptions
html = "<h1>Title</h1><p>Body text.</p>"
result = convert(
html,
ConversionOptions(
heading_style="atx",
wrap=True,
wrap_width=100,
preprocessing=PreprocessingOptions(enabled=True, preset="aggressive"),
),
)
The library convert() extracts metadata by default; the CLI needs --json --extract-metadata (see the html-to-markdown-extracting-metadata skill). Fields include document (title, description, language, canonical_url, open_graph), headers, links (with link_type), images, and structured_data (JSON-LD/Microdata/RDFa).
With document structure extraction enabled, tables appear in result.tables, each with a pre-rendered markdown string and a structured cell grid. Markdown tables also appear inline in content. See the html-to-markdown-extracting-tables skill.
Enable structure extraction (--include-structure on the CLI, include_document_structure=true in SDKs) to get a semantic node tree under document. Node types include heading, paragraph, list, list_item, table, image, code, quote, group, metadata_block.
convert() returns a result object, not a string. Access .content for the Markdown text. This holds for Node.js too — convert() returns a ConversionResult object directly; do not JSON.parse() it.--json outputs JSON, not Markdown. Omit --json for plain Markdown.--include-structure, --extract-inline-images, and --no-content require --json.FILE is positional; the only subcommand is mcp (starts the MCP server).--preset, --keep-navigation, --keep-forms require --preprocess.No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use html-to-markdown-rs api reference documentation.
The English summary is being prepared. Showing the original description.
Use html-to-markdown-rs cli reference documentation.
The English summary is being prepared. Showing the original description.
Use when converting HTML to Markdown, Djot, or plain text. Covers output formats, heading and code-block styles, lists, escaping, wrapping, and HTML preprocessing.
The English summary is being prepared. Showing the original description.
Use when extracting metadata from HTML — title, description, language, Open Graph, JSON-LD / Microdata / RDFa, headers, links, and images. Covers the --json output shape and the --extract-metadata flag.
The English summary is being prepared. Showing the original description.
Use when extracting tabular data from HTML. Covers GFM Markdown tables, the structured tables array (grid cells plus pre-rendered markdown), and HTML line breaks in table cells.
The English summary is being prepared. Showing the original description.
Use when fetching a live URL and converting it to Markdown. Covers --url, custom user agents, preprocessing for noisy pages, and the --json ConversionResult shape.
The English summary is being prepared. Showing the original description.