A browser extension that shows what you're browsing as Discord Rich Presence. Supports Chrome (Manifest V3), Firefox (Manifest V2), and other Chromium-based browsers (Edge, Brave, Vivaldi).
Extension (MV3 Chrome / MV2 Firefox) ↔ Native Messaging (stdin/stdout) ↔ Host Process (Node.js or standalone binary) ↔ Discord RPC (IPC)
The extension communicates with a local host process via native messaging protocol — no WebSocket server, no manual startup needed.
The build script accepts a --target flag:
npm run build # Chrome MV3 (default)
npm run build -- --target firefox # Firefox MV2For Chrome, the polyfill is inlined into bundles. For Firefox, the manifest loads browser-polyfill.js as a separate script entry. Both produce output in dist/.
cd native-host
npm install- Chrome / Edge / Brave / Chromium: Go to
chrome://extensions, enable Developer Mode, click "Load unpacked", select the project folder - Firefox: Go to
about:debugging#/runtime/this-firefox, click "Load Temporary Add-on…", selectdist/manifest.json(must be built with--target firefoxfirst)
Chrome and Chromium browsers:
cd native-host
node cli.js --installThis auto-detects your extension ID, writes the native manifest, and registers in the registry.
If auto-detection fails, pass the extension ID manually:
node cli.js --install <extension-id>You can find your extension ID on the extensions page (chrome://extensions with Developer Mode on).
Firefox:
cd native-host
node cli.js --install <gecko-addon-id> --browser firefoxThe Gecko add-on ID is digitans-journal@darkred1145 (defined in manifest.firefox.json).
Standalone binary: If you've built
host.exe(npm run buildinnative-host), usenative-host\host.exe --installinstead — no Node.js needed after that.
The extension will automatically show your presence on Discord.
cd native-host
node cli.js --uninstallThen remove the extension from your browser and delete the project folder.
- nhentai.net
- gametora.com/umamusume
- raggooneropen.web.app
- uma.guide
- umalator.app
Right-click the extension icon and select "Options" to:
- Enable/disable the extension or specific sites
- Set an idle timeout to auto-clear presence
- Enable privacy mode
- Customize presence text with templates
Alt+C— Clear current activity
# Build for Chrome (default)
npm run build
# Build for Firefox
npm run build -- --target firefox
# Run unit tests
npm test
# Run the e2e smoke test (loads extension in headed Chromium)
npm install
npx playwright install chromium
npm run test:e2e
# Build standalone host.exe (no Node.js needed after this)
cd native-host
npm run buildwebextension-polyfill provides browser.* Promise-based APIs in HTML pages (popup, options) and content scripts, loaded as a separate script entry or inlined into bundles.
Background listeners use chrome.runtime.onMessage with sendResponse directly — Firefox's built-in chrome.* compatibility shim handles this, avoiding the polyfill's listener wrapping which had subtle sendResponse bridging issues in service worker contexts.