New BasicSwap Release (v0.16)

New BasicSwap Release (v0.16)

By BasicSwap Teamβ€’April 28, 2026
NewsRelease

BasicSwap v0.16.0 is now available. This post covers changes since v0.15.1, spanning the v0.15.2, v0.15.3, and v0.16.0 updates: Electrum light-wallet support for Bitcoin and Litecoin, Firo Spark address integration, mandatory coin core upgrades, and a range of stability, swap-reliability, and wallet-safety fixes.

⚠️IMPORTANT: This update is MANDATORY.

This update is MANDATORY for two reasons. First, Litecoin Core must be upgraded to v0.21.5.4: it includes critical security patches and corrects MWEB input/output accounting. All node operators, miners, and wallet users should upgrade immediately. Second, Firo Core must be upgraded to v0.14.15.3, a critical release for all Firo users. Both upgrades are handled automatically by BasicSwap's prepare script.

Over 130 commits went into these three releases, most of them backend and infrastructure work. The standout addition is Electrum light wallet support for BTC and LTC, previewed in the v0.15.0 release notes, but the UI performance gains are also hard to miss.

Most Notable Updates πŸ’‘

ℹ️Noteworthy Updates

This release spans three version tags since v0.15.1. The highlights below cover the most impactful changes across all three.

Electrum Light Wallet Support for BTC & LTC ⚑

Bitcoin and Litecoin can now run in BasicSwap without a local full node, as previewed in the v0.15.0 release notes. In Electrum mode, BasicSwap connects to public Electrum servers rather than maintaining a locally synced blockchain, cutting hardware requirements, disk usage, and initial setup time.

ℹ️Electrum mode is opt-in

Users who already have synced full nodes can continue using RPC mode exactly as before. Electrum mode is an opt-in setting and does not affect existing installations.

The electrum implementation is a new module (see electrumx.py) implementing the Electrum JSON-RPC protocol with SSL/TLS and Tor support. It handles connection pooling, automatic failover, and all wallet operations BasicSwap requires: balance queries, transaction broadcasting, address derivation, and UTXO management. Multiple public servers are bundled for both coins. For Bitcoin: Blockstream, Emzy, Bitaroo, ACINQ, and StackWallet. For Litecoin: electrum-ltc.bysh.me, xurious, backup.electrum-ltc.org, StackWallet, petrkr, and Jochen Hoenicke.

The integration is Tor-aware. When Tor is enabled, connections route through the proxy automatically, with local and LAN addresses bypassing it to avoid double-encrypting traffic that stays on your network. BIP87 HD derivation is supported, gap-limit enforcement keeps deposit addresses correct, and extended private key support means keys stay portable. Wallets shut down cleanly when BasicSwap exits.

Mode switching is handled in Settings, provided no swaps are active for that coin. Both modes derive from the same seed, so standard BIP84 funds are accessible either way without moving them. The full-node-to-Electrum path consolidates any funds on non-BIP84 addresses to a BIP84 address and shows the extended private key for backup into an external wallet. The Electrum-to-full-node path offers two options: sweep the lite wallet balance across, or leave funds in place and let the full node rescan.

MWEB addresses are not supported in Electrum mode. LTC in Electrum mode uses standard Litecoin addresses only.

Fresh installations auto-configure Electrum mode correctly for BTC and LTC. For full setup instructions, configuration options, and custom server setup, see the Lightweight Modes guide.

Firo Spark Address Support πŸ”₯

Firo's Spark protocol, built on the Lelantus Spark cryptographic scheme, is now integrated into BasicSwap's wallet interface. Spark provides confidential transaction amounts and fully private addresses, going further than Firo's earlier Lelantus protocol.

The Firo wallet page now shows your Spark balance alongside the transparent balance, generates and caches your Spark address automatically, and lets you withdraw directly to a Spark address from the UI, without leaving BasicSwap.

Mandatory Coin Core Upgrades πŸͺ™

Several coin cores received mandatory or strongly recommended upgrades across this release cycle.

The most critical is Litecoin Core v0.21.5.4, introduced in v0.16.0. The upgrade addresses a MWEB input validation bug that was exploited in March 2026, when an attacker used a malformed MWEB input to peg out 85,034 LTC. The funds were recovered through miner coordination and actor cooperation, but a second exploit attempt in April triggered a 13-block invalid chain reorg that affected third-party services including THORChain and NEAR Intents before upgraded miners coordinated to restore the valid chain. The Litecoin project published a full postmortem covering both incidents. All node operators, miners, and wallet users should upgrade immediately. Firo Core v0.14.15.3 is equally mandatory; preceded by v0.14.15.2 earlier in the cycle, it is a required update for all Firo users.

Other coin cores were also updated: Bitcoin to v29.3, Monero to v0.18.4.5, Decred to v2.1.3, Dash to v23.1.2 (via incremental bumps from v23.0.2), and Particl to v27.2.3.0. See the update guide for instructions.

BCH May 2026 Hard Fork Update πŸ”€

Bitcoin Cash was upgraded to v29.0.0 ahead of the May 2026 scheduled hard fork. BCH nodes that haven't upgraded before the fork activates will end up on an incompatible chain, breaking BasicSwap's ability to perform BCH swaps. See the update guide for instructions.

Wallet Safety & Standardised Naming πŸ”

Fresh BasicSwap installations now use bsx_wallet as the standard wallet name for Bitcoin-family coins, replacing the legacy wallet.dat default. This applies to all BTC-family coins except NAV, FIRO, and DCR, which keep their existing names for compatibility. The change avoids conflicts with other wallet software that uses the same default filename.

BasicSwap also no longer silently creates a new wallet on startup when other wallets already exist on disk. Previously, a name mismatch or unexpected configuration state could cause BasicSwap to generate a fresh HD seed with no user-visible warning. That path is now blocked: if wallets exist on disk, BasicSwap won't create additional ones automatically, and any name mismatch surfaces as an explicit error.

Swap Reliability Fixes πŸ”„

Bids stuck in the "Request Accepted" state now time out correctly instead of staying open indefinitely. A gap in the timeout logic had prevented these bids from ever being cleaned up automatically. The fix includes a database migration (data version 8) that runs on startup to bring existing bids in line.

Transaction size estimation for Electrum-based funding was also corrected: fee calculations now use witness-aware vsize rather than raw byte count (the right metric for SegWit), and the change output is factored into the size estimate before it's calculated rather than after. Both fixes prevent fee miscalculations that could result in rejected transactions or overpayment. A separate fix in v0.15.2 addressed a variable name typo in the expiry checking loop that had quietly stopped expired bids and offers from being processed correctly.

GUI v3.5.0 & UX Polish 🎨

This release brings GUI version 3.5.0. The interface feels faster and more responsive. Better connection management, fewer blocking operations, leaner database queries from the new wallet schema, and less log spam have cut the I/O overhead that was slowing things down, with the biggest gains on pages that load wallet data or track active swaps.

Several UX fixes also shipped. The refresh button is now hidden on completed and inactive swaps, where it served no purpose. Bid page tooltips were corrected to use consistent "adaptor signature" language, and misleading text was removed from states that didn't need tooltips. The MWEB address copy button was fixed: an HTML element ID mismatch had silently broken clipboard copy, so clicking it produced nothing. The price chart now correctly tracks the selected coin in all cases, replacing a hardcoded WOW exception that caused stale data when switching coins. Electrum server connection messages were demoted from INFO to DEBUG, and watched outputs that were never broadcast no longer generate log noise at startup.

Install the Latest BasicSwap Update πŸ–₯️

To install, update BasicSwap through the usual process and relaunch.

Docker

If you've installed BasicSwap following the Docker method:

  1. Shutdown BasicSwap properly and stop the Docker image (docker-compose stop),
  2. From the basicswap folder, type the git pull command,
  3. In the /docker folder, run the docker-compose build --no-cache command,
  4. Once the process completes, launch BasicSwap again using the docker-compose up command.

Note: Depending on your Docker version, adding a dash between docker and compose may not be necessary and may instead throw an error.

Non-Docker

If you've installed BasicSwap following the non-Docker method:

  1. Shutdown BasicSwap properly,
  2. From the ~/coinswaps/basicswap folder, type the git pull command,
  3. Execute the following command: pip install --require-hashes -r requirements.txt,
  4. Execute the following command: pip3 install .,
  5. Launch BasicSwap as usual.

Install Script

If you've installed BasicSwap using Nahuhh's GitHub installation script:

  • Execute the update command: bsx-update.

Changelog πŸ“

Coin(s)

  • Monero: Upgraded to v0.18.4.4 [v0.15.2]
  • Decred: Upgraded to v2.1.2, fix wallet creation [v0.15.2]
  • Particl: Updated to v27.2.3.0 [v0.15.2]
  • Bitcoin: Upgraded to v29.2 [v0.15.3]
  • Bitcoin: Upgraded to v29.3 [v0.15.3]
  • Monero: Upgraded to v0.18.4.5 [v0.15.3]
  • Decred: Upgraded to v2.1.3 [v0.15.3]
  • Dash: Upgraded to v23.0.2 β†’ v23.1.0 β†’ v23.1.2 [v0.15.3]
  • Firo: Upgraded to v0.14.15.2 [v0.15.3]
  • Firo: Upgraded to v0.14.15.3 [mandatory] [v0.15.3]
  • Bitcoin Cash: Upgraded to v29.0.0 for May 2026 hard fork [v0.15.3]
  • Litecoin: Upgraded to v0.21.5.4 [required] (security updates + MWEB accounting fix) [v0.16.0]
  • Monero: Added "input stream error" to corrupt wallet error detection [v0.16.0]

Firo Spark

  • Spark balance display on Firo wallet page [v0.15.3]
  • Spark address generation and caching [v0.15.3]
  • Spark address handling and wallet info retrieval [v0.15.3]
  • Spark withdrawal option in wallet UI [v0.15.3]
  • Fixed: add createUTXO for Firo, fix related tests [v0.15.3]

Lite Wallets (Electrum)

  • New Electrum interface module (electrumx.py) for BTC and LTC [v0.16.0]
  • BIP87 HD derivation support [v0.16.0]
  • Gap-limit enforcement for deposit addresses [v0.16.0]
  • Extended private key support [v0.16.0]
  • Tor support with private/LAN address detection (bypasses proxy for local servers) [v0.16.0]
  • Graceful shutdown for Electrum connections [v0.16.0]
  • Reduced CLI noise for Electrum server connections (INFO β†’ DEBUG) [v0.16.0]
  • Added LTC/BTC StackWallet Electrum nodes as defaults [v0.16.0]
  • Fixed: wallet creation (LTC) when switching from Electrum to RPC mode [v0.16.0]
  • Fixed: Electrum broadcast spam [v0.16.0]
  • Fixed: pre-fund state handling [v0.16.0]
  • Fixed: deposit address gap limit [v0.16.0]
  • Fixed: waiting on Electrum server and re-checking seed after error [v0.16.0]
  • Fixed: warning when wallet is locked in Electrum mode [v0.16.0]
  • Fixed: extended private key derivation for Electrum [v0.16.0]
  • Fixed: host:port:ssl string format for Electrum server config in prepare script [v0.16.0]

AMM (Automated Market Maker)

  • Fixed: auto-revoke and repost offers after partial fills [v0.15.3]
  • Removed duplicate minrate check [v0.15.3]

Wallet Management

  • Standardised wallet name to bsx_wallet for new installs (BTC-family coins, excluding NAV/FIRO/DCR) [v0.16.0]
  • Prevented silent wallet creation on startup if wallets already exist on disk [v0.16.0]
  • Fixed: BCH multi-wallet support re-enabled [v0.16.0]
  • Wallet tables now use their own database schema (db_wallet.py) [v0.16.0]
  • Fixed: remove workaround for blank wallet name [v0.16.0]

UI Code & Experience

  • GUI version 3.5.0 [v0.16.0]
  • Hide refresh button for completed/inactive swaps [v0.16.0]
  • Fixed bid tooltips (adaptor signature / secret hash) and progress bar [v0.16.0]
  • Fixed copyable MWEB address (HTML ID mismatch) [v0.16.0]
  • Fixed: currentCoin always set to coinSymbol in price chart (removes hardcoded WOW exception) [v0.16.0]
  • Fixed bid page various bugs [v0.16.0]
  • Fixed duplicate bid ID in coin B lock tx submit message [v0.15.3]
  • Fixed: coin config file f-strings in Docker build helper [v0.15.3]

Core Functionality

  • Fixed: bids in "Request Accepted" state now timeout correctly (DB data version β†’ 8) [v0.16.0]
  • Fixed: witness-aware vsize calculation in _fundTxElectrum [v0.16.0]
  • Fixed: getTxVSize called after change output is added [v0.16.0]
  • Fixed: segfault and log spam [v0.16.0]
  • Reduced log noise for watched outputs that were never broadcast [v0.16.0]
  • Fixed: delay checking for expired bids and offers (variable name typo) [v0.15.2]
  • Refactor: split watched classes into new file [v0.15.2]
  • Backports from upstream [v0.15.2]
  • Estimate witness stack size correctly for multiple inputs [v0.15.3]
  • DB: enable partial retrievals and updates [v0.15.3]
  • Refactor: use coincurve for sumKeys [v0.15.3]
  • Refactor: simplify setBidError [v0.15.3]
  • Refactor: improve shutdown error messages [v0.15.3]
  • Backports from upstream [v0.15.3]
  • Backports from upstream [v0.16.0]

Dependencies

  • Bumped pyzmq from 26.2.1 to 27.1.0 [v0.15.2]
  • Updated coincurve to rebased version [v0.15.2]
  • Bumped python-gnupg from 0.5.5 to 0.5.6 [v0.15.3]

Tests

  • Added base for Electrum functional tests [v0.16.0]
  • Added ElectrumX server setup per coin in test helpers [v0.16.0]
  • Added wait_for_bid_state helper function [v0.16.0]
  • Fixed countEvents [v0.15.3]
  • Various test updates for wallet naming and multiprocess spawn [v0.16.0]

Build

  • Raise version to 0.15.2 / 0.15.3 / 0.16.0
  • Updated guix packed versions

You can inspect all changes by verifying the v0.15.1 comparison page here.

Contributors πŸ™

βœ…Community-Driven Development

BasicSwap v0.16.0 was built by a distributed group of open-source contributors. Thanks to everyone who shipped code, reported bugs, and tested throughout this cycle.

πŸ—οΈ Tecnovert: Core infrastructure improvements, wallet naming standardisation, coincurve refactoring, database partial retrieval support, witness stack estimation, Decred wallet creation fixes, and upstream backports throughout the cycle.

🎨 Crz (@gerlof): Primary author of the Electrum light wallet integration: the full electrumx.py module, Tor-aware connection management, Electrum stability improvements, wallet safety hardening, AMM partial fill fixes, and GUI v3.5.0 polish.

πŸͺ™ nahuhh: Litecoin v0.21.5.4 mandatory upgrade, BCH May 2026 hard fork preparation, Monero daemon bumps, Dash upgrades, MWEB copy button fix, and XMR corrupt wallet detection improvements.

⚑ dhvll (Dhaval Chaudhari): Firo Spark integration: balance display, address generation, caching, and withdrawal functionality in the wallet UI.

πŸ“ˆ muscleman: Price chart currentCoin fix, making the chart reflect the selected coin correctly for all coins instead of relying on a hardcoded exception.

🐳 ashley-logan: Fixed the Docker config helper f-string bug that was preventing correct YAML generation for Monero and Wownero.


Thank you to all contributors, testers, and community members for your continued support. πŸš€


Stay Connected

Keep up with BasicSwap on social media: