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 import/export pipeline.
  • 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();

Sample App

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

  • basic editing
  • formatting
  • load/save and HTML
  • 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.

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
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