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 🙏

© 2025 – Pkg Stats / Ryan Hefner

hackmd-to-html-cli

v2.0.0

Published

A node.js CLI tool for converting HackMD markdown to HTML.

Readme

hackmd-to-html-cli

NPM version

Not only is this a CLI tool, but it is also an importable package for converting standard Markdown and even HackMD-supported Markdown into HTML.

Install

# CLI
npm install -g hackmd-to-html-cli

# Package
npm install hackmd-to-html-cli

CLI

$ hmd2html --help
hmd2html --help
Usage: index [options]

Options:
  -v, --version                   output the current version
  -i, --input <files_or_urls...>  the path/url of input markdown files
  -d, --dest <dir>                the path of output directory (filename is generated automatically) (default: ./output)
  -o, --output <files...>         the path of output file (ignored if the flag -d is set) (default: "")
  -l, --layout <html_file>        specify the layout file (default: "")
  -b, --hardBreak                 use hard break instead of soft break
  -k, --dark                      use the dark mode layout (activate only if the -l option is not set)
  -h, --help                      display help for command

Convert

# convert files
$ hmd2html -i file1.md file2.md file3.md

# allow wildcard input
$ hmd2html -i dir/*.md

# allow url input
$ hmd2html -i https://github.com/ksw2000/hackmd-to-html-cli/blob/main/example/index.md

# set output folder
$ hmd2html -i file1.md -d ./my_output

# set the filename of output
$ hmd2html -i file1.md -o file1.html
$ hmd2html -i file1.md file2.md -o file1.html file2.html

# use default darkmode layout
$ hmd2html -i file1.md -k

# use custom layout
$ hmd2html -i hello.md -l ./myLayout.html

Layouts

We provide the two default layouts. Please see layouts here: https://github.com/ksw2000/hackmd-to-html-cli/blob/main/layouts/

  • {{main}} renders main content of markdown.
  • {{lang}} renders lang property if there are yaml metadata about lang in markdown file. e.g. lang="zh-TW"
  • {{dir}} renders dir property if there are yaml metadata about dir in markdown file. e.g. dir="ltr"
  • {{meta}} renders meta tag if there are yaml metadata about title, description, robots orimage. e.g. <meta name="robots" content="noindex">

Example:

<!DOCTYPE html>
<html {{lang}} {{dir}}>
<head>
    {{metas}}
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <body>
      {{main}}
    </body>
</html>

There are some features rendered by other dependencies. Thus, in our default layout, we include those dependencies.

Example

CommonJS

const { Converter } = require('hackmd-to-html-cli')

const converter = new Converter();
const res = converter.render("# hello");

console.log(res.main);

ES Module

import { Converter } from "hackmd-to-html-cli"

const converter = new Converter();
const res = converter.render("# hello");

console.log(res.main);

Web

const converter = new window.hmd2html.Converter();
const res = converter.render("# hello");
console.log(res.main);

Support

hmd2html: our tool (the latest)

HackMD Default Converter: The default markdown to html converter provided by HackMD, i.e., download HTML file on HackMD.

HackMD fully supports syntax: features

| Features | hmd2html | HackMDDefault Converter | |---------------------------------|:--:|:--:| | ToC | ✅ | ✅ | | Emoji | ✅ | ✅ | | ToDo list | ✅ | ✅ | | Code block | ✅ | ✅ | | - Show line number or not | ✅ | ❌ | | - Specify the start line number | ✅ | ❌ | | - Continue line number | ✅ | ❌ | | Blockquote | ✅ | ✅ | | - specify your name | ✅ | ✅ | | - specify time | ✅ | ✅ | | - color | ✅ | ✅ | | Render CSV as table | ✅ | ✅ | | MathJax | ✅ | ✅ | | Sequence diagrams | ✅ | ❌ | | Flow charts | ✅ | ❌ | | Graphviz | ✅ | ❌ | | Mermaid | ✅ | ❌ | | Abc | ✅ | ❌ | | PlantUML | ✅ | ✅ | | Vega-Lite | ✅ | ❌ | | Fretboard | ✅ | ❌ | | Alert Area | ✅ | ✅ | | Detail | ✅ | ✅ | | Spoiler container | ✅ | ✅ | | Headers h1-h6 | ✅ | ✅ | | Horizontal line --- *** | ✅ | ✅ | | Bold **b** __b__ | ✅ | ✅ | | Italic *i* _i_ | ✅ | ✅ | | Deleted text ~~del~~ | ✅ | ✅ | | Superscript ^sup^ | ✅ | ✅ | | Subscript ~sub~ | ✅ | ✅ | | Inserted text ++ins++ | ✅ | ✅ | | Marked text ==mark== | ✅ | ✅ | | Ruby case | ✅ | ✅ | | Typographicreplacements | ✅ | ✅ | | Blockquotes | ✅ | ✅ | | List | ✅ | ✅ | | Tables | ✅ | ✅ | | Links | ✅ | ✅ | | Link with title | ✅ | ✅ | | Autoconverted link | ✅ | ✅ | | Image | ✅ | ✅ | | - normal | ✅ | ✅ | | - with title | ✅ | ✅ | | - given size | ✅ | ✅ | | Footnotes | ✅ | ✅ | | Definition list | ✅ | ✅ | | Abbreviations | ✅ | ✅ |

Support Externals

| Features | hmd2html | HackMDDefault Converter| |-------------|:---------:|:---------:| | Youtube | ✅ | ✅ | | Vimeo | ✅ | ❌ | | Gist | ✅ | ✅ | | SlideShare | ❌ | ❌ | | Speakerdeck | ✅ | ✅ | | PDF | ✅ | ✅ | | Figma | ✅ | ✅ |

Support YAML Metadata

| Features | hmd2html | Implementation | |---------------|:---------:|:-------:| | title | ✅ | <title></title><meta name="twitter:title"><meta property="og:title">| | description | ✅ | <meta name="description"><meta name="twitter:description"><meta property="og:description"> | | robots | ✅ | <meta name="robots"> | | lang | ✅ | <html lang=""> | | dir | ✅ | <html dir=""> | | image | ✅ | <meta property="og:image"><meta name="twitter:image:src"> | | others | ✅ | Hide the metadata by html comment |

HackMD sets the lang tag and dir tag at the beginning of <body>. hmd2html sets the the lang tag and dir tag at <html> when using default layout.

Development

  1. npm run lint to check the format of source code.
  2. npm run example runs example for this package, which generates result from ./example and places them in ./output.
  3. npm test runs unit test files whose filenames end with .spec.ts

Contributing

Contributions to hackmd-to-html-cli are welcome and highly appreciated. Please run lint npm run lint and test npm run test before pull requesting.