LipiConverter v2.0.1: Now the Best Unicode-to-Preeti Converter Out There

LipiConverter 2.0.1 release graphic with blue number keys and Nepali numerals

If you've ever worked with Nepali typography, you know the pain. Preeti—the font that basically ran Nepali desktop publishing for two decades—doesn't actually store Unicode text. It stores a clever hack: a mapping of English keyboard keys to Devanagari glyphs, dressed up to look like Nepali when you view it in the right font. The moment you copy that text somewhere else, try to search it, or read it aloud with a screen reader, the illusion falls apart.

That's the exact problem LipiConverter exists to solve: converting cleanly between Preeti and Unicode, in both directions, without losing the details that make Nepali text actually readable as Nepali text, not just decoration.

With v2.0.1, we tightened up two areas that matter more than they might seem at first glance: character conjunctions and number handling.

The Conjunction Problem

Devanagari script is built on conjuncts—consonant clusters that visually merge into single glyphs. क्ष, ज्ञ, and त्र aren't just two letters sitting next to each other; they're combined forms with their own visual identity. Preeti encodes these combinations using specific key sequences, and getting the order of pattern matching right is everything. Match a simpler pattern before a more complex one that contains it, and you end up with a broken, half-formed cluster instead of the correct glyph.

In this update, we re-audited the conjunct matching order, making sure complex clusters like न्द्व, न्छ, and ष्णु get matched before their simpler sub-patterns steal the match. It sounds like a small technical detail. In practice, it's the difference between text that renders correctly and text that looks almost right—which, in a script like Devanagari, is often worse than looking obviously wrong.

The Number Problem

Here's a quirk of Preeti that trips up almost everyone at some point: the plain number row on your keyboard doesn't type numbers. It types Devanagari consonants. Press “6” in Preeti and you get ट, not 6. Want an actual numeral to show up? You need Shift—the symbol row is what maps to Devanagari digits.

That means a converter has to walk a fine line. On one hand, plain digit keys are doing real work as letters—ट, ठ, ड, ढ, and ण are some of the most common consonants in the language, and they happen to live on the number row. Blindly treating every digit as “just a number” would mangle huge amounts of ordinary Nepali text. On the other hand, sometimes a “1” really is just a 1—a phone number, a date, or a price—and forcing it through letter conversion produces nonsense.

Our fix handles this in two ways, depending on the conversion direction:

Unicode → Preeti

There is no ambiguity to begin with. A literal digit typed in Unicode text can only mean a number; it is never a stand-in for a Devanagari letter. Now both plain digits and Devanagari numerals convert consistently to the correct Preeti numeral keys, ensuring they render properly as Nepali numerals wherever the Preeti font is applied.

Preeti → Unicode

The default behavior remains untouched, since changing it would break ordinary text. But v2.0.1 adds an opt-in mode for cases where the source is genuinely numeric—no more guessing and no collateral damage to real words.

Why This Kind of Fix Matters

None of this is flashy. There's no new feature to screenshot and no UI to show off. But this is the actual work of building a typing and conversion tool for a script with this much internal complexity: finding the edge cases where a clever hack from the pre-Unicode era collides with real-world text, and closing the gap without breaking everything else in the process.

LipiConverter's goal has always been simple: make Nepali text portable, searchable, and correct—whether it started life in a decades-old Preeti document or as fresh Unicode input. v2.0.1 is another step toward that, and there's more in the pipeline.

If you hit an edge case we haven't caught yet, we want to hear about it. That's exactly how fixes like this one happen.