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 196be0c20d Tests formatting cleanup 10 years ago
benchmark Add a benchmark with a long list of references 10 years ago
bin Added basic CLI support. Related to #60, #9 10 years ago
dist Browser files rebuild 10 years ago
docs Fix link to architecture.md 10 years ago
lib Var rename & coverage improve 10 years ago
support Moved testing CLI script to another location, to avoid confusion. Related to #60, #9 10 years ago
test Tests formatting cleanup 10 years ago
.editorconfig Fix .editorconfig 10 years ago
.eslintignore deps update 10 years ago
.eslintrc eslint rules & coding style update 10 years ago
.gitignore Added main class api doc 10 years ago
.ndocrc apidocs: updates + added Ruler docs 10 years ago
.npmignore Added main class api doc 10 years ago
.travis.yml Added coverall.io integration 10 years ago
CHANGELOG.md Deps & changelog update 10 years ago
CONTRIBUTING.md Updated contribution info 10 years ago
LICENSE Changed project name, links, attribution & updated constructor call 10 years ago
Makefile Show text diffs for failed tests 10 years ago
README.md Updated deps & benchmarks 10 years ago
bower.json Added main class api doc 10 years ago
index.js Renamed main class & file 10 years ago
package.json Deps & changelog update 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

  • 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 & bower:

npm install markdown-it --save
bower 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(lang, str).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.js 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