Jason Lamb .ME Some stuff I think is cool and interesting, you might too!

September 30, 2026

Inside a Browser Password Generator Experiment

Filed under Technology

A password generator has a tiny interface and some surprisingly important behavior behind it. The browser experiment provides a length control and options for uppercase letters, lowercase letters, numbers, and symbols.

It also has an option to exclude ambiguous characters. When someone has to read a value from one screen and type it into another, distinguishing the letters I and l is not always a fun recreational activity. Making the available character set explicit helps explain what the tool is producing.

The reviewed working copy generates values in the browser using Web Crypto’s random-value API. There is no server-side generation step in that file. That is a concrete implementation detail, not an automatic guarantee that every aspect of the generator has been independently audited.

One subtle point is that selecting a character class adds it to the available pool. It does not require every generated value to include at least one character from each selected class. A site with a strict composition rule may therefore need more than simply checking the matching boxes.

The repository also contains testing and working variants, so the distinction between a source copy and the currently deployed page matters. The hosted shortcut is /pw; the experimental files should not each be treated as a separate production release.

This project demonstrates how much clarity can fit into a small tool. The controls should describe what the code really does, and the description should avoid promising more than the implementation establishes. Even a single-button utility benefits from that discipline.

Open the hosted project · Explore the project on GitHub

Update history

These notes record article updates associated with repository changes. The original publication date is retained.

  • — Converted automated article narration to neutral third person and added public update history. No application functionality changed. GitHub source