Your browser remembers your downloads. Now remember your uploads.
Remember what you attached, where you attached it, and when.
Find the exact saved file later—even if the original has been moved or deleted.
Website & demo · Features · Privacy · Development · Report a bug
Explore the project
The resume you attached last week. The assignment you uploaded before the deadline. The application document you edited afterward.
Upload History gives those attachments a searchable home. Once you enable recording, it remembers files selected or dropped into supported website upload controls, along with the website, page title, and time. With Save copies enabled, you can recover an independent copy of the file you attached.
Free and open source. No account, no analytics, no cloud sync, and no files sent to us.
Requires desktop Chrome 148 or newer.
- Install the extension and pin it to your toolbar.
- Open Upload History, choose Save copies or Logs only, and grant website access.
- Attach a file as usual, then open the extension to find its record and recover its saved copy.
Recording starts only after you enable it and grant access. You can pause it or change recording preferences for individual websites at any time.
Tip
Try it with a sample file first. Attach it on a supported website, wait for Copy saved, then download it from Upload History to see recovery in action.
| Feature | What you can do |
|---|---|
| Remember attachments | See the filename, website, page title, and time in one history. |
| Recover exact copies | Download a saved attachment even after moving or deleting the original. |
| Find files quickly | Search by filename, website, or page title; filter by website, date, or status. |
| Track different versions | Keep separate records and saved copies for attachments with the same filename. |
| Choose what gets saved | Save copies, log file details only, or disable recording for individual websites. |
| Keep what matters | Mark important records as Keep, adjust retention, or delete records whenever you want. |
| Know what's available | See whether a copy is saved, still saving, or unavailable—and why. |
Attach → Remember → Recover
Use website upload controls as usual. Upload History records supported file selections and drops in the background. Open the popup for recent attachments, or search the full archive when you need an older file.
| Recording mode | What's stored |
|---|---|
| Save copies | File details and an independent file copy, within your configured limits. |
| Logs only | File details, without reading or saving file contents. |
| Off | No new records for that website. |
Upload History works with standard file pickers, dynamic upload controls, file drops, and accessible embedded uploaders. It accepts any file type exposed through a supported control, subject to size and storage limits.
Compatibility depends on the website. Cloud-document pickers, some custom uploaders, and browser-restricted pages may not expose files the extension can capture. Incognito and mobile browsers are not supported.
See the compatibility guide for coverage and the testing guide to try a Google Forms workflow.
| Setting | Default | Adjustable range |
|---|---|---|
| Maximum saved file | 50 MiB | 1–50 MiB |
| Local archive budget | 500 MiB | 50–2,000 MiB |
| New-record retention | 90 days | 1–3,650 days, or until deleted |
Recording preferences save immediately. Retention, maximum file size, and storage budget apply when you click Save settings. Retention changes apply to new records; records marked Keep stay until you delete them.
Existing copies are not automatically deleted to make room. Files that cannot be saved receive a history record with an explanation when browser storage and record limits allow. Recovery is available for successfully saved copies still retained in your archive.
Your files and history stay in your current Chrome profile. Upload History has no backend, analytics, or developer-operated upload service.
- You choose when to record. Enable recording after consent, pause it, or exclude websites.
- You control deletion. Remove individual records or clear your archive.
- Copies are encrypted locally. File contents and archive metadata use AES-GCM encryption.
- URLs are trimmed. Credentials, query strings, and fragments are removed before storage.
The encryption key lives in the same browser profile, without a separate password. Someone with access to that profile may access the archive. Preferences and some storage-management fields are not encrypted. Uninstalling the extension or deleting its browser data can remove saved copies, so keep separate backups of important files.
Privacy policy · Security model and reporting
Can I recover a file after deleting the original?
Yes, if Upload History successfully saved a copy and that copy is still in your archive. Moving, renaming, editing, or deleting the original does not change an already saved copy.
Can it find attachments from before I installed it?
No. Recording begins after you enable it and grant website access. Upload History cannot reconstruct earlier attachments.
Does my history sync between computers?
No. Your archive stays in the Chrome profile where it was recorded. There is no account or cloud sync.
Why is there a record without a saved copy?
The website may be set to Logs only, the file may exceed your size limit, or storage may be unavailable. Open the record to see its status and explanation. A details-only record cannot be used to recover file contents.
How do I report an uploader that doesn't work?
Use the upload compatibility report. Include your Chrome and extension versions, the website, and whether you used a file picker or drag and drop. Use harmless sample files and remove private details.
Built with TypeScript, React, WXT, and Manifest V3, using IndexedDB and Web Crypto for local storage.
Use Node.js 24 (recommended) and desktop Chrome 148 or newer.
git clone https://github.com/Haoming9527/Upload-History.git
cd Upload-History
npm ci
npm run build- Open
chrome://extensionsand enable Developer mode. - Click Load unpacked and select
.output/chrome-mv3inside the project. - Open the extension and complete onboarding.
After rebuilding, click Reload on the extension's card and refresh your website tabs.
npm run dev # Start development mode
npm run check # Structure, types, unit tests, and extension/site builds
npx playwright install chromium
npm run test:e2e # Run browser scenarios
npm run zip # Package the extension for distributionAutomated checks cover capture, recording policies, encrypted storage, byte-for-byte recovery, browser restarts, and settings persistence. The browser harness pregrants website access in a separate test manifest; native permission prompts and real-platform compatibility also need manual verification.
Architecture · Testing · Release guide · Website development
You don't have to write code to help. Test an upload flow, improve the docs, suggest a feature, or contribute a fix.
| Want to help? | Start here |
|---|---|
| Something isn't working | Report a bug |
| A website's uploader isn't recorded | Report a compatibility issue |
| Have an improvement in mind | Browse issues and suggest an idea |
| Ready to contribute code or docs | Read the contribution guide |
| Want to meet the contributors | View contributors |
Use sample files and sanitized details in public reports. For sensitive vulnerabilities, follow SECURITY.md.
Find it useful? Give Upload History a ⭐ on GitHub, share it with someone who could use it, or leave an honest review on the Chrome Web Store.
MIT — free to use, inspect, and contribute to.
A little memory for your uploads.
Install Upload History ·
Star on GitHub ⭐ ·
Back to top ↑