Skip to content
Limited Edition DevTools

Units-LE

Extract every quantity with its unit, normalised to one base unit so two configs can be compared.

FreeOpen sourceMITNo network access

The command-line tool and its MCP server are written and tested. The VS Code extension is not written yet, so there is nothing to install from the Marketplace or Open VSX — those links appear here when it ships rather than before.

No editor in the loop? units-le mcp runs the same engine as an MCP server, so an agent can call extract_units over stdio, with no editor and no Node, and cargo install units-le puts the same check in a terminal. Every way to install it.

units-le config/
config/limits.toml:1:12  30000ms  30000 milliseconds
config/limits.toml:2:11  1GB  1000000000 bytes
config/service.yaml:1:10  30s  30000 milliseconds
config/service.yaml:2:7  500ms  500 milliseconds
config/service.yaml:3:9  512Mi  536870912 bytes
config/service.yaml:4:11  15%  0.15 ratio
config/service.yaml:5:6  500m  refused: ambiguous_unit
config/service.yaml:6:7  1.5KB  refused: fractional_bytes
8 quantities in 2 files
2 quantities refused, each with a reason
exit 0
A real run against a service.yaml and a limits.toml holding the same two settings. The summary above is what a person reads; the same findings go to stdout as JSON, which is what a script reads.

What Units-LE does

A number without its unit is not something you can compare. Units-LE finds every quantity in a tree and reports it twice: the text the document actually holds, and that value in one base unit. Four dimensions — duration in milliseconds, bytes, percent as a ratio, frequency in hertz. JSON, YAML, CSV, TOML, INI and dotenv are parsed; everything else is scanned as text, so a Kubernetes manifest or a Markdown table of limits yields its quantities rather than nothing. What it will not do is guess: a bare m is minutes in one config format, milliseconds in another and millicores in Kubernetes, so it comes back refused by name rather than resolved.

What people use it for

Reconcile two services

A timeout of 30s in one file and 30000 in another are the same number of milliseconds, and nothing about the text says so.

Catch the 7% nobody sees

1GB and 1GiB look identical at a glance and differ by seventy-three million bytes. The base value is where that shows.

Stop a build on an ambiguity

Strict mode exits non-zero if any quantity was refused, so a cpu value of 500m fails review instead of being guessed at.

Install Units-LE

Command lineComing soon

cargo install units-le

Not on crates.io yet — v0.1.0 builds from the repository today, and this command starts working the day it publishes. Follow the repository.

VS CodeComing soon

ext install nolindnaidoo.units-le

The extension is not written yet, so this id resolves to nothing on the Marketplace. It is the id it will take. Follow the repository.

Cursor / VSCodiumComing soon

cursor --install-extension OffensiveEdge.units-le

Same again for the forks, which resolve Open VSX rather than the Marketplace. Follow the repository.

Zed

units-le mcp

Works in Zed today — add the command above as a custom MCP server from the agent panel, and extract_units appears in its tool list. There is no one-click listing in Zed's extension registry yet.

AI agents

units-le mcp

Runs Units-LE's engine as an MCP server over stdio, so an agent can call extract_units with no editor and no Node. The binary is the server — there is nothing else to install.

Where it ships

One engine, 6 places to get it. The ids differ by registry — copy the one for the editor you use.

Where Units-LE lives

The other 15

Extract string values from JSON, YAML, CSV, TOML, INI, and .env — for i18n.

Extract numeric values from JSON, YAML, CSV, TOML, INI, and .env.

Pull every file path out of JS/TS imports, JSON, HTML, CSS, TOML, CSV, and .env files.

Extract and analyze colors from CSS, SCSS, LESS, Stylus, HTML, JS/TS, and SVG.

Extract URLs from documentation, configs, and code.

Extract date and time data from logs, configs, and code.

Find every UUID, ULID, NanoID, ObjectId and Snowflake, and decode the time inside it.

Find every IP address, CIDR block and MAC address in a tree, normalized and classified.

Find, test, and validate the regular expressions in any file — match reports and built-in ReDoS screening.

Check whether a page is actually scrapeable before you burn hours debugging.

Find where the same dependency is constrained differently across a repository’s manifests.

Audit translation catalogues for missing keys, placeholder drift and structural mismatches.

Detect and sanitize credentials, tokens, API keys, and private keys locally — before you commit.

Spot missing keys across your .env files — automatic checks, a status bar counter, and a markdown report.

Find the Unicode that hides meaning — Trojan Source controls, invisibles, homoglyphs, mixed scripts.