Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed https://markdown-it.github.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Vitaly Puzrin e92e776411 Rewrite core to es6 modules 6 months ago
..
README.md Rewrite core to es6 modules 6 months ago
block-bq-flat.md Add single-rule test cases 10 years ago
block-bq-nested.md Add single-rule test cases 10 years ago
block-code.md Add single-rule test cases 10 years ago
block-fences.md Add single-rule test cases 10 years ago
block-heading.md Add single-rule test cases 10 years ago
block-hr.md Add single-rule test cases 10 years ago
block-html.md Add more benchmark fixtures 10 years ago
block-lheading.md Add single-rule test cases 10 years ago
block-list-flat.md Add more benchmark fixtures 10 years ago
block-list-nested.md Add more benchmark fixtures 10 years ago
block-ref-flat.md Add more benchmark fixtures 10 years ago
block-ref-list.md Add a benchmark with a long list of references 9 years ago
block-ref-nested.md Add more benchmark fixtures 10 years ago
block-tables.md Add remarked tests for tables and fix renderer accordingly 10 years ago
inline-autolink.md Add more benchmark fixtures 10 years ago
inline-backticks.md Add single-rule test cases 10 years ago
inline-em-flat.md Add single-rule test cases 10 years ago
inline-em-nested.md Add single-rule test cases 10 years ago
inline-em-worst.md Add single-rule test cases 10 years ago
inline-entity.md Renamed stmd -> commonmark 10 years ago
inline-escape.md Add more benchmark fixtures 10 years ago
inline-html.md Renamed stmd -> commonmark 10 years ago
inline-links-flat.md Add more benchmark fixtures 10 years ago
inline-links-nested.md Add more tests 10 years ago
inline-newlines.md Add more benchmark fixtures 10 years ago
lorem1.txt Changed project name, links, attribution & updated constructor call 10 years ago
rawtabs.md Add more benchmark fixtures 10 years ago

README.md

markdown-it

Build Status NPM version Coverage Status Gitter

Markdown parser done right. Fast and easy to extend.

Live demo

v4.+ changed internals! Plugins need update. See migration details

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

Table of content

Install

node.js:

npm install markdown-it --save

browser (CDN):

Usage examples

See also:

Simple

// node.js, "classic" way:
var MarkdownIt = require('markdown-it'),
    md = new MarkdownIt();
var result = md.render('# markdown-it rulezz!');

// node.js, the same, but with sugar:
var md = require('markdown-it')();
var result = md.render('# markdown-it rulezz!');

// browser without AMD, added to "window" on script load
// Note, there are no dash.
var md = window.markdownit();
var result = md.render('# markdown-it rulezz!');

Single line rendering, without paragraph wrap:

var md = require('markdown-it')();
var result = md.renderInline('__markdown-it__ rulezz!');

Init with presets and options

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

// commonmark mode
var md = require('markdown-it')('commonmark');

// default mode
var md = require('markdown-it')();

// enable everything
var md = require('markdown-it')({
  html: true,
  linkify: true,
  typographer: true
});

// full options list (defaults)
var md = require('markdown-it')({
  html:         false,        // Enable HTML tags in source
  xhtmlOut:     false,        // Use '/' to close single tags (<br />).
                              // This is only for full CommonMark compatibility.
  breaks:       false,        // Convert '\n' in paragraphs into <br>
  langPrefix:   'language-',  // CSS language prefix for fenced blocks. Can be
                              // useful for external highlighters.
  linkify:      false,        // Autoconvert URL-like text to links

  // Enable some language-neutral replacement + quotes beautification
  typographer:  false,

  // Double + single quotes replacement pairs, when typographer enabled,
  // and smartquotes on. Set doubles to '«»' for Russian, '„“' for German.
  quotes: '“”‘’',

  // Highlighter function. Should return escaped HTML,
  // or '' if the source string is not changed and should be escaped externaly.
  highlight: function (/*str, lang*/) { return ''; }
});

Plugins load

var md = require('markdown-it')()
            .use(plugin1)
            .use(plugin2, opts, ...)
            .use(plugin3);

Syntax highlighting

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

var hljs = require('highlight.js') // https://highlightjs.org/

// Actual default values
var md = require('markdown-it')({
  highlight: function (str, lang) {
    if (lang && hljs.getLanguage(lang)) {
      try {
        return hljs.highlight(str, { language: lang }).value;
      } catch (__) {}
    }

    try {
      return hljs.highlightAuto(str).value;
    } catch (__) {}

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

API

API documentation

If you are going to write plugins - 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 it's rules are enabled automatically.

// Activate/deactivate rules, with curring
var md = require('markdown-it')()
            .disable([ 'link', 'image' ])
            .enable([ 'link' ])
            .enable('image');

// Enable everything
md = require('markdown-it')('full', {
  html: true,
  linkify: true,
  typographer: true,
});

Benchmark

Here is result of CommonMark spec parse at Core i5 2.4 GHz (i5-4258U):

$ benchmark/benchmark.mjs spec
Selected samples: (1 of 27)
 > spec

Sample: spec.txt (110610 bytes)
 > commonmark-reference x 68.63 ops/sec ±6.53% (72 runs sampled)
 > current x 79.62 ops/sec ±3.22% (80 runs sampled)
 > current-commonmark x 103 ops/sec ±1.10% (76 runs sampled)
 > marked-0.3.2 x 23.14 ops/sec ±1.66% (42 runs sampled)

As you can see, markdown-it doesn't pay with speed for it's flexibility. Because it's written in monomorphyc style and uses JIT inline caches effectively.

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:

License

MIT