Skip to content

TheEightBot/MintedTextEditor

MintedTextEditor logo

MintedTextEditor

CI NuGet (Core) NuGet (MAUI) License: MIT

Rich text editing for .NET MAUI, rendered entirely on a SkiaSharp canvas.

MintedTextEditor is organized into three packages:

  • MintedTextEditor.Core: document model, editing engine, layout, formatting, commands, events, HTML interop.
  • MintedTextEditor.SkiaSharp: drawing backend implementing IDrawingContext.
  • MintedTextEditor.Maui: MAUI control (MintedEditorView) and platform integration.

Table of Contents

Highlights

  • Full-canvas rendering using SkiaSharp (no native text editor controls).
  • Character formatting: bold, italic, underline, strikethrough, subscript, superscript, font family/size, text color, highlight.
  • Paragraph formatting: alignment, indentation, line spacing, headings, lists, block quote.
  • Inline content: hyperlinks, images, tables.
  • Editing primitives: caret navigation, selection, clipboard, undo/redo.
  • Toolbar and command architecture with customizable item sets.
  • Three built-in toolbar icon packs (Lucide, Heroicons, Material Symbols) — all embedded in the MintedTextEditor.Core package, no app-bundle asset setup required.
  • Theme-aware toolbar icons: automatically recolored to the current theme's foreground at draw time, including full dark-mode support.
  • HTML and Markdown import/export pipelines, including support for GitHub Flavored Markdown (GFM).
  • Theming support (light, dark, high contrast, and custom styles).
  • Accessibility and localization support including RTL scenarios.

Package Layout

src/
  MintedTextEditor.Core/
  MintedTextEditor.SkiaSharp/
  MintedTextEditor.Maui/
samples/
  SampleApp.Maui/
tests/
  MintedTextEditor.Core.Tests/

Platform Support

Platform Minimum Version
Android API 21 (Android 5.0)
iOS 15.0
macOS (Mac Catalyst) 15.0
Windows 10.0.17763

Quick Start

1) Install package

dotnet add package MintedTextEditor.Maui

2) Register services

In MauiProgram.cs:

using MintedTextEditor.Maui;

var builder = MauiApp.CreateBuilder();
builder
    .UseMauiApp<App>()
    .UseMintedTextEditor();

3) Add control in XAML

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:minted="https://schemas.mintedtexteditor.com/2026"
    x:Class="MyApp.MainPage">

    <minted:MintedEditorView
        x:Name="Editor"
        ShowToolbar="True"
        PlaceholderText="Start typing..." />

</ContentPage>

4) Load or export HTML

Editor.LoadHtml("<p>Hello <strong>world</strong></p>");
string html = Editor.GetHtml();

5) Load or export Markdown

using MintedTextEditor.Core.Markdown;

// Load a document from Markdown
var document = EditorDocumentExtensions.LoadMarkdown("# Hello World\nThis is a paragraph.");

// Export the current document to a Markdown string
var markdown = editor.Document.GetMarkdown();

For full import/export options, including GitHub Flavored Markdown (GFM) support, see docs/markdown-interop.md.

Sample App

The repository includes a runnable MAUI sample with focused pages for:

  • basic editing
  • formatting
  • load/save, HTML, and Markdown
  • images and hyperlinks
  • tables
  • localization
  • theming and toolbar icon packs

Project: samples/SampleApp.Maui

Configuration

Theming

Editor.Theme = EditorTheme.CreateDark();
Editor.UseSystemTheme = false;

Toolbar icon packs

Three icon packs are included and embedded in MintedTextEditor.Core — no extra files are needed in the app project.

Pack Style
ToolbarIconPack.Lucide Outlined, 2 px stroke (default)
ToolbarIconPack.Heroicons Outlined, 1.5 px stroke
ToolbarIconPack.MaterialSymbols Filled, Material Design paths
Editor.ToolbarIconPack = ToolbarIconPack.Lucide;          // default
Editor.ToolbarIconPack = ToolbarIconPack.Heroicons;
Editor.ToolbarIconPack = ToolbarIconPack.MaterialSymbols;

All icons are rendered with black ink and recolored at draw time using SKColorFilter (SrcIn) to match the current theme color. Switching between light and dark themes updates icon colors automatically without reloading assets.

Markdown Interop

Import Markdown

You can load Markdown content into the editor using the LoadMarkdown or AppendMarkdown methods:

using MintedTextEditor.Core.Markdown;

// Load a new document from Markdown
var document = EditorDocumentExtensions.LoadMarkdown("# Hello World\nThis is a paragraph.");

// Append Markdown to an existing document
editor.Document.AppendMarkdown("## Subheading\nAnother paragraph.");

Export Markdown

Export the current document to a Markdown string:

using MintedTextEditor.Core.Markdown;

var markdown = editor.Document.GetMarkdown();

Export Options

Customize the Markdown export behavior using the MarkdownExportOptions class:

var options = new MarkdownExportOptions
{
    UseGfmExtensions = true, // Enable GitHub Flavored Markdown (default: true)
    LineEnding = "\r\n"      // Customize line endings (default: "\n")
};
var markdown = editor.Document.GetMarkdown(options);

Events

Editor.TextChanged += (_, e) => { /* document changed */ };
Editor.SelectionChanged += (_, e) => { /* selection changed */ };
Editor.HyperlinkClicked += (_, e) => { /* inspect/cancel open */ };

For deeper API details, see docs/getting-started.md, docs/commands-events.md, and docs/toolbar-customization.md.

Documentation

Document Description
Getting Started Installation, setup, first editor
Document Model Blocks, inlines, and text runs
Formatting Character and paragraph formatting
Toolbar Customization Toolbar groups and items
Theming Built-in and custom themes
Commands & Events Command and event reference
HTML Interop HTML import/export behavior
Markdown Interop Markdown import/export behavior
Images & Hyperlinks Inline media and links
Tables Table creation and editing
Accessibility Accessibility guidance
Architecture Internal architecture overview

Build and Test

git clone https://github.com/TheEightBot/MintedTextEditor.git
cd MintedTextEditor

# Build solution
dotnet build

# Run core tests
dotnet test tests/MintedTextEditor.Core.Tests/

# Build MAUI project (after installing MAUI workload)
dotnet workload install maui
dotnet build src/MintedTextEditor.Maui/

# Build sample app
dotnet build samples/SampleApp.Maui/

Contributing

Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.

Code of Conduct

This project follows the Contributor Covenant Code of Conduct.

License

MIT

About

A Rich Text Editor for .NET MAUI

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages