An open-source auto typer for Google Docs, Word Online and anything else with a caret.
Types your text at a believable human pace — with rhythm, typos, corrections and breaks. No account, no server, no tracking.
Website · Install · How it works · Tests
Doccy is a Manifest V3 browser extension. You paste a draft into the popup, pick how fast and how sloppy the typing should be, click into your document, and press Start Typing. Doccy presses the keys for you, one at a time.
- Nine profiles, from a 15 wpm beginner to a 92 wpm expert — or set the five knobs yourself.
- Realistic mistakes: neighbouring keys, doubled letters, transposed pairs, dropped characters. Each one is noticed a beat late, backspaced and fixed.
- Pause and stop at any point. The text already typed stays where it is.
- Runs offline. There is no backend, no telemetry and no network code anywhere in the
extension. Your draft lives in
chrome.storage.localand nowhere else. - A plain-language pass ("Humanize") that strips chatbot padding from a draft, locally.
Doccy simulates typing — useful for screencasts and demos, accessibility setups, kiosks and editors where pasting is blocked, load-testing an editor, and moving a long draft into a browser-only document. It is deliberately not built to defeat anything: there is no AI-detector bypass and no "undetectable" mode, and the humanizer is a readability pass that reports every change it makes. If your school, journal or employer has rules about how work is produced, those rules still apply.
Doccy is not on the Chrome Web Store — you load it from source, so you can read everything you are running.
git clone https://github.com/Nickkk66/doccy.git- Open
chrome://extensionsin Chrome, Edge, Brave or any Chromium browser. - Turn on Developer mode (top right).
- Click Load unpacked and choose the
extension/folder from the clone. - Pin Doccy to the toolbar.
Firefox is not supported yet; the manifest is Chromium MV3.
- Open the document you are writing in and click where the text should go.
- Click the Doccy icon (or the Open Doccy button that appears on supported pages).
- Paste your text, pick a config, press Start Typing.
- Leave the tab in front. Pause or Stop whenever you like.
On Google Docs and Word Online, Doccy also injects a small launcher in the bottom-right corner so you can keep the panel open while it types.
Open the gear icon to edit the Custom profile.
| Setting | Range | What it does |
|---|---|---|
| Words per minute | 15–150 | Target speed, five characters to a word. Each keystroke is jittered around it. |
| Accuracy | 0–100% | How often a key lands correctly. Everything below 100% produces real slips and real corrections. |
| Correction speed | 0.1–10s | How long the typist takes to notice a mistake before fixing it. |
| Break frequency | 0–100% | How often typing stops between words. |
| Break durations | 0.1–10s | The range a break lasts. |
Saving the custom config switches the dropdown to Custom and stores it locally.
extension/
manifest.json MV3 manifest, Docs/Word content script, on-demand injection elsewhere
popup.html/.css/.js the UI — used twice: as the toolbar popup and as the in-page panel
content.js owns the typing session, hosts the in-page launcher and panel
background.js seeds defaults on install
lib/presets.js the nine profiles, the custom profile, clamping
lib/typer.js the engine: cadence, typos, corrections, breaks, pause/stop
lib/injectors.js editor adapters (Google Docs, contenteditable, input/textarea)
lib/humanize.js the local plain-language pass
website/ the static site (GitHub Pages)
tools/ icon generator, site build, tests
Three pieces worth knowing about:
The engine never touches the DOM. lib/typer.js drives an injector — an object with
insertText, backspace and newline. That is why the same engine runs the site's demo and
the test suite with no browser at all.
Google Docs needs its own adapter. Docs paints the document on a canvas; real keystrokes
land in a hidden contenteditable inside iframe.docs-texteventtarget-iframe. Doccy talks to
that element, dispatching a full key sequence plus execCommand('insertText'). Google changes
Docs often — if this breaks, please open an issue.
The session lives in the page, not the popup. Closing the popup does not stop a run; the popup reconnects to whatever the tab is doing when you reopen it.
node tools/test-engine.js # 28 checks: fidelity, pause/stop, profiles, humanizer
./tools/build-site.sh _site # assemble the website with the engine libs
python3 tools/make_icons.py # regenerate the PNG iconsThe test suite collapses setTimeout so a full typing run finishes instantly, then asserts the
property that matters: whatever slips the engine makes, the buffer must end up exactly equal to
the source text.
There are no dependencies, no build step for the extension, and no package.json — the folder you clone is the folder you load.
Doccy makes no network requests. It stores one key, doccy.state (your draft, chosen profile
and custom settings), in local extension storage. Uninstalling removes it. Permissions are
storage, activeTab and scripting, plus host access to Google Docs and Word Online so the
typing panel can appear there without a click.
MIT — see LICENSE.