Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
github avatar

Markdown To Html

  • 9.7k installs
  • 37.1k repo stars
  • Updated July 28, 2026
  • github/awesome-copilot

markdown-to-html is an agent skill that Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html a.

About

Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`, `gohugoio/hugo`, or similar web templating systems that utilize markdown documents, converting them to html. Use when asked to "convert markdown to html", "transform md to html", " --- name: markdown-to-html description: 'Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`, `gohugoio/hugo`, or similar web templating systems that utilize markdown documents, converting them to html. Use when asked to "convert markdown to html", "transform md to html", "render markdown", "generate html from markdown", or when working with .md files and/or web a templating system that converts markdown to HTML output.

  • Markdown to HTML Conversion
  • User asks to "convert markdown to html" or "transform md files"
  • User wants to "render markdown" as HTML output
  • User needs to generate HTML documentation from .md files
  • User is building static sites from Markdown content

Markdown To Html by the numbers

  • 9,674 all-time installs (skills.sh)
  • +49 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #51 of 2,209 Security skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

markdown-to-html capabilities & compatibility

Capabilities
markdown to html conversion · user asks to "convert markdown to html" or "tran · user wants to "render markdown" as html output · user needs to generate html documentation from . · user is building static sites from markdown cont
Use cases
documentation
From the docs

What markdown-to-html says it does

The conversion script or tool should handle single files, batch conversions, and advanced configurations.
SKILL.md
`ol` list item 1 | Table Item | Description | | One | One is the spelling of the number `1`.
SKILL.md
| | Two | Two is the spelling of the number `2`.
SKILL.md
npx skills add https://github.com/github/awesome-copilot --skill markdown-to-html

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs9.7k
repo stars37.1k
Security audit3 / 3 scanners passed
Last updatedJuly 28, 2026
Repositorygithub/awesome-copilot

What problem does markdown-to-html solve for developers using this skill?

Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems li

Who is it for?

Developers who need markdown-to-html patterns described in the cached skill documentation.

Skip if: Skip when docs are empty or the task is outside the skill's documented scope.

When should I use this skill?

Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems li

What you get

Actionable workflows and conventions from SKILL.md for markdown-to-html.

  • Semantic HTML output
  • Rendered documentation markup

Files

SKILL.mdMarkdownGitHub ↗

Markdown to HTML Conversion

Expert skill for converting Markdown documents to HTML using the marked.js library, or writing data conversion scripts; in this case scripts similar to markedJS/marked repository. For custom scripts knowledge is not confined to marked.js, but data conversion methods are utilized from tools like pandoc and gomarkdown/markdown for data conversion; jekyll/jekyll and gohugoio/hugo for templating systems.

The conversion script or tool should handle single files, batch conversions, and advanced configurations.

When to Use This Skill

  • User asks to "convert markdown to html" or "transform md files"
  • User wants to "render markdown" as HTML output
  • User needs to generate HTML documentation from .md files
  • User is building static sites from Markdown content
  • User is building template system that converts markdown to html
  • User is working on a tool, widget, or custom template for an existing templating system
  • User wants to preview Markdown as rendered HTML

Converting Markdown to HTML

Essential Basic Conversions

For more see basic-markdown-to-html.md

Level 1

Level 2

One sentence with a link, and a HTML snippet like <p>paragraph tag</p>.

  • ul list item 1
  • ul list item 2

1. ol list item 1 2. ol list item 1

| Table Item | Description | | One | One is the spelling of the number 1. | | Two | Two is the spelling of the number 2. |

    var one = 1;
    var two = 2;

    function simpleMath(x, y) {
     return x + y;
    }
    console.log(simpleMath(one, two));

<h1>Level 1</h1> <h2>Level 2</h2>

<p>One sentence with a <a href="https://example.com">link</a>, and a HTML snippet like <code>&lt;p&gt;paragraph tag&lt;/p&gt;</code>.</p>

<ul> <li>ul list item 1</li> <li>ul list item 2</li> </ul>

<ol> <li>ol list item 1</li> <li>ol list item 2</li> </ol>

<table> <thead> <tr> <th>Table Item</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>One</td> <td>One is the spelling of the number 1.</td> </tr> <tr> <td>Two</td> <td>Two is the spelling of the number 2.</td> </tr> </tbody> </table>

<pre> <code>var one = 1; var two = 2;

function simpleMath(x, y) { return x + y; } console.log(simpleMath(one, two));</code> </pre>

Code Block Conversions

For more see code-blocks-to-html.md

your code here

<pre><code class="language-md"> your code here </code></pre>

console.log("Hello world");

<pre><code class="language-js"> console.log("Hello world"); </code></pre>

visible backticks

<pre><code>


      visible backticks

</code></pre>

Collapsed Section Conversions

For more see collapsed-sections-to-html.md

<details> <summary>More info</summary>

Header inside

  • Lists
  • Formatting
  • Code blocks
        console.log("Hello");

</details>

<details> <summary>More info</summary>

<h3>Header inside</h3>

<ul> <li>Lists</li> <li><strong>Formatting</strong></li> <li>Code blocks</li> </ul>

<pre> <code class="language-js">console.log("Hello");</code> </pre>

</details>

Mathematical Expression Conversions

For more see writing-mathematical-expressions-to-html.md

This sentence uses $ delimiters to show math inline: $\sqrt{3x-1}+(1+x)^2$

<p>This sentence uses <code>$</code> delimiters to show math inline: <math-renderer><math xmlns="http://www.w3.org/1998/Math/MathML"> <msqrt><mn>3</mn><mi>x</mi><mo>−</mo><mn>1</mn></msqrt> <mo>+</mo><mo>(</mo><mn>1</mn><mo>+</mo><mi>x</mi> <msup><mo>)</mo><mn>2</mn></msup> </math> </math-renderer> </p>

The Cauchy-Schwarz Inequality\ $$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$

<p><strong>The Cauchy-Schwarz Inequality</strong><br> <math-renderer> <math xmlns="http://www.w3.org/1998/Math/MathML"> <msup> <mrow><mo>(</mo> <munderover><mo data-mjx-texclass="OP">∑</mo> <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi> </munderover> <msub><mi>a</mi><mi>k</mi></msub> <msub><mi>b</mi><mi>k</mi></msub> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>≤</mo> <mrow><mo>(</mo> <munderover><mo>∑</mo> <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow> <mi>n</mi> </munderover> <msubsup><mi>a</mi><mi>k</mi><mn>2</mn></msubsup> <mo>)</mo> </mrow> <mrow><mo>(</mo> <munderover><mo>∑</mo> <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow> <mi>n</mi> </munderover> <msubsup><mi>b</mi><mi>k</mi><mn>2</mn></msubsup> <mo>)</mo> </mrow> </math> </math-renderer></p>

Table Conversions

For more see tables-to-html.md

First HeaderSecond Header
Content CellContent Cell
Content CellContent Cell

<table> <thead><tr><th>First Header</th><th>Second Header</th></tr></thead> <tbody> <tr><td>Content Cell</td><td>Content Cell</td></tr> <tr><td>Content Cell</td><td>Content Cell</td></tr> </tbody> </table>

Left-alignedCenter-alignedRight-aligned
git statusgit statusgit status
git diffgit diffgit diff

<table> <thead> <tr> <th align="left">Left-aligned</th> <th align="center">Center-aligned</th> <th align="right">Right-aligned</th> </tr> </thead> <tbody> <tr> <td align="left">git status</td> <td align="center">git status</td> <td align="right">git status</td> </tr> <tr> <td align="left">git diff</td> <td align="center">git diff</td> <td align="right">git diff</td> </tr> </tbody> </table>

Working with `markedJS/marked`

Prerequisites

  • Node.js installed (for CLI or programmatic usage)
  • Install marked globally for CLI: npm install -g marked
  • Or install locally: npm install marked

Quick Conversion Methods

See marked.md Quick Conversion Methods

Step-by-Step Workflows

See marked.md Step-by-Step Workflows

CLI Configuration

Using Config Files

Create ~/.marked.json for persistent options:

{
  "gfm": true,
  "breaks": true
}

Or use a custom config:

marked -i input.md -o output.html -c config.json

CLI Options Reference

OptionDescription
-i, --input <file>Input Markdown file
-o, --output <file>Output HTML file
-s, --string <string>Parse string instead of file
-c, --config <file>Use custom config file
--gfmEnable GitHub Flavored Markdown
--breaksConvert newlines to <br>
--helpShow all options

Security Warning

⚠️ Marked does NOT sanitize output HTML. For untrusted input, use a sanitizer:

import { marked } from 'marked';
import DOMPurify from 'dompurify';

const unsafeHtml = marked.parse(untrustedMarkdown);
const safeHtml = DOMPurify.sanitize(unsafeHtml);

Recommended sanitizers:

Supported Markdown Flavors

FlavorSupport
Original Markdown100%
CommonMark 0.3198%
GitHub Flavored Markdown97%

Troubleshooting

IssueSolution
Special characters at file startStrip zero-width chars: content.replace(/^[\u200B\u200C\u200D\uFEFF]/,"")
Code blocks not highlightingAdd a syntax highlighter like highlight.js
Tables not renderingEnsure gfm: true option is set
Line breaks ignoredSet breaks: true in options
XSS vulnerability concernsUse DOMPurify to sanitize output

Working with `pandoc`

Prerequisites

  • Pandoc installed (download from <https://pandoc.org/installing.html>)
  • For PDF output: LaTeX installation (MacTeX on macOS, MiKTeX on Windows, texlive on Linux)
  • Terminal/command prompt access

Quick Conversion Methods

Method 1: CLI Basic Conversion
# Convert markdown to HTML
pandoc input.md -o output.html

# Convert with standalone document (includes header/footer)
pandoc input.md -s -o output.html

# Explicit format specification
pandoc input.md -f markdown -t html -s -o output.html
Method 2: Filter Mode (Interactive)
# Start pandoc as a filter
pandoc

# Type markdown, then Ctrl-D (Linux/macOS) or Ctrl-Z+Enter (Windows)
Hello *pandoc*!
# Output: <p>Hello <em>pandoc</em>!</p>
Method 3: Format Conversion
# HTML to Markdown
pandoc -f html -t markdown input.html -o output.md

# Markdown to LaTeX
pandoc input.md -s -o output.tex

# Markdown to PDF (requires LaTeX)
pandoc input.md -s -o output.pdf

# Markdown to Word
pandoc input.md -s -o output.docx

CLI Configuration

OptionDescription
-f, --from <format>Input format (markdown, html, latex, etc.)
-t, --to <format>Output format (html, latex, pdf, docx, etc.)
-s, --standaloneProduce standalone document with header/footer
-o, --output <file>Output file (inferred from extension)
--mathmlConvert TeX math to MathML
--metadata title="Title"Set document metadata
--tocInclude table of contents
--template <file>Use custom template
--helpShow all options

Security Warning

⚠️ Pandoc processes input faithfully. When converting untrusted markdown:

  • Use --sandbox mode to disable external file access
  • Validate input before processing
  • Sanitize HTML output if displayed in browsers
# Run in sandbox mode for untrusted input
pandoc --sandbox input.md -o output.html

Supported Markdown Flavors

FlavorSupport
Pandoc Markdown100% (native)
CommonMarkFull (use -f commonmark)
GitHub Flavored MarkdownFull (use -f gfm)
MultiMarkdownPartial

Troubleshooting

IssueSolution
PDF generation failsInstall LaTeX (MacTeX, MiKTeX, or texlive)
Encoding issues on WindowsRun chcp 65001 before using pandoc
Missing standalone headersAdd -s flag for complete documents
Math not renderingUse --mathml or --mathjax option
Tables not renderingEnsure proper table syntax with pipes and dashes

Working with `gomarkdown/markdown`

Prerequisites

  • Go 1.18 or higher installed
  • Install the library: go get github.com/gomarkdown/markdown
  • For CLI tool: go install github.com/gomarkdown/mdtohtml@latest

Quick Conversion Methods

Method 1: Simple Conversion (Go)
package main

import (
    "fmt"
    "github.com/gomarkdown/markdown"
)

func main() {
    md := []byte("# Hello World\n\nThis is **bold** text.")
    html := markdown.ToHTML(md, nil, nil)
    fmt.Println(string(html))
}
Method 2: CLI Tool
# Install mdtohtml
go install github.com/gomarkdown/mdtohtml@latest

# Convert file
mdtohtml input.md output.html

# Convert file (output to stdout)
mdtohtml input.md
Method 3: Custom Parser and Renderer
package main

import (
    "github.com/gomarkdown/markdown"
    "github.com/gomarkdown/markdown/html"
    "github.com/gomarkdown/markdown/parser"
)

func mdToHTML(md []byte) []byte {
    // Create parser with extensions
    extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
    p := parser.NewWithExtensions(extensions)
    doc := p.Parse(md)

    // Create HTML renderer with extensions
    htmlFlags := html.CommonFlags | html.HrefTargetBlank
    opts := html.RendererOptions{Flags: htmlFlags}
    renderer := html.NewRenderer(opts)

    return markdown.Render(doc, renderer)
}

CLI Configuration

The mdtohtml CLI tool has minimal options:

mdtohtml input-file [output-file]

For advanced configuration, use the Go library programmatically with parser and renderer options:

Parser ExtensionDescription
parser.CommonExtensionsTables, fenced code, autolinks, strikethrough, etc.
parser.AutoHeadingIDsGenerate IDs for headings
parser.NoEmptyLineBeforeBlockNo blank line needed before blocks
parser.MathJaxMathJax support for LaTeX math
HTML FlagDescription
html.CommonFlagsCommon HTML output flags
html.HrefTargetBlankAdd target="_blank" to links
html.CompletePageGenerate complete HTML page
html.UseXHTMLGenerate XHTML output

Security Warning

⚠️ gomarkdown does NOT sanitize output HTML. For untrusted input, use Bluemonday:

import (
    "github.com/microcosm-cc/bluemonday"
    "github.com/gomarkdown/markdown"
)

maybeUnsafeHTML := markdown.ToHTML(md, nil, nil)
html := bluemonday.UGCPolicy().SanitizeBytes(maybeUnsafeHTML)

Recommended sanitizer: Bluemonday

Supported Markdown Flavors

FlavorSupport
Original Markdown100%
CommonMarkHigh (with extensions)
GitHub Flavored MarkdownHigh (tables, fenced code, strikethrough)
MathJax/LaTeX MathSupported via extension
MmarkSupported

Troubleshooting

IssueSolution
Windows/Mac newlines not parsedUse parser.NormalizeNewlines(input)
Tables not renderingEnable parser.Tables extension
Code blocks without highlightingIntegrate with syntax highlighter like Chroma
Math not renderingEnable parser.MathJax extension
XSS vulnerabilitiesUse Bluemonday to sanitize output

Working with `jekyll`

Prerequisites

  • Ruby version 2.7.0 or higher
  • RubyGems
  • GCC and Make (for native extensions)
  • Install Jekyll and Bundler: gem install jekyll bundler

Quick Conversion Methods

Method 1: Create New Site
# Create a new Jekyll site
jekyll new myblog

# Change to site directory
cd myblog

# Build and serve locally
bundle exec jekyll serve

# Access at http://localhost:4000
Method 2: Build Static Site
# Build site to _site directory
bundle exec jekyll build

# Build with production environment
JEKYLL_ENV=production bundle exec jekyll build
Method 3: Live Reload Development
# Serve with live reload
bundle exec jekyll serve --livereload

# Serve with drafts
bundle exec jekyll serve --drafts

CLI Configuration

CommandDescription
jekyll new <path>Create new Jekyll site
jekyll buildBuild site to _site directory
jekyll serveBuild and serve locally
jekyll cleanRemove generated files
jekyll doctorCheck for configuration issues
Serve OptionsDescription
--livereloadReload browser on changes
--draftsInclude draft posts
--port <port>Set server port (default: 4000)
--host <host>Set server host (default: localhost)
--baseurl <url>Set base URL

Security Warning

⚠️ Jekyll security considerations:

  • Avoid using safe: false in production
  • Use exclude in _config.yml to prevent sensitive files from being published
  • Sanitize user-generated content if accepting external input
  • Keep Jekyll and plugins updated
# _config.yml security settings
exclude:
  - Gemfile
  - Gemfile.lock
  - node_modules
  - vendor

Supported Markdown Flavors

FlavorSupport
Kramdown (default)100%
CommonMarkVia plugin (jekyll-commonmark)
GitHub Flavored MarkdownVia plugin (jekyll-commonmark-ghpages)
RedCarpetVia plugin (deprecated)

Configure markdown processor in _config.yml:

markdown: kramdown
kramdown:
  input: GFM
  syntax_highlighter: rouge

Troubleshooting

IssueSolution
Ruby 3.0+ fails to serveRun bundle add webrick
Gem dependency errorsRun bundle install
Slow buildsUse --incremental flag
Liquid syntax errorsCheck for unescaped { in content
Plugin not loadingAdd to _config.yml plugins list

Working with `hugo`

Prerequisites

  • Hugo installed (download from <https://gohugo.io/installation/>)
  • Git (recommended for themes and modules)
  • Go (optional, for Hugo Modules)

Quick Conversion Methods

Method 1: Create New Site
# Create a new Hugo site
hugo new site mysite

# Change to site directory
cd mysite

# Add a theme
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
echo "theme = 'ananke'" >> hugo.toml

# Create content
hugo new content posts/my-first-post.md

# Start development server
hugo server -D
Method 2: Build Static Site
# Build site to public directory
hugo

# Build with minification
hugo --minify

# Build for specific environment
hugo --environment production
Method 3: Development Server
# Start server with drafts
hugo server -D

# Start with live reload and bind to all interfaces
hugo server --bind 0.0.0.0 --baseURL http://localhost:1313/

# Start with specific port
hugo server --port 8080

CLI Configuration

CommandDescription
hugo new site <name>Create new Hugo site
hugo new content <path>Create new content file
hugoBuild site to public directory
hugo serverStart development server
hugo mod initInitialize Hugo Modules
Build OptionsDescription
-D, --buildDraftsInclude draft content
-E, --buildExpiredInclude expired content
-F, --buildFutureInclude future-dated content
--minifyMinify output
--gcRun garbage collection after build
-d, --destination <path>Output directory
Server OptionsDescription
--bind <ip>Interface to bind to
-p, --port <port>Port number (default: 1313)
--liveReloadPort <port>Live reload port
--disableLiveReloadDisable live reload
--navigateToChangedNavigate to changed content

Security Warning

⚠️ Hugo security considerations:

  • Configure security policy in hugo.toml for external commands
  • Use --enableGitInfo carefully with public repositories
  • Validate shortcode parameters for user-generated content
# hugo.toml security settings
[security]
  enableInlineShortcodes = false
  [security.exec]
    allow = ['^go$', '^npx$', '^postcss$']
  [security.funcs]
    getenv = ['^HUGO_', '^CI$']
  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

Supported Markdown Flavors

FlavorSupport
Goldmark (default)100% (CommonMark compliant)
GitHub Flavored MarkdownFull (tables, strikethrough, autolinks)
CommonMark100%
Blackfriday (legacy)Deprecated, not recommended

Configure markdown in hugo.toml:

[markup]
  [markup.goldmark]
    [markup.goldmark.extensions]
      definitionList = true
      footnote = true
      linkify = true
      strikethrough = true
      table = true
      taskList = true
    [markup.goldmark.renderer]
      unsafe = false  # Set true to allow raw HTML

Troubleshooting

IssueSolution
"Page not found" on pathsCheck baseURL in config
Theme not loadingVerify theme in themes/ or Hugo Modules
Slow buildsUse --templateMetrics to identify bottlenecks
Raw HTML not renderingSet unsafe = true in goldmark config
Images not loadingCheck static/ folder structure
Module errorsRun hugo mod tidy

References

Writing and Styling Markdown

  • basic-markdown.md
  • code-blocks.md
  • collapsed-sections.md
  • tables.md
  • writing-mathematical-expressions.md
  • Markdown Guide: <https://www.markdownguide.org/basic-syntax/>
  • Styling Markdown: <https://github.com/sindresorhus/github-markdown-css>

`markedJS/marked`

  • Official documentation: <https://marked.js.org/>
  • Advanced options: <https://marked.js.org/using_advanced>
  • Extensibility: <https://marked.js.org/using_pro>
  • GitHub repository: <https://github.com/markedjs/marked>

`pandoc`

  • Getting started: <https://pandoc.org/getting-started.html>
  • Official documentation: <https://pandoc.org/MANUAL.html>
  • Extensibility: <https://pandoc.org/extras.html>
  • GitHub repository: <https://github.com/jgm/pandoc>

`gomarkdown/markdown`

  • Official documentation: <https://pkg.go.dev/github.com/gomarkdown/markdown>
  • Advanced configuration: <https://pkg.go.dev/github.com/gomarkdown/markdown@v0.0.0-20250810172220-2e2c11897d1a/html>
  • Markdown processing: <https://blog.kowalczyk.info/article/cxn3/advanced-markdown-processing-in-go.html>
  • GitHub repository: <https://github.com/gomarkdown/markdown>

`jekyll`

`hugo`

  • Official documentation: <https://gohugo.io/documentation/>
  • All Settings: <https://gohugo.io/configuration/all/>
  • Editor Plugins: <https://gohugo.io/tools/editors/>
  • GitHub repository: <https://github.com/gohugoio/hugo>

Related skills

How it compares

Use markdown-to-html for straightforward markdown tag mapping rather than full static-site generators or rich CMS export pipelines.

FAQ

What does markdown-to-html do?

Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`,

When should I use markdown-to-html?

Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`,

Is markdown-to-html safe to install?

Review the Security Audits panel on this page before installing in production.

Securityappsec

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.