Skip to content
Limited Edition DevTools

Unicode-LE

Find the Unicode that hides meaning — bidi controls, invisibles, homoglyphs, mixed scripts

FreeOpen sourceMITNo network access

No editor in the loop? npx -y unicode-le-mcp runs the same engine as an MCP server, so an agent can call detect_unicode_risks with nothing else installed, and cargo install unicode-le puts the same check in a terminal. Every way to install it.

Overview

What Unicode-LE does

Some characters are not what they look like. Unicode-LE screens the active file, or the whole workspace, for the ones that hide meaning: the bidirectional controls behind CVE-2021-42574, zero-width and other invisibles, homoglyphs, words no single script accounts for, text that is not in Normalization Form C, and the spaces that are not the space. The report names each finding by line, column and codepoint — never the character itself, because a report that pasted one raw would reorder the screen of whoever read it — and, in JSON, YAML, TOML and the other config formats, the key it sits under. It rewrites nothing. A file plainly written in another script is refused for the homoglyph checks rather than judged by them, which is what lets the screen stay on in a translated codebase instead of being switched off for noise.

What people use it for

  • Review for Trojan Source

    A right-to-left override makes the code a reviewer reads differ from the code that runs. One command names every one in the file.

  • Screen for forged names

    A Cyrillic character sitting in an otherwise Latin word is a finding; a word written wholly in Cyrillic is not.

  • Explain the string that never matches

    A zero-width space between two values a hash calls different and a person calls identical, reported at its key.

Palette

5 commands

Open the command palette and type the name. Nothing is bound to a shortcut by default — the editor's keymap is the user's, not ours.

unicode-le.showPositions: Show the line and column of each finding. On by default.

  • Detect Unicode Risksunicode-le.detect
  • Scan Workspace for Unicode Risksunicode-le.scanWorkspace
  • Scan Folder for Unicode Risksunicode-le.scanFolder
  • Open Settingsunicode-le.openSettings
  • Help & Troubleshootingunicode-le.help

Install

Install Unicode-LE

VS Code

ext install nolindnaidoo.unicode-le

Open Quick Open (Cmd/Ctrl+P) and paste.

Cursor / Windsurf

cursor --install-extension nolindnaidoo.unicode-le

Cursor, Windsurf, VSCodium and the other VS Code forks pull from Open VSX. The id is the same as on the Marketplace.

AI agents

npx -y unicode-le-mcp

Runs Unicode-LE's engine as an MCP server, so an agent can call detect_unicode_risks with no editor involved. VS Code 1.101+ needs nothing — the extension registers it for you.

Channels

Where it ships

One engine, 5 places to get it. Copy the one for the editor you use.

Links

Where Unicode-LE lives

The family

The other 16