#markdown #commonmark

bin+lib markdown-it

Rust port of popular markdown-it.js library

8 releases (5 breaking)

0.6.0 Aug 3, 2023
0.5.1 Jul 5, 2023
0.5.0 May 13, 2023
0.4.0 Oct 3, 2022
0.1.1 Jul 21, 2022

#173 in Text processing

Download history 338/week @ 2023-11-01 329/week @ 2023-11-08 291/week @ 2023-11-15 422/week @ 2023-11-22 440/week @ 2023-11-29 457/week @ 2023-12-06 530/week @ 2023-12-13 556/week @ 2023-12-20 373/week @ 2023-12-27 487/week @ 2024-01-03 449/week @ 2024-01-10 402/week @ 2024-01-17 417/week @ 2024-01-24 288/week @ 2024-01-31 359/week @ 2024-02-07 378/week @ 2024-02-14

1,508 downloads per month
Used in 20 crates (11 directly)

MIT license

270KB
5.5K SLoC

markdown-it

web demo github docs.rs crates.io coverage

Rust port of popular markdown-it.js library.

TL;DR:

  • if you want to get result fast, use pulldown-cmark
  • if you want to render GFM exactly like github, use comrak
  • if you want to define your own syntax (like @mentions, :emoji:, custom html classes), use this library

You can check a demo in your browser (it's Rust compiled into WASM).

Features

  • 100% CommonMark compatibility
  • AST
  • Source maps (full support, not just on block tags like cmark)
  • Ability to write your own syntax of arbitrary complexity
    • to prove this point, CommonMark syntax itself is written as a plugin

Usage

let parser = &mut markdown_it::MarkdownIt::new();
markdown_it::plugins::cmark::add(parser);
markdown_it::plugins::extra::add(parser);

let ast  = parser.parse("Hello **world**!");
let html = ast.render();

print!("{html}");
// prints "<p>Hello <strong>world</strong>!</p>"

For a guide on how to extend it, see examples folder.

Notes

This is an attempt at making a language-agnostic parser. You can probably parse AsciiDoc, reStructuredText or any other plain text format with this without too much effort. I might eventually write these as proof-of-concept.

Dependencies

~7–10MB
~201K SLoC