Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
D

diffplex

> 编程语言
Open source

DiffPlex is Netstandard 2.0+ C# library to generate textual diffs.

1.3K stars0 likes1 views
WebsiteGitHub

About

DiffPlex is Netstandard 2.0+ C# library to generate textual diffs.

DiffPlex

DiffPlex is C# library to generate textual diffs. It targets netstandard1.0+.

About the API

The DiffPlex library currently exposes several interfaces and classes for generating diffs:

  • IDiffer (implemented by the Differ class) - This is the core diffing class. It exposes the low level functions to generate differences between texts.
  • ISidebySideDiffer (implemented by the SideBySideDiffer class) - This is a higher level interface. It consumes the IDiffer interface and generates a SideBySideDiffModel. This is a model which is suited for displaying the differences of two pieces of text in a side by side view.
  • IThreeWayDiffer (implemented by the ThreeWayDiffer class) - This interface provides three-way diff and merge functionality, enabling intelligent merging by comparing a base text with two modified versions to detect changes and conflicts.
  • UnidiffRenderer - A renderer class that generates unified diff (unidiff) format output compatible with Git, patch utilities, and other standard diff tools.

Examples

For examples of how to use the API please see the the following projects contained in the DiffPlex solution.

For use of the IDiffer interface see:

  • SidebySideDiffer.cs contained in the DiffPlex Project.
  • UnidiffFormater.cs contained in the DiffPlex.ConsoleRunner project.

For use of the ISidebySideDiffer interface see:

  • DiffController.cs and associated MVC views in the WebDiffer project
  • TextBoxDiffRenderer.cs in the SilverlightDiffer project

For use of the UnidiffRenderer class see:

  • Program.cs in the DiffPlex.ConsoleRunner project

Sample code

…

IDiffer Interface

…

IChunker Interface

csharp
public interface IChunker
{
    /// 
    /// Dive text into sub-parts
    /// 
    string[] Chunk(string text);
}

Currently provided implementations:

  • CharacterChunker
  • CustomFunctionChunker
  • DelimiterChunker
  • LineChunker
  • LineEndingsPreservingChunker
  • WordChunker

UnidiffRenderer Class

The UnidiffRenderer class provides functionality to generate unified diff (unidiff) format output, which is the standard format used by Git, patch utilities, and other diff tools.

csharp
// Static method for simple usage
string unidiff = UnidiffRenderer.GenerateUnidiff(
    oldText: "old content", 
    newText: "new content",
    oldFileName: "file1.txt",
    newFileName: "file2.txt"
);

// Instance usage with custom settings
var renderer = new UnidiffRenderer(contextLines: 5);
string unidiff = renderer.Generate(oldText, newText, "before.txt", "after.txt");

Key features:

  • Generates standard unified diff format compatible with Git and patch tools
  • Configurable number of context lines around changes
  • Support for custom file names in diff headers
  • Options to ignore whitespace and case differences

Example output:

--- before.txt
+++ after.txt
@@ -1,4 +1,4 @@
 Line 1
-Old line 2
+New line 2  
 Line 3
 Line 4

IThreeWayDiffer Interface

The IThreeWayDiffer interface provides functionality for three-way diffing and merging, which is essential for merge operations in version control systems or when comparing three versions of text.

…

Three-way diffing compares three versions of text:

  • Base text: The common ancestor or original version
  • Old text: One modified version (e.g., your changes)
  • New text: Another modified version (e.g., incoming changes)

This enables intelligent merging by identifying:

  • Changes unique to the old version
  • Changes unique to the new version
  • Changes made to both versions (conflicts)
  • Unchanged sections
…

ISideBySideDifferBuilder Interface

csharp
/// 
/// Provides methods that generate differences between texts for displaying in a side by side view.
/// 
public interface ISideBySideDiffBuilder
{
    /// 
    /// Builds a diff model for  displaying diffs in a side by side view
    /// 
    /// The old text.
    /// The new text.
    /// The side by side diff model
    SideBySideDiffModel BuildDiffModel(string oldText, string newText);
}

Sample Website

DiffPlex also contains a sample website that shows how to create a basic side by side diff in an ASP MVC website.

Sample Blazor App

DiffPlex includes a Blazor sample application demonstrating how to render textual diffs in modern Blazor applications. The sample showcases both server-side and client-side rendering capabilities with interactive diff visualization.

The Blazor components provide:

  • Interactive side-by-side diff rendering
  • Inline diff view mode
  • Unififf rendering
  • Three-way merge

To run the sample Blazor application:

bash
cd DiffPlex.Blazor
dotnet run

Windows app

There are 2 libraries for Windows app development. One is for Windows App SDK, another is for WPF and WinForms.

WinUI 3 Elements

DiffPlex WinUI library DiffPlex.Windows is used to render textual diffs in your app which targets to Windows App SDK.

csharp
using DiffPlex.UI;

And insert following code into the root node of your xaml file, e.g. user control, page or window.

xmlns:diffplex="using:DiffPlex.UI"
  • DiffTextView Textual diffs view element.

For example.

xaml
csharp
DiffView.SetText(OldText, NewText);

You can also customize the style. Following are some of the properties you can get or set.

…

WPF Controls

DiffPlex WPF control library DiffPlex.Wpf is used to render textual diffs in your WPF application. It targets .NET 9, .NET 8, .NET 6, .NET Framework 4.8 and .NET Framework 4.6.

csharp
using DiffPlex.Wpf.Controls;

To import the controls into your window/page/control, please insert following attribute into the root node (such as ``) of your xaml files.

xmlns:diffplex="clr-namespace:DiffPlex.Wpf.Controls;assembly=DiffPlex.Wpf"
  • DiffViewer Textual diffs viewer control with view mode switching by setting an old text and a new text to diff.
  • SideBySideDiffViewer Side-by-side (splitted) textual diffs viewer control by setting a diff model SideBySideDiffModel.
  • InlineDiffViewer Inline textual diffs viewer control by setting a diff model DiffPaneModel.

For example.

xaml
csharp
DiffView.OldText = oldText;
DiffView.NewText = newText;

You can also customize the style. Following are some of the properties you can get or set.

…

And you can listen following event handlers.

csharp

// Occurs when the grid splitter loses mouse capture.
public event DragCompletedEventHandler SplitterDragCompleted;

// Occurs one or more times as the mouse changes position when the grid splitter has logical focus and mouse capture.
public event DragDeltaEventHandler SplitterDragDelta;

// Occurs when the grid splitter receives logical focus and mouse capture.
public event DragStartedEventHandler SplitterDragStarted;

// Occurs when the view mode is changed.
public event EventHandler ViewModeChanged;

WinForms Controls

Windows Forms control of diff viewer is a WPF element host control. It is also included in DiffPlex.Wpf assembly. You can import it to use in your Windows Forms application. It targets .NET 8, .NET 6, .NET Framework 4.8 and .NET Framework 4.6.

csharp
using DiffPlex.WindowsForms.Controls;

Then you can add the following control in window or user control.

  • DiffViewer Textual diffs viewer control with view mode switching by setting an old text and a new text to diff.

For example.

csharp
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var diffView = new DiffViewer
        {
            Margin = new Padding(0),
            Dock = DockStyle.Fill,
            OldText = oldText,
            NewText = newText
        };
        Controls.Add(diffView);
    }
}

You can also customize the style. Following are some of the properties you can get or set.

…

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

C#

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言