zpwrchrome // recent tabs

Browser power-tool. UNIX pass · segmented download manager (default Chrome takeover) · JetBrains-style tab switcher · fzf history · Tampermonkey-equivalent userscripts · full-page screenshot · Wappalyzer-compatible tech detection · cyberpunk page theme · Turn Off the Lights · JSON viewer · UA switcher · ModHeader · find-in-all-tabs. 55 keyboard commands.
Cyberpunk HUD palette by MenkeTechnologies.

55
commands
4
default-keyed
51
user-bound
▸ source on github ▸ install ▸ commands ▸ categories ▸ native host ▸ permissions ▸ theme ▸ engineering report

features

MRU trackingCross-window most-recently-used stack. Survives service-worker restarts.
Cmd+Y historyReplaces Chrome's chrome://history with an fzf-fuzzy search over up to 5000 URLs. Backspace deletes.
Cmd+E modalJetBrains-style Recent Files overlay injected into the active page.
UNIX pass integrationReplaces browserpass via a Rust native host. Walks ~/.password-store, autofills active-tab login forms, copies user / pw / OTP with 45 s clipboard auto-clear (matches pass -c). React/Vue/Lit-safe autofill.
Segmented download acceleratorMulti-connection HTTP/HTTPS download accelerator (IDM / aria2 / axel class). Splits each file into N byte-range segments fetched over N concurrent Range connections to beat single-stream throughput, with retry / resume, Chrome cookies + User-Agent forwarded for logged-in URLs. Live queue UI, right-click Download with zpwrchrome. Pure-Rust, ureq + rustls, no aria2 binary.
Filtered popupLive filter over open + closed tabs, ↑↓/Enter/Del nav.
Batch tab opsclose-others, close-right, close-duplicates, reload-all, sort-by-URL, group-by-domain.
Single-tab opsduplicate, pin, mute, detach, bookmark, copy URL, copy Markdown link.
Numeric jumpsjump-to-1..9 (1-8 nth tab, 9 = last).
Save to zcitePage right-click extracts bibliographic metadata (Highwire citation_* / Dublin Core / Open Graph / schema.org JSON-LD) into CSL-JSON; the native host's zcite.save drops it into the zcite reference manager's inbox. The Zotero-Connector role — handed off as a plain file, no link to the proprietary engine.
51 configurable shortcutsBind anything you want at chrome://extensions/shortcuts.

install (unpacked)

  1. git clone https://github.com/MenkeTechnologies/zpwrchrome.git
  2. Open chrome://extensions and enable Developer mode
  3. Click Load unpacked, pick the cloned directory
  4. For pass, downloads, and screenshots, install the native host from crates.io and register it for this extension: cargo install zpwrchrome-host && zpwrchrome-host --install <ext-id>. Get the ext-id at chrome://extensions (Developer mode). pass support also requires GPG configured locally.
  5. Open chrome://extensions/shortcuts to bind any of the 51 user-configurable commands (incl. pass-fill, pass-fill-profile, pass-fill-cc, pass-copy-pw, pass-copy-otp, dl-paste-url, dl-show-queue)
  6. Optional: Load unpacked the theme/ subdirectory for the matching browser theme

keyboard commands

Chrome caps default-suggested shortcuts at 4. The remaining 51 commands are bound by the user in chrome://extensions/shortcuts.

commanddefaultdescription
_execute_action Alt+T Open zpwrchrome popup
switch-previous-tab Ctrl+E Switch to the previously active tab (MRU)
restore-last-closed user-set Restore the most recently closed tab
recent-modal user-set Open the recent-tabs popup (same as Alt+T — user-bindable)
open-history Ctrl+Y Open the popup focused on the History category (fzf-search browsing history)
search-tabs user-set Open popup focused on the tab search box
mru-next user-set Cycle forward through MRU stack
mru-prev user-set Cycle backward through MRU stack
jump-to-1 user-set Jump to tab #1 in current window
jump-to-2 user-set Jump to tab #2 in current window
jump-to-3 user-set Jump to tab #3 in current window
jump-to-4 user-set Jump to tab #4 in current window
jump-to-5 user-set Jump to tab #5 in current window
jump-to-6 user-set Jump to tab #6 in current window
jump-to-7 user-set Jump to tab #7 in current window
jump-to-8 user-set Jump to tab #8 in current window
jump-to-9 user-set Jump to last tab in current window
duplicate-tab user-set Duplicate the active tab
pin-tab user-set Toggle pin on the active tab
mute-tab user-set Toggle mute on the active tab
move-to-new-window user-set Detach active tab to a new window
close-others user-set Close all other tabs in current window
close-right user-set Close all tabs to the right of the active tab
close-duplicates user-set Close tabs with duplicate URLs (keeps leftmost)
reload-all user-set Reload every tab in current window
sort-by-url user-set Sort tabs in current window by URL
group-by-domain user-set Group tabs in current window by domain (Chrome tab groups)
copy-url user-set Copy active tab URL to clipboard
copy-title-md user-set Copy active tab as Markdown link
bookmark-tab user-set Bookmark active tab to Other Bookmarks
open-dashboard user-set Open the zpwrchrome dashboard — a searchable tile grid of every tool, settings page and info screen
manage-scripts user-set Open the userscript manager (Tampermonkey-style)
save-scene-prompt user-set Open popup focused on save-scene input
restore-scene-1 user-set Restore scene #1 (newest) — opens a new window with saved tabs
restore-scene-2 user-set Restore scene #2
restore-scene-3 user-set Restore scene #3
restore-scene-4 user-set Restore scene #4
restore-scene-5 user-set Restore scene #5
pass-open-popup user-set Open popup focused on the PASS category (matches credentials for the active tab from ~/.password-store via the zpwrchrome native host)
pass-fill Ctrl+Shift+L Autofill the best-matching `pass` credential into the active tab's login form (requires the native host) — customize at chrome://extensions/shortcuts
pass-copy-pw user-set Copy the best-matching `pass` password for the active tab to the clipboard (auto-clears after 45 s)
pass-copy-user user-set Copy the best-matching `pass` username for the active tab to the clipboard
pass-copy-otp user-set Copy the TOTP code for the best-matching `pass` entry to the clipboard
pass-open-url user-set Navigate the active tab to the URL stored in the best-matching `pass` entry (parses url/link/website/web/site keys)
pass-fill-identity user-set Fill whatever identity fields the active tab has — login (username/password), profile (name/address/email/phone/…) AND credit-card (cc-number/cc-exp/cc-csc/cardholder/…) in one keystroke. Picks the best-matching profile/* and creditcard/* entries plus a host-matched login entry (picker if multiple, last-used cached per host).
pass-fill-profile user-set Fill profile fields only (name, address, email, phone, …) on the active tab from a `profile/*` entry in `pass`. Quick-pick overlay when multiple profiles exist.
pass-fill-cc user-set Fill credit-card fields only (cc-number, cc-exp, cc-csc, cardholder, …) on the active tab from a `creditcard/*` entry in `pass`. Quick-pick overlay when multiple cards exist.
find-in-all-tabs user-set Full-text search across every open tab — opens a search UI, scrapes innerText from every http(s) tab in parallel, fuzzy-filters as you type, Enter activates the chosen tab and scrolls to the match (no DevTools required)
lights-off user-set Turn off the lights — dim the entire active page with a near-black overlay while lifting any video elements above it (cinema-mode for YouTube and beyond). Click the overlay or press Esc to undim
reader-mode user-set Reader mode — strip the active page to its main article and render it in a strykelang HUD overlay with adjustable typography. Click × in the top bar or press Esc to close
screenshot-full-page user-set Full-page screenshot — scrolls the active tab in viewport-sized steps and stitches into one PNG (no extra permissions required; customize at chrome://extensions/shortcuts)
dl-paste-url user-set Download the URL currently on the clipboard via the zpwrchrome segmented downloader
dl-show-queue user-set Open the zpwrchrome download manager queue view
dl-pause-all user-set Pause every active download in the zpwrchrome download manager
dl-resume-all user-set Resume every paused download in the zpwrchrome download manager

popup categories

The toolbar popup (popup.html / popup.css / popup.js) renders 12 categories, each fzf-scored against tab title + host. Jump straight to a category with Cmd+1..Cmd+0 (the digit shown beside each row); Cmd+P and Cmd+K jump to the Pass and Tech categories. Type to fuzzy-filter, / to move, Enter to activate, Del to close/forget the highlighted row.

All Tabs⌘1
Current Window⌘2
Pinned⌘3
Audible⌘4
Muted⌘5
Recently Closed⌘6
Scenes⌘7
Tree (by opener)⌘8
Minimap⌘9
History⌘0
Pass⌘P
Tech⌘K

how it works

zpwrchrome is a Manifest V3 extension. The service worker (background.js) tracks tab activation across every window in chrome.storage.session so the MRU stack survives service-worker restarts, dispatches the 55 keyboard commands, answers the 19 message kinds the popup / modal / managers send, registers userscripts, and bridges to the native host for pass and segmented downloads.

On-page features ship as content scripts rather than DevTools panels: a page-theme injector (modal/cyber-theme.js) paints arbitrary pages with the HUD palette at document_start; reader mode (modal/reader-mode.js) extracts the main article into a sanitized overlay; Turn Off the Lights (modal/lights-off.js) dims the page while lifting <video> elements above the overlay; a JSON viewer (modal/json-viewer.js) and XML viewer (modal/xml-viewer.js) replace raw structured-data pages with collapsible trees (RFC 6901 pointer / XPath copy). The find-in-all-tabs page scrapes innerText from every open http(s) tab in parallel (capped at 200 KB / tab) and fuzzy-filters across them, scrolling the chosen tab to the match via window.find().

Pure helpers live in lib/util.js and lib/fzf.js with zero chrome.* references, so they unit-test headless in plain Node and can be inlined into the shadow-DOM modal by scripts/build-modal.mjs. The fzf scorer matches the constants used across the MenkeTechnologies tools (boundary 9, camel 7, gap-start −3, match 16).

native host (zpwrchrome-host)

pass, GPG, and segmented downloads can't run inside an MV3 service worker, so a small Rust binary handles them over Chrome native messaging (length-prefixed JSON on stdio). It is a strict 1:1 port of browserpass-native v3.1.2 with six additive Rust tool families layered on top — matched before the ported upstream switch, so a stock browserpass client still gets byte-identical upstream behavior. Install and register it for your extension ID:

  1. cargo install zpwrchrome-host
  2. zpwrchrome-host --install <ext-id> — writes the native-messaging manifest (host name com.menketechnologies.zpwrchrome) into every detected Chromium-family browser config dir on macOS/Linux. Find the ext-id at chrome://extensions (Developer mode).
  3. zpwrchrome-host --version / -V — print version and exit. -v logs verbosely to stderr. --help / -h prints usage.

With no flags the host reads one framed JSON request on stdin, dispatches it, and exits — one process per request, mirroring upstream. It handles the upstream browserpass actions configure, list, tree, fetch, save, delete, echo; the six additive tool families — otp, search, host.crawl / host.exec (via zwire_host::api), run.spawn, and zcite.save; and the download-manager actions dl.add / dl.list / dl.pause / dl.resume / dl.cancel / dl.remove / dl.clear / dl.openDir / dl.openFile / dl.writeFile / dl.writeFileChunk. Downloads run in detached worker processes (--dl-worker <gid>, one per download) that setsid away from the parent, fetch N parallel Range segments with ureq + rustls (no aria2 binary), and persist authoritative state under ~/.cache/zpwrchrome/dl/ so the queue survives browser restarts. pass support also requires GPG configured locally.

userscripts (Tampermonkey-equivalent)

The userscript engine (lib/userscript.js + lib/gm-shim.js) runs scripts in Chrome's native USER_SCRIPT world via chrome.userScripts. It parses the // ==UserScript== metadata block (@match / @include / @exclude, @run-at, @name, …), validates match patterns, and exposes a Greasemonkey-style API. Manage, edit, enable/disable, and watch the injection fire-log in the dashboard at scripts-manager/manager.html (open with the manage-scripts command). Supported GM calls:

GM_getValue GM_setValue GM_deleteValue GM_listValues GM_setClipboard GM_openInTab GM_notification GM_addStyle GM_addElement GM_info

Each is also available in promise form (GM.getValue, GM.setValue, …). Per-script values are stored in an isolated chrome.storage.local bag, keyed by script, and dropped when the script is deleted.

permissions

19 permissions are declared in manifest.json. tests/static.test.js enforces that every declared permission is actually referenced in background.js or popup.js — no dead permissions ship.

tabs tabGroups sessions bookmarks history storage scripting userScripts webNavigation clipboardWrite nativeMessaging contextMenus notifications cookies webRequest webRequestAuthProvider downloads alarms declarativeNetRequestWithHostAccess

configuration & storage

No options file and no build step — runtime state lives in chrome.storage. chrome.storage.session holds the cross-window MRU stack (survives service-worker restart, cleared on browser restart); chrome.storage.local holds scenes, installed userscripts, per-script GM bags, the userscript fire-log ring buffer, download settings / rules / queue snapshot, page-theme injector knobs, ModHeader profiles, and pass settings. Browsing history and recently-closed tabs come from the Chrome-managed chrome.history and chrome.sessions APIs. The download host keeps its own authoritative state on disk under ~/.cache/zpwrchrome/dl/.

troubleshooting

companion theme

The theme/ directory ships a separate Chrome theme that paints the browser frame, toolbar, and new-tab page with the same cyberpunk palette (#05050a bg / #05d9e8 cyan / #ff2a6d accent). Themes cannot be bundled with action extensions, so load it as its own unpacked extension.