Skip to content
Depreciated in favor of rtfd/CommonMark-py
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


NOTE: This repo is no longer maintained and most likely contains numerous bugs, for the up to date and safe version you want rtfd/CommonMark-py.

Pure Python port of jgm's stmd.js, a Markdown parser and renderer for the CommonMark specification, using only native modules. Once both this project and the CommonMark specification are stable we will release the first 1.0 version and attempt to keep up to date with changes in stmd.js.

We are currently at the same development stage (actually a bit ahead because we have implemented HTML entity conversion and href URL escaping) as stmd.js. Since Python versions pre-3.4 use outdated (i.e. not HTML5 spec) entity conversion, I've converted the 3.4 implementation into a single file, which so far seems to work (all tests pass on 2.7, 3.3, 3.4, PyPy, and PyPy3).

Current version: 0.5.4

Build Status


rolands@kamaji:~$ pip install commonmark


import CommonMark
parser = CommonMark.DocParser()
renderer = CommonMark.HTMLRenderer()
ast = parser.parse("Hello *World*")
html = renderer.render(ast)
json = CommonMark.ASTtoJSON(ast)
CommonMark.dumpAST(ast) # pretty print generated AST structure
print(html) # <p>Hello <em>World</em><p/>

----- or -----

rolands@kamaji:~$ -o README.html
rolands@kamaji:~$ -o README.json -aj # output AST as JSON
rolands@kamaji:~$ -a # pretty print generated AST structure
rolands@kamaji:~$ -h
usage: [-h] [-o [O]] [-a] [-aj] [infile]

Process Markdown according to the CommonMark specification.

positional arguments:
  infile      Input Markdown file to parse, defaults to stdin

optional arguments:
  -h, --help  show this help message and exit
  -o [O]      Output HTML/JSON file, defaults to stdout
  -a          Print formatted AST
  -aj         Output JSON AST


If you would like to offer suggestions/optimizations/bugfixes through pull requests please do! Also if you find an error in the parser/renderer that isn't caught by the current test suite please open a new issue and I would also suggest you send the stmd.js project a pull request adding your test to the existing test suite.


The tests script,, is pretty much a devtool. As well as running all the tests embeded in spec.txt it also allows you to run specific tests using the -t argument, provide information about passed tests with -p, percentage passed by category of test with -s, and enter markdown interactively with -i (In interactive mode end a block by inputing a line with just end, to quit do the same but with quit). -d can be used to print call tracing.

rolands@kamaji:~/utils/CommonMark-py$ python -h
usage: [-h] [-t T] [-p] [-f] [-i] [-d] [-np] [-s]

script to run the CommonMark specification tests against the

optional arguments:
  -h, --help  show this help message and exit
  -t T        Single test to run or comma seperated list of tests (-t 10 or -t 10,11,12,13)
  -p          Print passed test information
  -f          Print failed tests (during -np...)
  -i          Interactive Markdown input mode
  -d          Debug, trace calls
  -np         Only print section header, tick, or cross
  -s          Print percent of tests passed by category


You can’t perform that action at this time.