Password Generator Chrome extension
Generate strong, configurable passwords and copy them to the clipboard without leaving the tab.
How to install
- Download and unzip the file.
- Open
chrome://extensionsand turn on Developer mode. - Click "Load unpacked" and pick the unzipped folder.
Source code (6 files)
manifest.json
{
"manifest_version": 3,
"name": "Password Generator",
"version": "1.0.0",
"description": "Generate strong, configurable passwords and copy them to the clipboard without leaving the tab.",
"icons": {
"16": "icons/icon.svg",
"48": "icons/icon.svg",
"128": "icons/icon.svg"
},
"action": {
"default_popup": "popup.html",
"default_title": "Password Generator",
"default_icon": {
"128": "icons/icon.svg"
}
}
}popup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Password Generator</title>
<link rel="stylesheet" href="popup.css" />
</head>
<body>
<header><h1>Password Generator</h1><p class="sub">Built with ManifestGo</p></header>
<main>
<div class="big" id="out">••••••••</div>
<label class="muted">Length <span id="len">16</span></label>
<input id="length" type="range" min="8" max="48" value="16" />
<div class="row"><button id="sym">Symbols: on</button><button id="num">Numbers: on</button></div>
<button class="primary" id="gen">Generate & copy</button>
</main>
<script src="popup.js"></script>
</body>
</html>
popup.css
:root { color-scheme: dark; }
* { box-sizing: border-box; }
body {
margin: 0;
width: 320px;
font-family: Inter, -apple-system, "Segoe UI", Roboto, sans-serif;
background: #1b1b1b;
color: #f2efe9;
}
header { padding: 14px 16px 8px; }
h1 { margin: 0; font-size: 14px; font-weight: 600; letter-spacing: -0.01em; }
p.sub { margin: 4px 0 0; font-size: 11px; color: #9a958d; }
main { padding: 10px 16px 16px; display: grid; gap: 10px; }
button {
font: inherit; font-size: 12px; font-weight: 600; cursor: pointer;
border: 1px solid #ffffff1f; background: #ffffff0d; color: #f2efe9;
border-radius: 10px; padding: 9px 12px; transition: background .15s ease;
}
button:hover { background: #ffffff17; }
button.primary { background: #34d399; border-color: #34d399; color: #101010; }
button.primary:hover { filter: brightness(1.08); }
input, select, textarea {
font: inherit; font-size: 12px; width: 100%; padding: 9px 10px; border-radius: 10px;
border: 1px solid #ffffff1f; background: #ffffff08; color: #f2efe9; outline: none;
}
input:focus, textarea:focus { border-color: #34d399; }
ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; max-height: 260px; overflow: auto; }
li { display: flex; align-items: center; gap: 8px; font-size: 12px; padding: 8px 10px; border-radius: 10px; background: #ffffff08; }
li span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row { display: flex; gap: 8px; }
.row > * { flex: 1; }
.big { font-size: 34px; font-weight: 700; text-align: center; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
.muted { font-size: 11px; color: #9a958d; }
popup.js
const out = document.getElementById("out");
const length = document.getElementById("length");
const lenLabel = document.getElementById("len");
const symBtn = document.getElementById("sym");
const numBtn = document.getElementById("num");
let symbols = true, numbers = true;
length.addEventListener("input", () => { lenLabel.textContent = length.value; });
symBtn.addEventListener("click", () => { symbols = !symbols; symBtn.textContent = "Symbols: " + (symbols ? "on" : "off"); });
numBtn.addEventListener("click", () => { numbers = !numbers; numBtn.textContent = "Numbers: " + (numbers ? "on" : "off"); });
document.getElementById("gen").addEventListener("click", async () => {
let set = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
if (numbers) set += "23456789";
if (symbols) set += "!@#$%^&*()-_=+[]{}";
const bytes = crypto.getRandomValues(new Uint32Array(Number(length.value)));
const pwd = Array.from(bytes, (b) => set[b % set.length]).join("");
out.textContent = pwd;
out.style.fontSize = pwd.length > 24 ? "16px" : "22px";
await navigator.clipboard.writeText(pwd);
});
icons/icon.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128"><rect width="128" height="128" rx="26" fill="#34d399"/><text x="64" y="90" font-family="Inter, Arial, sans-serif" font-size="66" font-weight="700" text-anchor="middle" fill="#ffffff">K</text></svg>README.md
# Password Generator
Generate strong, configurable passwords and copy them to the clipboard without leaving the tab.
## Install (unpacked)
1. Open `chrome://extensions`.
2. Enable **Developer mode**.
3. Click **Load unpacked** and select this folder.
## Files
- `manifest.json` — Manifest V3 configuration
- `popup.html` / `popup.css` / `popup.js` — toolbar popup UI and logic
- `icons/icon.svg` — source icon (rasterized to PNG on download)
More free templates
Tab Manager
See every open tab, jump to one instantly, or close it without leaving the popup.
Quick Notes
A always-there scratchpad that autosaves your notes and syncs them across your Chrome profile.
Pomodoro Timer
Focus timer with work and break cycles, running in the background with a desktop notification.