Skip to main content

Offline Wallet

About

Offline Wallet is a self-contained, air-gapped build of Extra Wallet. It ships a local ui and a signer iframe on a different origin so you can generate/store keys, protect phrases as QR, and sign transactions without internet.

It’s distributed as a desktop bundle with an executable and the offline ui/signer assets. Once launched, it serves the wallet locally in your browser.

What it includes
  • Wallet Expander – derive per-network address ranges; add/remove accounts; export watch-only data
  • Add Wallet – create/import a wallet (mnemonic or QR)
  • QR Safe Keeper – encrypt/decrypt sensitive text into password-protected QRs
  • Sign Transaction – export unsigned transaction, sign offline, and import the signature to broadcast

Key Features

  • 🔌 Truly offline after download
  • 🧿 Separate-origin signer isolates passwords, decrypted text, and signing flows
  • 🧰 Focused toolset for wallet creation/import, derivation, QR protection, and signing
  • 🧳 Cross-platform: macOS (Intel/Apple Silicon), Linux (x86_64/arm64), Windows (x86_64)
  • 🔐 Local portfolios with optional auto sign-in

Choose The Right Distribution

Your systemCPU architectureDownload
macOS (Intel)x86_64extra-wallet-offline-darwin-amd64.zip
macOS (Apple Silicon M1/M2/M3)arm64extra-wallet-offline-darwin-arm64.zip
Linux (most PCs/servers)x86_64extra-wallet-offline-linux-amd64.zip
Linux (ARM64)arm64extra-wallet-offline-linux-arm64.zip
Windows 10/11 (64-bit PCs)x86_64extra-wallet-offline-windows-amd64.zip

Check your architecture

  • macOS: uname -mx86_64 or arm64
  • Linux: uname -mx86_64 or aarch64/arm64
  • Windows: most devices are x86_64

How To Use

1. Install And Run

  1. Download the bundle for your OS (see table above).

  2. Unarchive it. Ensure the ui and signer folders sit in the same directory as the executable. After downloading the ZIP for your platform:

    • Windows: Right-click the .zip"Extract All..." → choose a directory → "Extract"

    • MacOS/Linux: Use built-in archive manager or run unzip in terminal

    This will create a folder like:

    extra-wallet-offline-windows-amd64/
    ├── extra-wallet-offline-windows-amd64.exe
    ├── ui/
    └── signer/
  3. Run the executable.

  • Windows: double-click extra-wallet-offline-windows-amd64.exe. A terminal window should open.

  • macOS / Linux:

Open a terminal and run:

chmod +x extra-wallet-offline-<your-arch>
./extra-wallet-offline-<your-arch>

Example (Linux amd64):

./extra-wallet-offline-linux-amd64

A local server starts and your default browser opens:

  • ui at http://localhost:5173
  • signer iframe at http://localhost:5001
Air-gap hygiene

Use a dedicated browser profile with no extensions and disable the network when possible.

2. Authenticate → Authentication & Portfolios

Quick start

Right after authentication you can open QR Safe Keeper and encrypt/decrypt phrases. Other tools will be limited until you add a wallet.

3. Create Or Import A Wallet → Add Wallet

4. Derive Addresses And Add/Remove Accounts → Wallet Expander

5. Protect A Phrase As QR (Encrypt/Decrypt) → QR Safe Keeper

6. Sign A Transaction Offline And Broadcast Online → Sign Transaction

Security And Privacy

  • 🔒 Offline-first: All crypto operations run locally.
  • 🧿 Signer isolation: password fields, decrypted text, and signing UI are rendered in a separate-origin iframe.
    • The host page cannot read the secrets DOM due to the Same-Origin Policy.
    • Only minimal, non-sensitive status messages cross via postMessage (never passwords or decrypted payloads).
  • 🧠 Portfolio data is stored locally on your machine/profile. No telemetry.
Limitations
  • Passwords are unrecoverable. Keep them safe.
  • Untrusted extensions or malware can defeat local security. Use a clean machine/profile.

FAQ

Do I need internet? No. After download, the app runs entirely offline.

Can I reuse the same browser as the online wallet? Yes, but log out of the online wallet first (same profile). Prefer a separate profile or incognito tab.

Where is data stored? Locally in the browser’s IndexedDB for your profile. You can clear it any time from the wallet header or manually. Incognito profiles clears data when closed. Always export backups.

Troubleshooting

ProblemSolution
index.html not foundEnsure ui/ and signer/ are present next to the binary.
App doesn’t open in browserOpen http://localhost:5173 manually.
Binary won’t run (macOS/Linux)chmod +x <binary>
macOS: “App can’t be opened…”Right-click → Open → Allow once
Port already in useMake sure nothing else is using port 5173 or 5001.
zip: command not foundInstall zip (sudo apt install zip on Ubuntu)

Developer Info

Overview

The offline bundle includes:

  • Static web ui served at http://localhost:5173
  • Local signer iframe server at http://localhost:5001
  • A Go binary that serves both UI and signer
  • A .zip archive for each platform (Windows/macOS/Linux)

Requirements

  • Go 1.20+
  • zip CLI tool (preinstalled on most systems)
  • Bash (for running the build script)
  • Built ui & signer assets (see below)

Repository Layout

├── ui/ # Frontend build output
├── signer/ # Signer build output
├── main.go # Offline binary entrypoint
├── scripts
│ └── build-all.sh # Cross-platform build + packaging
└── builds/ # Final output (archives with the binary + ui and signer builds)

Build The Binaries

1. Build UI And Signer Assets

Make sure you've built the ui and signer with offline env vars before bundling.

# From the offline repo root:

# ui
cd ../ui # adjust path to your ui repo
yarn
yarn build
cp -r ./dist/* ../offline/ui # adjust path to your ui repo

# signer
cd ../signer # adjust path to your signer repo
yarn install
yarn build:offline
cp -r ./dist* ../offline/signer # adjust path to your ui repo
  • signer .env:
PORT=5001
ALLOWED_ORIGINS="http://localhost:5173,http://localhost:5001"
  • ui .env:
VITE_URL_IFRAME=http://localhost:5001
VITE_BUILD_TARGET=offline

After this step you should have:

  • ./ui → ui assets

  • ./signer → signer assets

2. Build Binaries & Archives

From the offline repo root: ./scripts/build-all.sh The script:

  • Builds the Go binary for:

    • Windows (amd64)

    • Linux (amd64, arm64)

    • macOS (amd64, arm64)

  • Bundles signer, ui and the binary into a .zip archive

  • Writes archives into ./builds directory

Output Layout

builds/
├── extra-wallet-offline-windows-amd64.zip
├── extra-wallet-offline-linux-amd64.zip
├── extra-wallet-offline-linux-arm64.zip
├── extra-wallet-offline-darwin-amd64.zip
├── extra-wallet-offline-darwin-arm64.zip
└── ...

Each archive contains:

  • The platform-specific binary

  • ui/ – web frontend

  • signer/ – signer iframe