Autofill Vault stores your name, address, education and logins once — then fills any form on any site with one click. No server. No sign-up. No cloud. Everything stays in your browser, on your machine.
Built for anyone who lives in forms: job applications, checkouts, onboarding flows, the same five fields over and over.
Hit the toolbar button or Alt+Shift+F and every matching field on the page fills at once. Filled fields flash blue so you can see exactly what happened.
It doesn't guess on field names alone. It scores each input on its autocomplete token, native type, label, placeholder and your own keywords — then fills the best match.
Personal, Address, Education, Professional — plus any category you add. Rename, recolour, drag-reorder, inline-edit. It autosaves as you type.
Save site / username / password and fill login forms — even multi-step ones, by finding the username field nearest the password input in document order.
All data lives in chrome.storage.local on this profile only. No telemetry, no network calls, no account. Export an encrypted-free JSON backup whenever you want.
Glassmorphism, an animated aurora, copy-to-clipboard on every field, and keyboard shortcuts. The kind of internal tool you'd actually enjoy opening.
The interesting engineering is the bit nobody sees: scoring fields, and convincing React it filled them itself.
For each input it reads name, id, placeholder, aria-label, the linked <label>, data-testid and the autocomplete token — then normalises them into one searchable string.
An autocomplete token match scores 100, a native type="email" scores 60, an exact label/synonym hit 25–50. The highest-scoring vault field above a threshold wins.
Setting el.value doesn't update React/Vue state. So it calls the native value setter on the prototype, then dispatches real input/change events — exactly like a human typing.
Fields you've already typed into are skipped. <select> dropdowns are matched by option value or visible text. Then a toast tells you how many fields it filled.
// el.value = "…" won't update React's state. // Call the prototype's native setter instead. function setNativeValue(el, value) { const proto = Object.getPrototypeOf(el); const desc = Object.getOwnPropertyDescriptor(proto, "value"); if (desc && desc.set) desc.set.call(el, value); else el.value = value; } function fireEvents(el) { el.dispatchEvent(new Event("input", { bubbles: true })); el.dispatchEvent(new Event("change", { bubbles: true })); }
No framework, no build step, no dependencies. Just the platform — which is exactly why it stays fast and easy to audit.
common.js runs in pages, content scripts and the worker alike.color-mix, glass blur, an animated aurora and theming via custom properties.I'm Charan — an AI & automation engineer in Bangalore. I built production LLM systems (one of them a Springer-published model that reads chest X-rays), and before that wrote real-time control code for jet engines at DRDO. This is the small tool I built for myself between the big ones.
I'm open to interesting work and good conversations. Tell me what you're building, or just say hi.