Marko: A markdown parser with high extensibility.

https://github.com/frostming/marko/workflows/Tests/badge.svg https://img.shields.io/pypi/v/marko.svg https://img.shields.io/pypi/pyversions/marko.svg https://img.shields.io/badge/CommonMark-0.30-blue.svg

Marko is a markdown parser written in pure Python that complies CommonMark’s spec v0.30. It is designed to be highly extensible, see Extend Marko for details.

Marko requires Python 3.6 or higher.

Why Marko?

Among all implementations of Python’s markdown parser, it is a common issue that user can’t easily extend it to add his own features. Furthermore, Python-Markdown and mistune don’t comply CommonMark’s spec. It is a good reason for me to develop a new markdown parser.

Respecting that Marko complies CommonMark’s spec at the same time, which is a super complicated spec, Marko’s performance will be affected. However, using a parser which doesn’t comply the CommonMark spec may give you unexpected rendered results from time to time. A benchmark result shows that Marko is 3 times slower than Python-Markdown, but a bit faster than Commonmark-py, much slower than mistune. If performance is a bigger concern to you than spec compliance, you’d better choose another parser.

Install and Use Marko

The installation is very simple:

$ pip install marko

And to use it:

import marko

print(marko.convert(text))

Marko also provides a simple CLI, for example, to render a document and output to a html file:

$ cat my_article.md | marko > my_article.html

Other CLI usage:

usage: marko [-h] [-v] [-p PARSER] [-r RENDERER] [-e EXTENSTION] [-o OUTPUT]
         [document]

positional arguments:
document              The document to convert, will use stdin if not given.

optional arguments:
-h, --help            show this help message and exit
-v, --version         show program's version number and exit
-p PARSER, --parser PARSER
                        Specify another parser class
-r RENDERER, --renderer RENDERER
                        Specify another renderer class
-e EXTENSTION, --extension EXTENSTION
                        Specify the import name of extension, can be given
                        multiple times
-o OUTPUT, --output OUTPUT
                        Ouput to a file

Indices and tables