RichTextKit is a rich-text layout, measurement and rendering library for SkiaSharp.
- Rich text layout
- Supports most common font styles (bold, italic, underline, super/sub-script etc...)
- Text shaping using HarfBuzzSharp
- Font fallback for emoji and int'l character sets
- Bi-directional and LTR/RTL Text Support (UAX #9)
- Unicode word-break algorithm (UAX #14)
- Max height and max line limits
- Truncate with ellipsis support
- Text measurement support
- Hit testing and caret position information
- Ability to paint selection range highlight
- Document model for building text editors, with undo support
- Easy to use
- Minimal dependencies (just SkiaSharp and HarfBuzzSharp)
RichTextKit is available on NuGet for netstandard2.0 and net8.0:
dotnet add package Topten.RichTextKit
The easiest way to get started is with the RichString class:
// Build some rich text
var rs = new RichString()
.Alignment(TextAlignment.Center)
.FontFamily("Segoe UI")
.MarginBottom(20)
.Add("Welcome To RichTextKit", fontSize: 24, fontWeight: 700, fontItalic: true)
.Paragraph().Alignment(TextAlignment.Left)
.FontSize(18)
.Add("This is a test string");
// Wrap and crop it
rs.MaxWidth = 640;
rs.MaxHeight = 480;
// Paint it to a SkiaSharp canvas
rs.Paint(canvas, new SKPoint(50, 50));
// Measure it
Console.WriteLine($"Size: {rs.MeasuredWidth} x {rs.MeasuredHeight}");For lower-level control, use TextBlock to lay out and paint a single paragraph.
RichTextKit is stable and in active use.
Text layout, and Unicode and international text in particular, are complicated topics. If you find something that doesn't lay out or render correctly, please open an issue or a pull request.
See the changelog.
See here for documentation.
Apache 2.0. See license.txt.

