A browser extension for Chrome and Firefox that saves, restores, and exports form data so you never lose what you've typed.
You're halfway through a long job application, government form, or survey. Your browser crashes, the session times out, or the page auto-reloads. Everything you typed is gone.
Browsers offer autofill for common fields like name and email, but they don't help with free-text fields like "describe your experience" or custom form inputs.
- Save all form field data on any page with a single click
- Restore saved data back into the form after a reload or crash
- Export snapshots as Markdown files in a Q&A format (question/label + your answer)
- Auto-save form data at a configurable interval (opt-in)
- Badge count shows how many saved snapshots exist for the current page
Recall captures each field's label and value, stores everything locally in your browser (nothing is sent to any server), and fires the right DOM events when restoring so that JavaScript frameworks (React, Vue, Angular) pick up the changes.
- mise for toolchain management
mise install
npm install# Build for both browsers
npm run build
# Build for a specific browser
npm run build:chrome
npm run build:firefoxBuild output goes to dist/chrome/ and dist/firefox/.
npm testnpm run lint- Run
npm run build - Open
chrome://extensions/ - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the
dist/chrome/folder - Navigate to any page with a form and click the Recall icon in the toolbar
- Run
npm run build - Open
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on...
- Select the file
dist/firefox/manifest.json - Navigate to any page with a form and click the Recall icon in the toolbar
Alternatively, use the dev command which launches Firefox with the extension loaded and live-reloads on file changes:
npm run devA local test page with various field types (text, email, date, select, textarea, checkboxes, radio buttons, etc.) is included in the repo:
open test-page.html- Open
test-page.html(or any page with a form) - Fill in some fields
- Click the Recall icon in the toolbar, then Save Current Form
- Reload the page
- Click Recall, then Restore on your saved snapshot — the fields refill
- Click Export to download a Markdown file with your answers
- Click Delete to remove a snapshot you no longer need
npm run packageProduces an installable .zip / .xpi in web-ext-artifacts/.
| Layer | File | Role |
|---|---|---|
| Background Service Worker | src/background.js |
Storage operations, badge updates, message routing |
| Content Script | src/content.js |
Form detection, snapshot capture, value restoration, auto-save |
| Popup | src/popup/ |
Snapshot list with save, restore, delete, export actions |
| Options | src/options/ |
Settings page (auto-save toggle and interval) |
| Shared Libraries | src/lib/ |
Storage helpers, field detection, markdown export |
Recall identifies form field labels using a 6-level priority chain:
- Explicit
<label for="id">association - Parent
<label>wrapping the input aria-labeloraria-labelledbyattribute- Preceding sibling text content
placeholderattributenameoridattribute as fallback
All data stays local in browser.storage.local. No accounts, no servers, no tracking. Snapshots are keyed by page URL (normalized, without query parameters) so each page has its own independent set of saves.
storage— persist snapshots and settings locallyactiveTab— access the current tab's URL and title when you interact with the extension