Working with Markdown in C# (.NET): Best Libraries and Usage Examples
Markdown is a lightweight markup language that allows you to format text using simple symbols. It is widely used for writing documentation, README files, blog posts, and forum messages. In the C# (.NET) ecosystem, there are several powerful libraries for parsing, converting, and generating Markdown. In this article, we will review the main tools and show how to work with them.
Popular Libraries for Working with Markdown in C#
The most in-demand solutions in .NET:
- Markdig — a modern, fast, and fully CommonMark-compliant library. Supports extensions (tables, strikethrough, emoji, diagrams, etc.).
- MarkdownSharp — a lightweight parser from Stack Overflow. Simple but does not support CommonMark and many extensions.
- CommonMark.NET — the official implementation of the CommonMark specification. Well-suited for strict compatibility.
In this guide, we will focus on Markdig, as it is the de facto standard for modern .NET projects.
Installing Markdig
Add the package via NuGet Package Manager or .NET CLI:
dotnet add package MarkdigOr via Package Manager Console:
Install-Package MarkdigBasic Usage: Converting Markdown to HTML
The simplest scenario is to convert a Markdown string to HTML. Markdig does this in one line:
using Markdig;
string markdown = "# Heading 1
This is **bold text** and *italic*.
- List item 1- List item 2";
string html = Markdown.ToHtml(markdown);
Console.WriteLine(html);Result:
<h1>Heading 1</h1><p>This is <strong>bold text</strong> and <em>italic</em>.</p><ul><li>List item 1</li><li>List item 2</li></ul>Working with Markdig Extensions
Markdig supports many extensions. To use them, you need to create a pipeline:
using Markdig;using Markdig.Extensions.Tables;
var pipeline = new MarkdownPipelineBuilder() .UseAdvancedExtensions() // enables all basic extensions .Build();
string markdown = "| Header 1 | Header 2 ||-------------|-------------|| Cell 1 | Cell 2 |";
string html = Markdown.ToHtml(markdown, pipeline);
Console.WriteLine(html);This code will generate an HTML table. You can enable individual extensions: .UseTables(), .UseEmojiAndSmiley(), .UseTaskLists(), and others.
Converting HTML Back to Markdown
Reverse conversion (HTML → Markdown) is not included in the standard Markdig package, but you can use the ReverseMarkdown library:
dotnet add package ReverseMarkdownusing ReverseMarkdown;
var converter = new Converter();string html = "<h1>Hello, world!</h1><p>This is <strong>important</strong></p>";string markdown = converter.Convert(html);
Console.WriteLine(markdown);Working with Markdown Files
Often Markdown is stored in files. Example of reading and converting:
using Markdig;
string filePath = "document.md";string markdownContent = File.ReadAllText(filePath);string htmlContent = Markdown.ToHtml(markdownContent);
File.WriteAllText("output.html", htmlContent);Creating Extended HTML with a Custom Pipeline
You can fine-tune the pipeline for specific tasks:
var pipeline = new MarkdownPipelineBuilder()