markdown-it vs remarkable vs marked vs showdown
Markdown Parsing Libraries
markdown-itremarkablemarkedshowdownSimilar Packages:

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 Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
markdown-it20,527,67021,131768 kB58a month agoMIT
remarkable1,340,0075,824-1326 years agoMIT
marked036,645444 kB127 days agoMIT
showdown014,837801 kB233-MIT

Feature Comparison: markdown-it vs remarkable vs marked vs showdown

Performance

  • 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.

  • 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.

  • 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

  • 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.

  • 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.

  • 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

  • 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.

  • 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.

  • 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

  • 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.

  • 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.

  • 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

  • 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.

  • 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.

  • 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: markdown-it vs remarkable vs marked vs showdown

  • 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.

  • 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.

  • 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 markdown-it

markdown-it

CI NPM version Coverage Status Gitter

Markdown parser done right. Fast and easy to extend.

Live demo

  • Follows the CommonMark spec + adds syntax extensions & sugar (URL autolinking, typographer).
  • Configurable syntax! You can add new rules and even replace existing ones.
  • High speed.
  • Safe by default.
  • Community-written plugins and other packages on npm.

Table of content

Install

node.js:

npm install markdown-it

browser (CDN):

Usage examples

See also:

Simple

// node.js
// can use `require('markdown-it')` for CJS
import markdownit from 'markdown-it'
const md = markdownit()
const result = md.render('# markdown-it rulezz!');

// browser with UMD build, added to "window" on script load
// Note, there is no dash in "markdownit".
const md = window.markdownit();
const result = md.render('# markdown-it rulezz!');

Single line rendering, without paragraph wrap:

import markdownit from 'markdown-it'
const md = markdownit()
const result = md.renderInline('__markdown-it__ rulezz!');

Init with presets and options

(*) presets define combinations of active rules and options. Can be "commonmark", "zero" or "default" (if skipped). See API docs for more details.

import markdownit from 'markdown-it'

// commonmark mode
const md = markdownit('commonmark')

// default mode
const md = markdownit()

// enable everything
const md = markdownit({
  html: true,
  linkify: true,
  typographer: true
})

// full options list (defaults)
const md = markdownit({
  // Enable HTML tags in source
  html:         false,

  // Use '/' to close single tags (<br />).
  // This is only for full CommonMark compatibility.
  xhtmlOut:     false,

  // Convert '\n' in paragraphs into <br>
  breaks:       false,

  // CSS language prefix for fenced blocks. Can be
  // useful for external highlighters.
  langPrefix:   'language-',

  // Autoconvert URL-like text to links
  linkify:      false,

  // Enable some language-neutral replacement + quotes beautification
  // For the full list of replacements, see https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs
  typographer:  false,

  // Double + single quotes replacement pairs, when typographer enabled,
  // and smartquotes on. Could be either a String or an Array.
  //
  // For example, you can use '«»„“' for Russian, '„“‚‘' for German,
  // and ['«\xA0', '\xA0»', '‹\xA0', '\xA0›'] for French (including nbsp).
  quotes: '“”‘’',

  // Highlighter function. Should return escaped HTML,
  // or '' if the source string is not changed and should be escaped externally.
  // If result starts with <pre... internal wrapper is skipped.
  highlight: function (/*str, lang*/) { return ''; }
});

Plugins load

import markdownit from 'markdown-it'

const md = markdownit
  .use(plugin1)
  .use(plugin2, opts, ...)
  .use(plugin3);

Syntax highlighting

Apply syntax highlighting to fenced code blocks with the highlight option:

import markdownit from 'markdown-it'
import hljs from 'highlight.js' // https://highlightjs.org

// Actual default values
const md = markdownit({
  highlight: function (str, lang) {
    if (lang && hljs.getLanguage(lang)) {
      try {
        return hljs.highlight(str, { language: lang }).value;
      } catch (__) {}
    }

    return ''; // use external default escaping
  }
});

Or with full wrapper override (if you need assign class to <pre> or <code>):

import markdownit from 'markdown-it'
import hljs from 'highlight.js' // https://highlightjs.org

// Actual default values
const md = markdownit({
  highlight: function (str, lang) {
    if (lang && hljs.getLanguage(lang)) {
      try {
        return '<pre><code class="hljs">' +
               hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
               '</code></pre>';
      } catch (__) {}
    }

    return '<pre><code class="hljs">' + md.utils.escapeHtml(str) + '</code></pre>';
  }
});

Linkify

linkify: true uses linkify-it. To configure linkify-it, access the linkify instance through md.linkify:

md.linkify.set({ fuzzyEmail: false });  // disables converting email to link

API

API documentation

If you are going to write plugins, please take a look at Development info.

Syntax extensions

Embedded (enabled by default):

Via plugins:

Manage rules

By default all rules are enabled, but can be restricted by options. On plugin load all its rules are enabled automatically.

import markdownit from 'markdown-it'

// Activate/deactivate rules, with currying
const md = markdownit()
  .disable(['link', 'image'])
  .enable(['link'])
  .enable('image');

// Enable everything
const md = markdownit({
  html: true,
  linkify: true,
  typographer: true,
});

You can find all rules in sources:

Benchmark

Here is the result of readme parse at MB Pro Retina 2013 (2.4 GHz):

npm run benchmark-deps
benchmark/benchmark.mjs readme

Selected samples: (1 of 28)
 > README

Sample: README.md (7774 bytes)
 > commonmark-reference x 1,222 ops/sec ±0.96% (97 runs sampled)
 > current x 743 ops/sec ±0.84% (97 runs sampled)
 > current-commonmark x 1,568 ops/sec ±0.84% (98 runs sampled)
 > marked x 1,587 ops/sec ±4.31% (93 runs sampled)

Note. CommonMark version runs with simplified link normalizers for more "honest" compare. Difference is ≈1.5×.

As you can see, markdown-it doesn't pay with speed for its flexibility. Slowdown of "full" version caused by additional features not available in other implementations.

markdown-it for enterprise

Available as part of the Tidelift Subscription.

The maintainers of markdown-it and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.

Authors

markdown-it is the result of the decision of the authors who contributed to 99% of the Remarkable code to move to a project with the same authorship but new leadership (Vitaly and Alex). It's not a fork.

References / Thanks

Big thanks to John MacFarlane for his work on the CommonMark spec and reference implementations. His work saved us a lot of time during this project's development.

Related Links:

Ports