Marks the current state of the deployed app. package.json has read 0.6.13 for a while; the v0.x tag series lapsed at v0.6.3 on 13 February 2026 , 751 commits back, so this is a marker for what is live today rather than a changelog of everything since. The web app deploys from master on merge — this tag records a point, it does not trigger a deploy. Live and healthy at the time of tagging. The…
Fixed Installing from the store no longer lands a second copy beside a sideloaded one. This is the fix for "I installed 0.9.2 and it still says 0.9.0." Without a key , Chrome derives an unpacked extension's id from its install path , while the store's .crx gets an id derived from the store's signing key . The two never match, so a store install didn't upgrade an existing sideload — it installed…
Added The approval window now shows what the paying address holds. A short balance is the failure mode that hides best. The run starts, and every payment dies with a chain-level error that never says the word "balance": Broadcast failed: SOL broadcast error: Transaction simulation failed No UTXOs available for this address An 80-payment payout could fail end to end without once telling you the…
Fixed A payment request could hang forever instead of opening the approval window. window.coinpay is injected into the page's world, so it outlives the content script that injected it. Installing, updating or reloading the extension orphans that content script in tabs that are already open — while the provider object stays exactly where it was. The result: a site still feature-detects a wallet,…
Changed "Accounts" are gone. They were a MetaMask concept with no counterpart in CoinPay, and they hid money. The web wallet derives per chain , taking that chain's next unused index — which is why a real wallet has BTC at indexes 0/1/2, SOL at 0/1, and POL only at 0. Grouping index N of every chain into "Account N+1" described nothing the portal actually has, and a balance sitting on SOL's second…
Fixed Adding a second wallet appeared to replace the first one. A new wallet becomes active immediately, and a wallet with no phrase yet renders the setup screen — which carried no wallet context and no switcher. Your existing wallet looked deleted, with no way back to it. The natural move from there is to import a phrase again, which leaves you with two wallets holding the same phrase: the…
Added You can hold more than one recovery phrase. Until now an "account" was a BIP-44 index of a single phrase, so a second CoinPay wallet had nowhere to go — importing one overwrote the first. Wallet switcher above the account picker. It stays hidden until you have more than one, and each wallet keeps its own accounts, addresses and portal registration. Import another wallet from the switcher —…
Added Transaction hashes link to a block explorer , in the History tab and on the "Sent" confirmation. Links open in a new tab, because the popup closes the moment it loses focus. The eight chains the portal broadcasts point at the same explorers the portal itself uses, so a hash opens the same page wherever you click it. The rest cover assets the extension lists but can't send: USDT variants,…
Fixed The wallet total was short by exactly your Lightning balance. The rates endpoint has no LN pair, so an LN balance came back unpriced and dropped out of the total silently — on a real wallet that was 88,512 sats, or $57.08 of a $149.55 wallet. Lightning is bitcoin, and the portal already prices it as BTC internally; the extension now does the same, so its total matches the web wallet's. Added…
Fixed The wallet under-reported its own balance. A chain holds one balance row per derivation index — the web wallet issues a fresh receiving address each time it's asked — so funds accumulate across indexes. The extension keyed assets by chain and overwrote instead of summing, showing whichever row came last. On a real wallet that meant SOL displayed 0.1757 when the account actually held 0.3245…