.NET 6.0 .NET Standard 1.6 .NET Framework 4.0
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package --version 2.9.0
NuGet\Install-Package -Version 2.9.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="" Version="2.9.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add --version 2.9.0
#r "nuget:, 2.9.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.
// Install as a Cake Addin
#addin nuget:?

// Install as a Cake Tool
#tool nuget:?


icu-dotnet is the C# wrapper for a subset of ICU.

ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications. ICU is widely portable and gives applications the same results on all platforms and between C/C++ and Java software.

NuGet version ( Build, Test and Pack


This library provides .NET classes and methods for (a subset of) the ICU C API. Please refer to the ICU API documentation. In you'll find classes that correspond to the C++ classes of ICU4C.

Although not strictly required it is recommended to call Icu.Wrapper.Init() at the start of the application. This will allow to use from multiple threads (c.f. ICU Initialization and Termination). Similarly, it might be beneficial to call Icu.Wrapper.Cleanup() before exiting.

Sample code:

    static class Program
        public static void Main(string[] args)
            // Will output "NFC form of XA\u0308bc is XÄbc"
            Console.WriteLine($"NFC form of XA\\u0308bc is {Icu.Normalizer.Normalize("XA\u0308bc",


To build the current version of icu-dotnet you'll need .net 6.0 installed.

icu-dotnet can be built from the command line as well as Visual Studio or JetBrains Rider.

Windows and Linux

You can build and run the unit tests by running:

dotnet test source/


icu-dotnet depends on libc dynamic libraries at run time. If running within Docker, you may need to install them, for example:


# Install system dependencies.
RUN apt-get update \
    && apt-get install -y \
        # dependency:
        libc6-dev \
     && rm -rf /var/lib/apt/lists/*


ICU versions


icu-dotnet links with any installed version of ICU shared objects. It is recommended to install the version provided by the distribution. As of 2016, Ubuntu Trusty uses version ICU 52 and Ubuntu Xenial 55.


Rather than using the full version of ICU (which can be ~25 MB), a custom minimum build can be used. It can be installed by the Icu4c.Win.Min nuget package. The full version of ICU is also available as Icu4c.Win.Full.Lib and Icu4c.Win.Full.Bin.

What's in the minimum build
  • Characters
  • ErrorCodes
  • Locale
  • Normalizer
  • Rules-based Collator
  • Unicode set to pattern conversions


  • make sure you added the nuget packages and Icu4c.Win.Min (or Icu4c.Win.Full).
  • the binaries of the nuget packages need to be copied to your output directory. For this happens by the assembly reference that the package adds to your project. The binaries of Icu4c.Win.Min are only relevant on Windows. They will get copied by the Icu4c.Win.Min.targets file included in the nuget package.

The package installer should have added an import to the *.csproj file similar to the following:

<Import Project="..\..\packages\Icu4c.Win.Min.54.1.31\build\Icu4c.Win.Min.targets"
    Condition="Exists('..\..\packages\Icu4c.Win.Min.54.1.31\build\Icu4c.Win.Min.targets')" />


We love contributions! The library mainly contains the functionality we need for our products. If you miss something that is part of ICU4C but not yet wrapped in, add it and create a pull request.

If you find a bug - create an issue on GitHub, then preferably fix it and create a pull request!

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp1.0 was computed.  netcoreapp1.1 was computed.  netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard1.6 is compatible.  netstandard2.0 was computed.  netstandard2.1 was computed. 
.NET Framework net40 is compatible.  net403 was computed.  net45 was computed.  net451 is compatible.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen30 was computed.  tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on

Package Downloads
SIL.WritingSystems The ID prefix of this package has been reserved for one of the owners of this package by

SIL.WritingSystems contains classes for managing and persisting writing systems using the Locale Data Markup Language (LDML) format. This library also contains classes for processing IETF (BCP-47) language tags and accessing the SIL Locale Data Repository (SLDR).

SIL.Windows.Forms.Keyboarding The ID prefix of this package has been reserved for one of the owners of this package by

The SIL.Windows.Forms.Keyboarding library provides cross-platform functionality for keyboard selection and switching in Windows Forms applications. Currently, this library supports system and Keyman keyboards on Windows, and X keyboard extension (XKB) and Intelligent Input Bus (IBus) keyboards on Linux.


Dll for use by third party applications needing to access Paratext's data. Compatible with SIL.Lib 12.0.x (required). Backwards compatible with data from Paratext 8.0 and 9.x. NOTE: This version of ParatextData is built using a AnyCPU configuration, but certain projects will not open correctly when run as 32-bit because of dependencies on native 64-bit libraries.


Library for working with Glyssen project data, including scripts and casting


SIL.Core.dll, SIL.WritingSystems.dll, SIL.Scripture.dll

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.9.1-beta.1 729 2/15/2023
2.9.0 28,656 2/15/2023
2.8.1 54,198 7/8/2022
2.8.0 2,081 6/24/2022
2.7.1 57,828 3/4/2021
2.6.0 151,259 9/27/2019
2.5.4 39,812 1/9/2019
2.5.3 1,295 12/17/2018
2.5.2 7,239 12/10/2018
2.5.0 2,164 11/27/2018
2.4.0 1,459 10/24/2018
2.3.4 8,238 8/27/2018
2.3.3 3,171 7/3/2018
2.3.2 20,456 3/14/2018
2.3.0 4,099 2/28/2018
2.2.0 2,191 9/29/2017
2.1.0 2,085 3/17/2017
2.0.1 14,305 12/19/2016

Changes since version 2.8.1

- Support .net 6.0

- Fixed crash in `Wrapper.Cleanup` (#176)

See full changelog at