npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

html2any

v0.2.0

Published

understand html with flexible transform

Readme

html2any

npm version

Compile messy HTML into compact context for AI agents.

Library

While building websites, people may need to render rich text into different formats. For example, I've got an <video> tag, but I wanna render it with my own React video component. But I also want to render the whole html easily rather than parse it manually.

html2any helps you render an HTML string. It parses HTML and gives you the ability to transform it from the source format into your target format.

API

html2any provides the following APIs:

  • AST(Object) parse(String source)

  • void transform(AST ast, function rule)

  • void html2any(html, function rule)

  • parse

Build an AST from HTML/XML source.

  • transform

Convert the AST to a final form with a custom rule.

  • html2any

Convert the html/xml to the final form directly.

Usage

npm i -S html2any
import html2any, { parse, transform } from 'html2any'

const html = escapeHTMLEntity(`<div>123</div>`)

const ast = parse(html)[0]

function rule(node, children) {
  if (typeof node === 'string') {
    return node
  } else {
    return <div>{node}</div>
  }
}

const vdom = transform(ast, rule)
// JSX vdom form of html
// { type: 'div', props: {...}, children: '...' }

Or you can just call html2any directly

const vdom = html2any(html, rule)

CLI

Convert a local file, URL, or stdin into compact Markdown:

html2any md <file|url|->

# Short alias
html2 md <file|url|->

Examples:

html2 md page.html > page.context.md
cat page.html | html2 md - --url https://example.com/page

The Markdown output keeps docs-friendly structure: title, description, headings, paragraphs, lists, tables, code blocks, and links.

The extractor is deterministic and token-size friendly. It drops scripts, styles, hidden content, and layout chrome while preserving semantically useful docs content.

How It Works

Use html2any to construct an AST from an HTML string, then convert each node recursively with the rule passed to the transform function.

For example, translate a <p> tag into a React Native component like <Text style={styles.paragraph}> with prepared styles, then decode the paragraph content to avoid HTML entity issues.