I built an open-source text engine for Unity with full Unicode 17.0 support - 3-21x faster, 150+ languages, Arabic, Hebrew, Hindi, Thai, emoji

I was struggling with the built-in text solution in Unity - no proper
Arabic/Hebrew/Hindi support, no emoji, font atlases causing git conflicts,
poor performance. Couldn’t find anything that actually solves this properly,
so I built my own text engine from scratch

UniText uses HarfBuzz + FreeType (same stack as Chrome and Firefox),
passes 891,757 official Unicode conformance tests, and runs 3-21x faster
with zero GC allocations. 150+ languages, full BiDi, native color emoji
from system fonts

It’s free and open source - I need real feedback from real projects
before going further with it

GitHub: GitHub - LightSideMeowshop/unitext: Text engine for Unity that correctly renders every writing system — Arabic, Hebrew, Hindi, Thai, CJK, emoji, and 150+ others. Built on HarfBuzz, the same shaping engine used by Chrome, Firefox, Adobe InDesign, and Android. 3-21× faster than TextMeshPro

Docs: UniText — Industrial Unicode Text Engine for Unity

2 Likes

looks amazing!

is there any catch/downside? i mean why does it have so good features and performance : )

Thank you so much​:heart: No real catch honestly - it’s just a lot of work under the hood. I’ve been obsessing over text rendering for a while, so most of the “magic” is just time spent solving annoying edge cases one by one
The main downside is that it’s not TMP - meaning no huge community, fewer tutorials, and if something breaks you’re kinda stuck with me fixing it lol. But that’s about it

1 Like

It looks really good!

I’ve been increasingly annoyed with font handling in TMP, so I’m looking forwards to trying out this and see if it’s less of a hassle.

1 Like

Thank youuu​:smiling_face_with_three_hearts: Font handling was one of the main pain points that pushed me to build this in the first place. Would love to hear how it goes for you - feel free to open an issue if anything feels off

2 Likes

This is incredible work. We do tons of font processing for 43 languages, and have some many fixes and hacks for TMPro to function.
I will be testing out UniText as our main system here shortly!

I have a question after poking around a bit. How can I generate fonts that have bold, italic, etc versions of that font? (Example - If I specifically want to generate NotoSansBold characters in my NotoSansRegular font)

This is useful for example in the case of NotoSansArabic, if you use a bold rule on the regular font, we want it to render using the NotoSansArabicBold characters so it shows correctly, without changing the entire font asset to NotoSansArabicBold. This was something TMPro supported and was very useful.

Here is the feature in TMPro I’m referencing:

1 Like

Really interesting project. I wanted to test it and built a small comparison between TMP and UniText (1.0.0), where you can easily see the ZWJ issue described: WebGL Emoji/Text Comparison.

UniText 1.0.0 does not support InputFields and such, so I guess only v2 is an option for real projects. I still like that you put v1 out for anyone to test.

1 Like

btw. I just tried your web demo
(I guess this is unitext 2.0?) and noticed that on MacOS with Firefox the emoji have leaking textures from other emoji (see e.g. Food or Nature column).

On Chrome this looks fine (Apart from aliasing artifacts at the edge of the emoji (e.g. Faces).

Tested with MacOs 26.4.1 with Firefox 149.0.2.