Passphrase generator
Generate a random passphrase from a bundled list of 264 common English words (not the EFF/Diceware list; see src/wordlist.ts). Entropy is exactly words * log2(264) bits; words drawn with crypto.getRandomValues.
Runs on your device. The file is never uploaded.
Passphrase generator joins six random words with a hyphen by default and prints the phrase above its entropy, which at six words is 48.3 bits. The words come from src/wordlist.ts, 264 hand-compiled English words of three to ten letters. Capitalize uppercases every word rather than a random one, so it adds nothing to that figure.
Questions
How much entropy does a passphrase have?
Exactly the number of words times log2 of the list size. The list is 264 words, so each word is about 8.04 bits and the default of six words is about 48.3 bits. The tool prints that figure under the phrase. Raise the word count to raise it: ten words is about 80.4 bits.
Is this the EFF or Diceware wordlist?
No, and the tool is explicit about it. It uses a hand compiled list of 264 ordinary English words of 3 to 10 letters, bundled with the site so it works offline. The EFF and Diceware lists are separate published lists with far more entries, which means more entropy per word than you get here.
What are the options?
Three: words, which defaults to 6; separator, which defaults to a hyphen; and capitalize, which is off by default and uppercases the first letter of each word. Capitalising adds no entropy, since it is applied to every word rather than chosen at random.
Are the words picked fairly?
Yes. Each word is drawn with crypto.getRandomValues using rejection sampling on a 16-bit value, so every word in the 264-word list is equally likely. A plain modulo would have slightly favoured the earlier entries, which would make the printed entropy figure an overstatement rather than an exact count.
Can the same word appear twice?
Yes. Each draw is independent, so repeats happen, and that is exactly what the entropy figure assumes. Regenerating because a phrase looks repetitive is fine, but the phrase you rejected was no weaker than the one you kept, and rejecting by eye for long enough eats into the randomness you came for.