SpecWorks.MarkMyDeck 0.2.0

dotnet add package SpecWorks.MarkMyDeck --version 0.2.0
                    
NuGet\Install-Package SpecWorks.MarkMyDeck -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SpecWorks.MarkMyDeck" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SpecWorks.MarkMyDeck" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="SpecWorks.MarkMyDeck" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SpecWorks.MarkMyDeck --version 0.2.0
                    
#r "nuget: SpecWorks.MarkMyDeck, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SpecWorks.MarkMyDeck@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SpecWorks.MarkMyDeck&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=SpecWorks.MarkMyDeck&version=0.2.0
                    
Install as a Cake Tool

MarkMyDeck

A .NET library for converting CommonMark/GitHub Flavored Markdown to Microsoft PowerPoint (.pptx) presentations. The library targets .NET Standard 2.1 and .NET 10, and the CLI targets .NET 10.

Features

  • Markdown → PowerPoint: Convert CommonMark markdown to PowerPoint (.pptx) presentations using the Open XML SDK

Currently Supported

Slide Generation

  • # H1 and ## H2 headings create new slides
  • ### H3 through ###### H6 render as styled text on the current slide
  • --- (thematic breaks) force a new slide
  • Content between headings renders on the current slide

Block Elements

  • Headings (ATX: # H1 through ###### H6)
  • Paragraphs
  • Code blocks (fenced with ```) with syntax highlighting
  • Block quotes (>)
  • Thematic breaks (---, ***, ___) as slide separators
  • Lists (ordered, unordered, nested)
  • Tables (with headers, borders, and shading)

Inline Elements

  • Bold (**text** or __text__)
  • Italic (*text* or _text_)
  • Bold + Italic (***text***)
  • Inline code (`code`)
  • Links ([text](url))
  • Images (![alt](url))
  • Hard line breaks

Styling

  • Customizable fonts and colors
  • Configurable heading/title sizes
  • Code syntax highlighting for JSON, TypeSpec, and Bash
  • Widescreen 16:9 slide format

Installation

dotnet add package SpecWorks.MarkMyDeck

Quick Start

using MarkMyDeck;

// Convert markdown string to .pptx file
string markdown = "# Hello World\n\nThis is **bold** text.\n\n---\n\n# Slide 2\n\n- Item 1\n- Item 2";
MarkdownConverter.ConvertToPptx(markdown, "output.pptx");

Convert to Byte Array

byte[] pptxBytes = MarkdownConverter.ConvertToPptxBytes(markdown);

Stream-based Conversion

using var inputStream = File.OpenRead("input.md");
using var outputStream = File.Create("output.pptx");
MarkdownConverter.ConvertToPptx(inputStream, outputStream);

Async Conversion

await MarkdownConverter.ConvertToPptxAsync(markdown, "output.pptx");

Custom Styling

using MarkMyDeck.Configuration;

var options = new ConversionOptions
{
    Styles = new SlideStyleConfiguration
    {
        DefaultFontName = "Arial",
        DefaultFontSize = 20,
        TitleFontSize = 40,
        TitleColor = "2E74B5",
        CodeFontName = "Fira Code",
        CodeFontSize = 16,
        CodeBackgroundColor = "282C34"
    },
    DocumentTitle = "My Presentation",
    Author = "John Doe"
};

MarkdownConverter.ConvertToPptx(markdown, "styled.pptx", options);

Command-Line Interface

MarkMyDeck includes a CLI for converting markdown files from the command line.

Installation

dotnet tool install --global SpecWorks.MarkMyDeck.CLI

Or run directly from the project:

dotnet run --project src/MarkMyDeck.CLI/MarkMyDeck.CLI.csproj -- convert -i input.md

Usage

# Basic conversion
markmydeck convert -i README.md

# Specify output file
markmydeck convert -i input.md -o output.pptx

# Custom font and size
markmydeck convert -i document.md --font "Arial" --font-size 20

# With title metadata
markmydeck convert -i document.md --title "My Presentation"

# Verbose output
markmydeck convert -i document.md -v

# Force overwrite
markmydeck convert -i document.md --force

# View version
markmydeck version

CLI Options

Option Alias Description
--input -i Input markdown file path (required)
--output -o Output file path (default: same name with .pptx)
--verbose -v Enable verbose output
--force - Overwrite output file if it exists
--font -f Default font name
--font-size -s Default font size (6-72 points)
--title -t Presentation title metadata

Architecture

MarkMyDeck uses a three-stage conversion pipeline:

  1. Parse: Markdown is parsed into an AST using Markdig
  2. Render: The AST is traversed and converted to OpenXML Presentation elements
  3. Save: The presentation is saved using DocumentFormat.OpenXml

Slide Strategy

  • # H1 and ## H2 headings create new slides
  • ### H3 through ###### H6 are rendered as styled text within the current slide
  • --- thematic breaks force a new slide
  • All other content (paragraphs, lists, tables, code blocks) renders on the current slide

Project Structure

MarkMyDeck/
├── src/
│   ├── MarkMyDeck/                    # Core library (netstandard2.1;net10.0)
│   │   ├── MarkdownConverter.cs       # Public API
│   │   ├── Converters/
│   │   │   ├── OpenXmlPresentationRenderer.cs  # Main renderer
│   │   │   ├── BlockRenderers/        # Block element renderers
│   │   │   └── InlineRenderers/       # Inline element renderers
│   │   ├── SyntaxHighlighting/        # Syntax highlighting
│   │   ├── OpenXml/
│   │   │   ├── PresentationBuilder.cs # OpenXML presentation builder
│   │   │   └── SlideManager.cs        # Slide content management
│   │   └── Configuration/             # Configuration classes
│   └── MarkMyDeck.CLI/                # Command-line tool (net10.0)
└── tests/
    └── MarkMyDeck.Tests/              # Unit tests (net10.0)

Requirements

  • Library: .NET Standard 2.1 or .NET 10.0
  • CLI: .NET 10.0
  • Dependencies:
    • Markdig 0.37.0
    • DocumentFormat.OpenXml 3.1.0
    • ColorCode.Core 2.0.15

Building from Source

git clone https://github.com/spec-works/MarkMyDeck.git
cd MarkMyDeck/dotnet
dotnet build
dotnet test

License

MIT License

Acknowledgments

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.2.0 79 3/7/2026
0.1.0 93 2/8/2026