Open-source project
LightSideKittens/UniText avatar
LightSideKittens/UniText

UniText gives Unity a HarfBuzz based text engine for every script

First & Only Text Engine for Unity. Every language. Every emoji. Every style. Production-grade, extensible, high-performance, built on industry standards.Windows, macOS, Linux, Android, iOS, WebGL

713 stars50 forksC#MIT

At a glance

What is it?
UniText is an MIT licensed Unity package that renders text through HarfBuzz with automatic font fallback, full bidirectional support and native color emoji. It is a strong fit for games shipping localisation, and the free version is the core engine rather than the whole product.
Who is it for?
Adopt UniText if you ship a Unity game with right to left languages, mixed scripts or emoji and you have found that the built in text components cannot shape them properly. Do not adopt it expecting the full product, since the open source repository is the raw text engine core and the paid Folio tier carries the advanced features, and do not use it if you are on a Unity version below 2021.3.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 29 days ago.
What is it written in?
Mainly C#, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A text engine rather than another UI component

UniText supplies a common text model for labels, input fields, rich editors and virtualized documents, in Canvas UI and in world space. That is a wider scope than a label component, and it matters because a game UI is rarely one kind of text. You have static labels, editable fields, a chat log, an inventory description, a dialogue box and a store page, and they all need the same shaping and layout rules if they are to look like one product. The positioning is explicit: the repository is the free raw text engine core, while a paid Folio tier sits alongside it, and there is also a listing on the Unity Asset Store. The audience is Unity developers with localisation obligations, particularly games shipping Arabic, Hebrew, Hindi, Thai or CJK, where the built in components were never designed to shape complex scripts. The broader LightSide ecosystem provides shared infrastructure for authoring and runtime work, with common implementations for paints, gradients, textures, filters, state, clocks, input, geometry, GPU infrastructure and editor tools, and text, shapes and Lottie sharing the same shaders and batching.

Shaping is delegated to HarfBuzz, the engine behind browsers

The technical centre of the project is that it does not implement text shaping itself. UniText is built on HarfBuzz, the same shaping engine behind Chrome, Firefox, Adobe InDesign and Android. That single decision determines what the package can claim. Arabic joining, Indic reordering, Thai positioning and the complex cluster rules of scripts like Devanagari are exactly the problems HarfBuzz was written to solve, and reimplementing them badly is the reason many game engines produce mangled text. The conformance claim on the project page is that 891,757 Unicode conformance tests passed with zero failures, which is a specific and checkable statement about the shaping layer rather than a general claim about rendering quality. Bidirectional text follows UAX #9, so mixed left to right and right to left content with numbers and punctuation is handled by the standard algorithm rather than by heuristics. The native plugin also embeds FreeType for font rasterisation, Blend2D for the two dimensional drawing, Zstandard for compression, zlib and libpng, and the default fonts are Noto Sans, Noto Sans Arabic and Noto Sans Hebrew.

One component, automatic font fallback, native emoji

The feature table is compact and each row claims something concrete. Every language is handled by one component with automatic font fallback, so a string that mixes scripts does not need a separate label per script. Full bidirectional support covers mixed direction content with numbers and punctuation. Native color emoji arrive through system fonts, with ZWJ sequences, skin tones and flags, and the claim is zero extra build size because nothing is bundled for it. Extensible markup provides more than 15 built-in modifiers, custom parse rules and shared configurations, which is how you get styling, colors, links and lists in the same pipeline. Interactive text gives clickable and hoverable regions with typed events and a highlight system, so a rich text document can be interactive without each link being a separate GameObject. The word Font Memory Mapping appears in the capability list, and the repository topics name the target ground: bidirectional, rtl, canvas, textmesh, textmeshpro, ugui, unicode, unity-package, tools. The relationship to Unity's own text components is therefore the obvious one: this sits alongside TextMeshPro and uGUI rather than inside them.

Installing the package and putting text on screen

Installation goes through Unity's own package manager rather than a download. Open Window > Package Manager, click the plus button and choose Add package from git URL, then enter the repository URL pinned to the 1.0.0 tag:

code
   https://github.com/LightSideMeowshop/unitext.git#1.0.0

Using the tag rather than the branch matters, since the default branch of the repository is itself named 1.0.0 and you want a fixed point for a shipped build. Once installed, the quick start is three steps. Select a GameObject with a RectTransform, add the UniText component from Add Component, and type text. In code the same thing looks like this:

csharp
var uniText = gameObject.AddComponent<UniText>();
uniText.FontStack = myFontStack;
uniText.Appearance = myAppearance;
uniText.Text = "Hello, World!";
uniText.Text = "Mixed: Hello עולם World"; // BiDi

The three assignments after the plain string are the interesting ones, because they are exactly the cases the built in components handle badly. The package manifest records the Unity requirement as 2021.3 and the dependency on com.unity.ugui, and the runtime dependencies are com.unity.ugui and com.unity.modules.ui at 1.0.0. The package is registered under the name media.lightside.unitext with the display name UniText, and the documentation lives in the Documentation/ folder of the repository with an online copy at unity.lightside.media.

Platform coverage is broad, and one version is the floor

The supported platform table covers Windows on x86, x64 and ARM64, macOS on x64 and Apple Silicon, Linux on x64, Android on ARMv7, ARM64, x86 and x64, iOS on ARM64, and WebGL 2.0. That list is a meaningful statement about a native plugin, because it means the same package ships in a desktop build, a mobile build and a browser build without the developer swapping text implementations per platform. The floor is Unity 2021.3, which is a hard constraint for anyone still on 2020 or earlier, and the package manifest is explicit that it is a Unity 2021.3 package. The architecture list is also worth reading for a specific reason: iOS is ARM64 only, Linux is x64 only, and WebGL is listed against 2.0 rather than a Unity version, so a Linux ARM build server or a 32 bit Windows target is not covered. The repository layout reflects the standard Unity package shape with Runtime, Editor, Plugins, Shaders, Resources and Defaults directories, plus a Samples~ folder, and the manifest registers five samples: Basic Usage, Emoji, Layout, Modifiers and Font Examples.

The licence picture has two layers and both need reading

UniText 1.0 is free and open source under the MIT licence, with the licence file at the repository root. That covers the package as distributed. The native plugin is a different matter, and the project keeps a Third-Party Notices.txt with the full licence texts. The bundled libraries are HarfBuzz under the Old MIT License, FreeType under the FreeType License, Blend2D under the Zlib License, Zstandard under BSD-3-Clause, zlib under the Zlib License, and libpng under the PNG Reference Library License. The default fonts, Noto Sans, Noto Sans Arabic and Noto Sans Hebrew, are under the SIL Open Font License v1.1, and the Thai word segmentation dictionary is derived from ICU under the Unicode License V3. None of these is a problem for shipping a game, and the FreeType and zlib style licences in particular are well understood in native plugin work, but the point stands that a game bundle carries more than the MIT grant. Font licensing is the layer to check yourself, because the default fonts are a starting point rather than a limit, and games that ship branded or licensed typefaces need their own permissions. A second point to check is the open source versus product split. The free repository is the raw text engine core, while the Folio offering is presented as the fuller product with features such as no fonts required and any style, so a team should establish which parts of the roadmap it actually needs before planning around this package.

Editorial conclusion

Adopt UniText if you ship a Unity game with right to left languages, mixed scripts or emoji and you have found that the built in text components cannot shape them properly. Do not adopt it expecting the full product, since the open source repository is the raw text engine core and the paid Folio tier carries the advanced features, and do not use it if you are on a Unity version below 2021.3. Before you commit, read the third party notices file because the native plugin embeds HarfBuzz, FreeType, Blend2D, Zstandard, zlib and libpng under their own licences, and confirm that your default font licensing, including the bundled Noto fonts under the SIL Open Font License, covers your distribution.

Frequently asked questions

How do I install UniText in Unity?

Open Window > Package Manager, click the plus button and choose Add package from git URL, then enter https://github.com/LightSideMeowshop/unitext.git#1.0.0. The package requires Unity 2021.3 and depends on com.unity.ugui and com.unity.modules.ui.

Does UniText support right to left and mixed direction text?

Yes. It is built on HarfBuzz, the shaping engine used by Chrome, Firefox and Android, and bidirectional text follows the UAX #9 algorithm, so mixed left to right and right to left content with numbers and punctuation renders correctly.

What licence is UniText released under?

UniText 1.0 is free and open source under the MIT licence. The native plugin also embeds HarfBuzz, FreeType, Blend2D, Zstandard, zlib and libpng under their own licences, the default Noto fonts are under the SIL Open Font License, and the Thai segmentation dictionary is derived from ICU.

Which platforms does the UniText package support?

Windows on x86, x64 and ARM64, macOS on x64 and Apple Silicon, Linux on x64, Android on ARMv7, ARM64, x86 and x64, iOS on ARM64, and WebGL 2.0.

How do I add text to a GameObject with UniText?

Select a GameObject with a RectTransform, add the UniText component from Add Component, and type text. From code, add the component with AddComponent<UniText>, then assign FontStack, Appearance and Text properties.

Official sources

  1. Issues
  2. License: MIT
  3. LightSideKittens/UniText on GitHub
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/lightsidekittens-unitext.svg)](https://hysenlabs.com/projects/lightsidekittens-unitext)

Was this useful?