WatchLog is a browser extension for tracking what you are watching or reading across streaming sites and web pages without depending on a central account or remote tracking service.
It is built as a Manifest V3 extension and currently targets:
- Google Chrome / Chromium-based browsers
- Mozilla Firefox
WatchLog helps you:
- detect the title currently open in the active tab when the site is supported
- save that item to your local library
- organize items into lists such as
Library,Watching, andCompleted - mark favorites
- review and manage your saved library from the full library page
- import certain source catalogs into the local library
- Your data is stored locally in the browser through
chrome.storage.local/ extension storage. - There is currently no mandatory account, login, or cloud sync flow for normal usage.
- If you remove the extension or clear extension storage, your local data can be lost.
- The safest habit is to periodically use the import/export tools from the extension settings/options page if you care about backups.
- Firefox temporary installs are not permanent. If you load the extension through Firefox's temporary add-on workflow, you usually need to load it again after restarting Firefox.
This is an active project, not a store-published end-user package yet.
That means:
- installation is currently manual
- some sites work better than others
- Chrome and Firefox builds are both supported, but the loading workflow is different
- React
- Vite
- TypeScript
- PNPM
- Browser Extension Manifest V3
popup.html: quick capture flowlibrary.html: full library workspaceoptions.html: import/export and settingssrc/background/index.ts: background runtime hostsrc/content/index.ts: page detection runner
Before building the extension locally, make sure you have:
- Node.js installed
- PNPM installed
Example:
node --version
pnpm --versionpnpm installpnpm dev
pnpm build
pnpm build:chrome
pnpm build:firefox
pnpm test
pnpm lint
pnpm deps:policyNotes:
pnpm builddefaults to the Chrome build target.pnpm build:chromeexplicitly builds for Chrome/Chromium.pnpm build:firefoxbuilds the Firefox-compatible output.
After building, the generated folders are:
- Chrome/Chromium:
dist/ - Firefox:
dist-firefox/
pnpm build:chromeYou can also use:
pnpm buildIn Chrome, Brave, Edge, or another Chromium browser, open:
chrome://extensions
Turn on the Developer mode switch.
Click Load unpacked and select the dist/ folder.
Once loaded:
- pin the extension if you want quick access
- open a supported page
- click the WatchLog icon
- save the detected item from the popup
- open the full library when you want to manage your catalog
pnpm build:firefoxOpen:
about:debugging#/runtime/this-firefox
Click Load Temporary Add-on... and select:
dist-firefox/manifest.json
This temporary installation usually does not survive a full browser restart.
That means:
- if Firefox restarts, you may need to load the add-on again
- rebuilding the extension may require reloading it in Firefox
WatchLog supports both browsers, but there are a few practical differences:
- Chrome build uses the MV3 service worker path for the background script.
- Firefox build uses the Firefox-compatible background script form.
- Chrome includes the
sidePanelpermission. - Firefox uses
sidebar_actioninstead of Chrome's side panel configuration. - Temporary extension loading is more straightforward and persistent in Chromium during development.
- Firefox temporary loading is more limited for day-to-day non-technical use.
If you just want to try the extension with the least friction:
- Use Chrome or another Chromium browser first.
- Run
pnpm build:chrome. - Load the
dist/folder throughchrome://extensions. - Test the popup on supported pages.
- Use the library and options pages to verify your data is being stored correctly.
- Open a supported media page.
- Click the WatchLog extension icon.
- Review the detected title, list, favorite state, and progress.
- Save it to your local library.
- Open the full library to edit, organize, or review entries.
- WatchLog is local-first.
- Data is not automatically synced to a remote server in the current flow.
- If you switch browsers, local data does not automatically move with you.
- If you reinstall the browser profile or remove extension data, your library may disappear unless you exported it first.
This project intentionally applies a conservative dependency policy:
- direct dependencies are pinned to exact versions
.npmrcenforcessave-exact=true.npmrcalso enforces a minimum package release agepreinstallrunsscripts/enforce-dependency-policy.mjs
Emergency bypass exists only through:
WATCHLOG_SKIP_DEP_POLICY=1- Make sure you loaded the correct folder:
- Chrome:
dist/ - Firefox:
dist-firefox/manifest.json
- Chrome:
- Rebuild after code changes.
- Reload the extension from the browser's extension page.
- The current site may not be fully supported yet.
- Try refreshing the tab and reopening the popup.
- Try the popup's reanalyze action if available.
That is expected when using Firefox's temporary add-on workflow during development.
- Check whether the extension storage was cleared.
- Check whether you are using the same browser profile.
- Restore from an exported backup if you created one earlier.
- AniList is currently the main live metadata source for supported anime/manga flows.
- Google Drive sync is intentionally deferred.
prototype_ui/is the visual reference area for product direction./_agent/contains project memory and implementation notes used during development.
This project is licensed under the Apache License, Version 2.0.
If you reuse or distribute it:
- keep the original copyright notices
- retain the
NOTICEfile where required - preserve attribution