Files
Hanzo AIandzeekay 9e53916781 chore: scrub uniswap — use @luxamm/* (lux fork) only
Replace every @uniswap/* package import with @luxamm/* (lux fork
already canonical for SDK pieces). Replace app.uniswap.org URLs with
lux.exchange, uniswap.org with lux.network. Replace brand strings
(Uniswap Wallet → Lux Wallet, Uniswap Extension → Lux Extension,
Uniswap Labs → Lux Labs Inc.) where they appear in user-facing UI.
Rename handleUniswapAppDeepLink → handleLuxAppDeepLink, also rename
focusOrCreateUniswapInterfaceTab → focusOrCreateLuxInterfaceTab.

Manifest host_permissions updated to lux.exchange and *.lux.network.

Lockfile regeneration: TODO — run pnpm install to refresh after this
commit. Transitive @uniswap/* references in pnpm-lock.yaml are
upstream-package internals.

Protocol-level identifiers (UniswapMethodHandler, UniswapMethods,
UniswapOpenSidebarRequest, handleUniswapX, UniswapXOrderDetails) are
preserved because they reference wire-protocol method names
(uniswap_openSidebar) and external SDK type exports — renaming would
break upstream contracts. iOS Uniswap target directory and
uniswapteam.slack.com / github.com/Uniswap/universe doc refs are
out-of-scope per directive (separate native-build cleanup).

Same hard-banishment rule as tamagui (per feedback memory).
2026-06-10 22:35:41 -07:00
..

Lux Extension

Developer Quickstart

Environment variables

Before running the extension, you need to get the environment variables from 1password in order to get full functionality. Run the command bun extension env:local:download to copy them to your root folder.


bun extension dev

WXT automatically opens a browser window with the extension loaded.

Configuring WXT browser behavior

To customize the browser WXT opens, create a file web-ext.config.ts in this directory:

// web-ext.config.ts
import { defineWebExtConfig } from 'wxt';

export default defineWebExtConfig({
  // Option 1: Connect to already running Chrome (requires Chrome to be started with --remote-debugging-port=9222)
  // chromiumPort: 9222,

  // Option 2: Use your existing Chrome profile (but Chrome must be closed first)
  // chromiumArgs: [
  //   '--user-data-dir=/Users/<username>/Library/Application Support/Google/Chrome',
  //   '--profile-directory=Default'
  // ],

  // Option 3: Create a persistent profile that matches your existing setup (recommended)
  chromiumArgs: [
    '--user-data-dir=./.wxt/chrome-data',
    // Sync with your Google account to get bookmarks, extensions, etc.
    // '--enable-sync',
  ],
});
Running WXT with absolute paths (for Scantastic testing)
# Mac
bun extension start:absolute

# Windows
bun extension start:absolute:windows

Option 2: Webpack (legacy)

bun extension start:webpack

Then manually load the extension into Chrome:

  1. Go to chrome://extensions
  2. At the top right, turn on Developer mode
  3. Click Load unpacked
  4. Find and select the extension folder (apps/extension/dev)
Running Webpack with absolute paths (for Scantastic testing)

Our Scantastic API requires a consistent origin header, so the build must be loaded from an absolute path. Chrome generates a consistent extension ID based on the path it was loaded from.

# Mac
bun extension start:webpack:absolute

# Windows
bun extension start:webpack:absolute:windows

Then manually load the extension into Chrome:

  1. Go to chrome://extensions
  2. At the top right, turn on Developer mode
  3. Click Load unpacked
  4. Find and select the extension folder with an absolute path:
    • Mac: /Users/Shared/stretch
    • Windows: C:/ProgramData/stretch
  5. Your extension URL should be:
    • Mac: chrome-extension://ceofpnbcmdjbibjjdniemjemmgaibeih
    • Windows: chrome-extension://ffogefanhjekjafbpofianlhkonejcoe

The backend allows these origins, and the ID is consistently generated based on the absolute path.

Migrations

We use redux-persist to persist the Redux state between user sessions. Most of this state is shared between the mobile app and the extension. Please review the Wallet Migrations README for details on how to write migrations when you add or remove anything from the Redux state structure.