How vanity address generation works
A Bitcoin address is derived deterministically from a private key. Given any 256-bit random number (the private key), you can derive its corresponding public key with elliptic-curve multiplication, hash that public key with SHA256 followed by RIPEMD-160, encode the result with a format specifier and checksum, and arrive at a Bitcoin address. The relationship is one-way: you can always go from private key to address, but never from address back to private key.
A vanity address is simply a regular Bitcoin address where the resulting string happens to start with a chosen pattern — for example, bc1qcafe… or bc1qsats…. There is no special cryptographic trick involved. The generator creates a random keypair, derives the address, checks whether it starts with your chosen prefix, and if not, discards both keys and tries again. It is pure brute-force search.
The bech32 alphabet
Native SegWit addresses (starting with bc1q) use bech32 encoding, which uses a 32-character alphabet: qpzry9x8gf2tvdw0s3jn54khce6mua7l. The characters 1, b, i, and o are excluded to reduce transcription errors. This means not every string you might want is possible — you can search for cafe but not coin (the letter i is excluded).
The prefix you type in this tool is checked against the allowed character set before searching begins.
Expected search time
Each character of your prefix multiplies the expected search time by 32 (since there are 32 possible bech32 characters at each position). The expected number of attempts to find a match is:
- 1 char: ~32 tries — nearly instant
- 2 chars: ~1,024 tries — under a second
- 3 chars: ~32,768 tries — a few seconds
- 4 chars: ~1,048,576 tries — tens of seconds to a few minutes
- 5 chars: ~33,554,432 tries — potentially many minutes or longer
This tool caps the search at 10 million attempts to protect your battery and CPU. For prefixes longer than 4 characters, you may hit the cap without finding a match. In that case, try again — with randomness, you might get lucky earlier on a subsequent run.
Security implications
A vanity address is cryptographically identical to any other Bitcoin address. The private key that controls it is a standard secp256k1 private key. There is nothing special or weaker about the cryptography — the only difference is that the address went through more attempts before one matched your prefix.
This runs entirely in your browser
All keypair generation happens in JavaScript running locally in your browser tab. The private key is never transmitted to any server. This tool has no back-end. You can disconnect from the internet before clicking Start and the generator will still work.
However, browser-generated keys come with the caveat that the quality of the random number generation depends on the browser’s crypto.getRandomValues() API, which is CSPRNG-backed on all modern browsers. Do not use this tool in a browser or environment you don’t trust.
Save the private key before you navigate away
Once you navigate away from the page, refresh, or close the tab, the private key is gone. There is no recovery. The tool does not store anything in localStorage — your key does not persist. This is by design: storing private keys locally creates different risks (browser extensions, storage access). The tradeoff is that you bear the responsibility of copying the key to a secure location immediately.
Do not fund the address until you have tested it
Before sending any meaningful amount to a vanity address, import the private key into a wallet (Sparrow Wallet and Electrum both support WIF key import), verify that you can generate the same address, and test the round trip: receive a small amount, then spend it back. Only after confirming that the private key controls the address should you use it for anything real.
Vanity addresses don’t hide your balance
A Bitcoin address being “pretty” or recognizable doesn’t make it more private — in fact, a distinctive address like bc1qsatoshi… is more memorable to an observer than a random-looking address. If privacy is a concern, use a fresh address for each receive rather than a memorable vanity address that can be used to link your transactions.
Use cases
Donation addresses. A memorable donation address (bc1qbuild…, bc1qopen…) is easier for supporters to recognize and verify than a random string. This is the most legitimate vanity-address use case — you’re the only one spending from it, so you bear the key-management burden yourself.
Identity and attribution. Some developers or public figures use a consistent vanity address as a public Bitcoin identity, similar to an ENS name on Ethereum. The same caveats around address reuse and privacy apply.
Learning and experimentation. Generating a vanity address is a hands-on way to understand the key → pubkey → hash → address derivation pipeline. Watching the counter increment and understanding why 4-character prefixes are slow makes the probabilistic nature of Bitcoin addresses concrete.
WIF format
The private key is exported in Wallet Import Format (WIF), which is the standard encoding for raw private keys in Bitcoin wallets. WIF is Base58Check-encoded with a 0x80 prefix byte (mainnet) and a 0x01 compression flag appended before encoding. Most wallets, including Sparrow, Bitcoin Core, and Electrum, can import a WIF key directly.
The hex version of the key is also shown for advanced users who need to work with raw bytes or use libraries that expect hex input.