RamType0.Markdig.Renderers.MudBlazor
0.11.0
dotnet add package RamType0.Markdig.Renderers.MudBlazor --version 0.11.0
NuGet\Install-Package RamType0.Markdig.Renderers.MudBlazor -Version 0.11.0
<PackageReference Include="RamType0.Markdig.Renderers.MudBlazor" Version="0.11.0" />
<PackageVersion Include="RamType0.Markdig.Renderers.MudBlazor" Version="0.11.0" />
<PackageReference Include="RamType0.Markdig.Renderers.MudBlazor" />
paket add RamType0.Markdig.Renderers.MudBlazor --version 0.11.0
#r "nuget: RamType0.Markdig.Renderers.MudBlazor, 0.11.0"
#addin nuget:?package=RamType0.Markdig.Renderers.MudBlazor&version=0.11.0
#tool nuget:?package=RamType0.Markdig.Renderers.MudBlazor&version=0.11.0
Markdown renderers for Blazor and MudBlazor
Getting started
KaTeX integration
If you want to render MathInline
, you need to do following steps.
Install KaTeX in your app
Add this to <head>
element.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/katex.min.css" integrity="sha384-5TcZemv2l/9On385z///+d7MSYlvIEw9FuZTIdZ14vJLqWphw7e7ZPuOiCHJcFCP" crossorigin="anonymous">
Add KatexExtension
to MarkdownPipelineBuilder
using Markdig.Renderers.RazorComponent.Katex;
pipelineBuilder.UseKatex();
Vega-Embed integration
If you want to render Vega and Vega-Lite charts, you need to do following steps.
Add VegaEmbedExtension
to MarkdownPipelineBuilder
using Markdig.Renderers.RazorComponent.Vega.Embed;
pipelineBuilder.UseVegaEmbed();
Kroki integration
If you want to render diagrams supported by Kroki, you need to do following steps.
Add KrokiHttpRequestFactory
to services
builder.Services.AddKrokiHttpRequestFactory();
Add KrokiExtension
to MarkdownPipelineBuilder
using Markdig.Renderers.RazorComponent.Kroki;
pipelineBuilder.UseKroki();
MudBlazor
This library is using CSS isolation.
So don't forget to bundle it.
How to use
MudBlazor
Use MudMarkdown
component.
@using Markdig.Renderers.MudBlazor.Components
<MudMarkdown Value="$ e^{i\theta} = \cos\theta + i\sin\theta $" />
Common Blazor
Use MarkdownDocument.ToRenderFragment
extension method.
@using Markdig
@using Markdig.Renderers.RazorComponent
@using Microsoft.AspNetCore.Components.Rendering
@GetMarkdownContent()
@code{
string markdownText = @"
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
Paragraph
*Emphasis*
**Emphasis**
> BlockQuote
This is a $math block$
a | b
-------|-------
0 | 1
2 | 3
";
RenderFragment GetMarkdownContent()
{
var pipelineBuilder = new MarkdownPipelineBuilder().UseAdvancedExtensions();
var pipeline = pipelineBuilder.Build();
var markdownDocument = Markdown.Parse(markdownText, pipeline);
return markdownDocument.ToRenderFragment(pipeline);
}
}
Customization
Just write extension for RazorComponentRenderer
.
Actually, MudBlazor integration is implemented in this way.
public class MudBlazorExtension : IMarkdownExtension
{
public void Setup(MarkdownPipelineBuilder pipeline)
{
}
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer)
{
if (renderer is not RazorComponentRenderer razorComponentRenderer)
{
return;
}
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.HeadingRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<HeadingRenderer>();
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.ParagraphRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<ParagraphRenderer>();
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.ThematicBreakRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<ThematicBreakRenderer>();
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.Inlines.AutolinkInlineRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<AutolinkInlineRenderer>();
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.Inlines.LinkInlineRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<LinkInlineRenderer>();
razorComponentRenderer.ObjectRenderers.TryRemove<RazorComponent.TableRenderer>();
razorComponentRenderer.ObjectRenderers.AddIfNotAlready<TableRenderer>();
}
}
Robust rendering
There is already existing well-known Markdown integration for MudBlazor, MudBlazor.Markdown.
MathInline
MudBlazor.Markdown has wont-fix issue around rendering MathInline
.
Unlike MudBlazor.Markdown, this library is using KaTeX instead of MathJax and never depends on direct DOM manipulation.
CodeBlock
MudBlazor.Markdown is using highlight.js to manipulate DOM directly.
Unlike MudBlazor.Markdown, this library is using ColorCode instead of highlight.js and never depends on direct DOM manipulation.
Mermaid diagrams
mermaid.js is very difficult to integrate to Blazor because it does terrible DOM manipulation.
This library is using Kroki, and does not depend on mermaid.js directly.
Compatible for LLM apps
Use CascadingCodeBlockOptions.OpenCodeBlockContent
to override code block content for Vega-Embed, Kroki open code blocks.
This would be helpful for LLM apps. Open code blocks indicates that the code is imcomplete and rendering them resulted in error.
<CascadingCodeBlockOptions>
<OpenCodeBlockContent>
<MudProgressCircular Indeterminate />
</OpenCodeBlockContent>
<ChildContent>
<MudMarkdown Value="@markdownText" Pipeline="@GetPipeline()" />
</ChildContent>
</CascadingCodeBlockOptions>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- MudBlazor (>= 8.0.0)
- RamType0.Markdig.Renderers.RazorComponent (>= 0.11.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.11.0 | 197 | 5/8/2025 |
0.10.3 | 138 | 5/7/2025 |
0.10.2 | 137 | 5/7/2025 |
0.10.1 | 142 | 5/7/2025 |
0.10.0 | 138 | 5/7/2025 |
0.9.0 | 137 | 5/5/2025 |
0.8.0 | 68 | 5/3/2025 |
0.7.0 | 62 | 5/3/2025 |
0.6.0 | 133 | 5/1/2025 |
0.5.0 | 139 | 5/1/2025 |
0.4.0 | 136 | 4/30/2025 |
0.3.0 | 138 | 4/30/2025 |
0.2.1-alpha | 139 | 4/29/2025 |
0.2.0-alpha | 142 | 4/28/2025 |
0.1.0-alpha | 81 | 4/12/2025 |