Which is Better Markdown Parsing Libraries?
marked vs markdown-it vs remarkable vs showdown
1 Year
markedmarkdown-itremarkableshowdownSimilar Packages:
What's Markdown Parsing Libraries?

Markdown parsing libraries are essential tools in web development that convert Markdown text into HTML. They enable developers to easily render formatted text on web pages, making it simpler to manage content creation and presentation. These libraries vary in features, performance, and extensibility, allowing developers to choose one that best fits their project's needs. Understanding the differences among these libraries can help in selecting the right one for specific use cases, such as performance requirements, customization, and ease of use.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
marked9,175,90132,930951 kB18a month agoMIT
markdown-it5,907,66518,074767 kB127 months agoMIT
remarkable684,5235,741-1304 years agoMIT
showdown674,41314,247801 kB215-MIT
Feature Comparison: marked vs markdown-it vs remarkable vs showdown

Performance

  • marked: marked is optimized for performance and is known for its quick parsing capabilities. It is lightweight and can handle large Markdown files efficiently, making it a great choice for applications that prioritize speed.
  • markdown-it: markdown-it is designed for speed and efficiency, making it one of the fastest Markdown parsers available. It uses a streaming approach to parsing, which helps reduce memory usage and improve performance, especially with large documents.
  • remarkable: remarkable offers a good balance of performance and extensibility. While it may not be as fast as markdown-it or marked, it provides sufficient speed for most applications, especially when using its modular features.
  • showdown: showdown is generally slower compared to other libraries due to its bidirectional conversion capabilities. However, it is still performant enough for typical use cases, especially when converting Markdown to HTML.

Extensibility

  • marked: marked has limited extensibility compared to markdown-it. While it is easy to use, it does not support plugins, which may restrict customization for advanced use cases.
  • markdown-it: markdown-it is highly extensible, allowing developers to create custom plugins to enhance its functionality. This makes it suitable for projects that require specific Markdown features or syntax highlighting capabilities.
  • remarkable: remarkable is designed with extensibility in mind, providing a modular architecture that allows developers to add custom rules and features. This makes it a flexible choice for projects that need tailored Markdown processing.
  • showdown: showdown supports some level of extensibility through its options, but it is not as flexible as markdown-it or remarkable. It is best suited for straightforward use cases without extensive customization needs.

Learning Curve

  • marked: marked is easy to learn and integrate, making it a great choice for beginners or those looking for a quick solution. Its straightforward API allows developers to get started with minimal effort.
  • markdown-it: markdown-it has a moderate learning curve due to its extensive features and plugin system. Developers may need some time to explore its capabilities and understand how to implement custom plugins effectively.
  • remarkable: remarkable has a moderate learning curve, similar to markdown-it, but its modular design makes it easier to understand for those familiar with JavaScript. Developers can quickly grasp how to customize it for their needs.
  • showdown: showdown is user-friendly and has a low learning curve, making it accessible for developers of all skill levels. Its simple API allows for quick implementation and understanding.

Customization

  • marked: marked has limited customization options, focusing on simplicity and performance. While it provides basic configuration options, it does not support plugins, which may limit its adaptability for complex requirements.
  • markdown-it: markdown-it offers extensive customization options through its plugin architecture, allowing developers to modify the parsing process and add new features as needed. This makes it ideal for projects requiring specific Markdown syntax or behavior.
  • remarkable: remarkable allows for a good level of customization through its modular system, enabling developers to create custom rules and modify the parsing behavior. This flexibility makes it suitable for a variety of use cases.
  • showdown: showdown provides basic customization options through its settings, but it is not as flexible as markdown-it or remarkable. It is best for projects that do not require extensive Markdown modifications.

Community and Support

  • marked: marked has a solid user base and is well-documented, making it easy to find help and resources. However, its community is smaller compared to markdown-it, which may limit the availability of third-party plugins.
  • markdown-it: markdown-it has a strong community and is actively maintained, providing good support and a wealth of plugins created by the community. This makes it easier to find solutions and enhancements for specific needs.
  • remarkable: remarkable has a decent community and is maintained, but it may not have as many resources or plugins available as markdown-it. Nonetheless, it is still a reliable choice with sufficient support.
  • showdown: showdown has a smaller community compared to the others, but it is still maintained and has basic documentation available. It may not have as many plugins or resources, but it is suitable for straightforward use cases.
How to Choose: marked vs markdown-it vs remarkable vs showdown
  • marked: Select marked for its simplicity and performance. It is a straightforward Markdown parser that is easy to use and integrates well with existing projects, making it ideal for those who want a quick and efficient solution without extensive customization.
  • markdown-it: Choose markdown-it if you need a highly customizable and extensible Markdown parser that supports plugins and offers a fast parsing speed. It is suitable for projects that require additional features like syntax highlighting or custom rules.
  • remarkable: Opt for remarkable if you require a balance between performance and extensibility. It provides a modular architecture that allows for easy customization while maintaining good parsing speed, making it suitable for projects that may need specific Markdown features.
  • showdown: Choose showdown if you need a library that can convert Markdown to HTML and back, offering a bidirectional conversion. It is particularly useful for applications that require editing capabilities, allowing users to switch between Markdown and HTML seamlessly.
README for marked

Marked

npm gzip size install size downloads github actions snyk

  • ⚡ built for speed
  • ⬇️ low-level compiler for parsing markdown without caching or blocking for long periods of time
  • ⚖️ light-weight while implementing all markdown features from the supported flavors & specifications
  • 🌐 works in a browser, on a server, or from a command line interface (CLI)

Demo

Checkout the demo page to see marked in action ⛹️

Docs

Our documentation pages are also rendered using marked 💯

Also read about:

Compatibility

Node.js: Only current and LTS Node.js versions are supported. End of life Node.js versions may become incompatible with Marked at any point in time.

Browser: Not IE11 :)

Installation

CLI:

npm install -g marked

In-browser:

npm install marked

Usage

Warning: 🚨 Marked does not sanitize the output HTML. Please use a sanitize library, like DOMPurify (recommended), sanitize-html or insane on the output HTML! 🚨

DOMPurify.sanitize(marked.parse(`<img src="x" onerror="alert('not happening')">`));

CLI

# Example with stdin input
$ marked -o hello.html
hello world
^D
$ cat hello.html
<p>hello world</p>
# Print all options
$ marked --help

Browser

<!doctype html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Marked in the browser</title>
</head>
<body>
  <div id="content"></div>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  <script>
    document.getElementById('content').innerHTML =
      marked.parse('# Marked in the browser\n\nRendered by **marked**.');
  </script>
</body>
</html>

or import esm module

<script type="module">
  import { marked } from "https://cdn.jsdelivr.net/npm/marked/lib/marked.esm.js";
  document.getElementById('content').innerHTML =
    marked.parse('# Marked in the browser\n\nRendered by **marked**.');
</script>

License

Copyright (c) 2011-2022, Christopher Jeffrey. (MIT License)