🦥 Slow and steady form filling

Type it once.
Ditto fills every form after that.

A Chrome extension that fills any web form from your private profile, using Gemma 4 running on your own computer through Ollama. Job portals, bank KYC, clinic intake, rental applications, college forms. Your passport number never leaves your laptop.

Open source (MIT) · open-weight model (Apache 2.0) · no account, no cloud, no subscription

Ditto filling a bank account opening form field by field
A real 26-field bank form, filled by Gemma 4 E4B on a laptop CPU (sped up).

Browser autofill gives up

It knows your name and email. It has no idea what "Father's / Spouse's Name", "Aadhaar No. (last 4 digits only)" or "Name as per PAN, in BLOCK LETTERS" means.

Cloud AI fillers want your ID

To fill a KYC form with ChatGPT you'd paste your PAN, passport and address into someone else's server. Every time.

Ditto reads the form like you do

A small open model reads every label in context, so a "Name" under Nominee details gets your mother's name, not yours.

How it works

  1. Teach it once, lazily. Paste your resume or an old form into Ditto's profile page and Gemma pulls out the facts. Or just fill one form by hand and click Remember what I typed.
  2. Press Alt+Shift+. on any form (or click the Ditto button). Gemma reads the labels and sections, and fields fill one by one, at sloth speed, while you sip your chai.
  3. Glance at the colours, then submit it yourself. Green = from your profile. Amber = please check. Grey = needs you.
  4. It gets lazier over time. Every answer you type teaches it, and a form it has seen before fills in under a second.
Ditto on a React job application
Works with React apps (job portals); React's own state gets every value.
Ditto profile page
Your profile is a plain list of facts stored only in this browser.

Honest numbers

I built five realistic forms (a React job application, an old table-layout bank KYC form, a clinic intake, a placeholder-only rental form and a dark-mode hackathon sign-up) with traps: nominee sections, BLOCK LETTERS, "last 4 digits only", consent boxes, essay questions and fields the profile simply can't answer. Then an automated test drove the real extension through all of them.

FormFieldsRightWrong (shown green)First fillSame form again
Job application (React)2828050 s0.1 s
Bank KYC (table layout)2626054 s0.1 s
Clinic intake2323045 s0.1 s
Rental application1816027 s0.1 s
Hackathon sign-up1919026 s0.1 s
Total114112 (98.2%)0202 s0.4 s

"Right" counts fields filled correctly and fields correctly left empty. Gemma 4 E4B (Q4) on an Intel Core Ultra 5 laptop, CPU only. Full per-field report in the repo.

How small can the sloth be? The smaller Gemma 4 E2B scored 104/114, but 8 of its mistakes were shown green: it put the current address into the Permanent address section. Real facts in the wrong place can't be caught by a tripwire, so Ditto prefers E4B.

What Ditto will never do

Install (5 minutes)

  1. Install Ollama, then run ollama pull gemma4:e4b (about 6 GB; use gemma4:e2b on 8 GB machines).
  2. Download ditto-extension.zip and unzip it (or clone the repo).
  3. Open chrome://extensions, switch on Developer mode, click Load unpacked and pick the unzipped folder.
  4. On the profile page that opens, paste your resume or load the demo person, Meera.
  5. Open any form (or the demo forms) and press Alt+Shift+. (Alt, Shift and the full-stop key), or click the Ditto toolbar button.

Works in Chrome, Edge, Brave and other Chromium browsers. No Ollama settings to change: Ditto handles the connection itself. If another extension already uses Alt+Shift+., Chrome leaves Ditto without a shortcut; Ditto's popup will say so and link you to the page where you can pick one.

Why an open model?

Forms are where we hand over the most sensitive facts we have: ID numbers, addresses, health conditions, family members. An open-weight model running locally is the only way I'd trust a robot with them. It works offline, costs nothing per form, can't be switched off or repriced, and anyone can read every line of the code that touches their data.