Bring your desktop palette to web pages. Built with WXT, React, Material Design 3, and a Rust file-watching bridge.
| Purple | Pink |
|---|---|
![]() |
![]() |
![]() |
![]() |
Download 0.1.0 test packages for Firefox and Chromium/Edge. See installation instructions. Firefox's unsigned test package requires temporary loading.
git submodule update --init --recursive
nix develop path:.
bun install --frozen-lockfile
bun run devFor Chrome/Chromium, use bun run dev. For Firefox, use bun run dev:firefox, open about:debugging, and load .output/firefox-mv2-dev/manifest.json as a temporary add-on. Pin Duxreader to the toolbar.
- Pywalfox (Firefox): follow the active browser theme. No Duxreader bridge required.
- Theme file: watch Matugen JSON output. See the template and configuration.
For file mode on Linux:
bun run build:bridge
bun run prepare:bridge
bun run install:bridgeReload the extension, then select Choose file. The native chooser requires a working desktop portal. Chrome registration also needs --chrome-id YOUR_EXTENSION_ID during preparation and --browser chrome during installation.
Upstream Vimium is vendored at vendor/vimium
and bundled into Duxreader by default. Its normal-mode key bindings and commands are
unchanged. The Vomnibar, HUD, and help dialog are React and Material 3 components in
entrypoints/; they follow the same desktop palette as the rest of Duxreader. Upstream
options and command-listing pages inherit the palette through a shared page theme.
After checking out or updating the submodule, regenerate the bundled assets:
git submodule update --init --recursive
bun run vimium:buildbun run check
bun run test:browser # Requires Firefox
bun run test:sites # Live websites preserve and color map tests; requires Chromium and network
bun run test:vimium # Vimium shortcuts and palette in the production extension; requires Chromium
bun run benchmark:interaction # Requires a production build and Chromium
bun run build
bun run build:firefoxThe pinned Dark Reader dynamic engine maps page colors to the Pywalfox/Matugen palette. Custom CSS remains supported. See engine notes.
Performance measurements and reproduction commands: benchmarks.



