EL
← All projectsElectrum

Electrum

Long-running lightweight Bitcoin wallet for desktop and mobile platforms.

BitcoinSoftware walletsNormal
Repository coverage

935 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

67security candidates208second-pass queue929AI analyses
61commits · 30 days
115commits · 60 days
465commits · 180 days
931commits · 365 days
Backfill bands
Aug 5 → Feb 6470 seen11 candidatesComplete
Feb 6 → Jun 6346 seen10 candidatesComplete
Jun 6 → Jul 653 seen2 candidatesComplete
Jul 6 → Aug 554 seen3 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

65/100 average clarity
194Strong · 80–100
415Adequate · 60–79
287Thin · 40–59
39Opaque · 0–39
2security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
ThomasV73272156
SomberNight35226350063
f321x37121371070
Sander van Grieken991098057
user323062
Roman Zeyde515053
Sasha Zykov414076
Aaron Fiore414068
ghost43312068
Róbert Nagy111098
Ferdinando Ametrano111096
Felix302074
Analysis record

Published AI watches

Last scanned 13 minutes ago

Informational 15 AI analysisMessage 63 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10816 from accumulator/qml_auth_log_improvement

This commit is a minor logging cleanup in the mobile/QML authentication helper. It changes the wording and placement of debug/error log messages so they reveal the function name only after safely retrieving it, and avoids logging a raw tup…

8dddae68by ghost43+4−41 file
No security note in commit
Moderate 51 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10798 from SomberNight/202608_base43

This commit fixes a performance weakness in Electrum's handling of large Bitcoin transactions encoded in 'base43'. The base43 encoding and decoding functions run in quadratic time, meaning the work grows much faster than the input size. An…

Quadratic-time base43 encode/decode can be triggered on attacker-controlled inputDenial-of-service via CPU exhaustion / UI freeze on large transaction stringsInput-length cap added as a defensive guard, not a full algorithmic fix
0e9f1a0dby Felix+25−92 files
No security note in commit
Low 41 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10799 from SomberNight/202608_android_secure_window

This update tightens a privacy feature on Electrum's Android app that prevents the screen from being captured while sensitive Bitcoin private keys or seed phrases are visible. Before, the protection could be accidentally turned off when mu…

Adds visibility-gated secureWindow bindings to protect WIF keys and seed phrasesPrevents secureWindow from being cleared when multiple sensitive dialogs are stackedTargets Android screenshot/recents-thumbnail protection surface
4622390cby accumulator+17−05 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 98 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

docs: add Coldcard Mk3 seed-entropy security notice to plugin README (#10805)

This commit only adds a documentation warning to Electrum's Coldcard plugin README. It does not change any executable code, cryptographic logic, or wallet behavior. The warning tells users that Coldcard/Coinkite disclosed a firmware bug in…

Documentation-only changeReferences an external hardware-wallet firmware advisoryNo code, cryptography, or plugin behavior modified
2c2a40b6by Róbert Nagy+4−01 file
Vendor flagged security relevance
Low 48 AI analysisMessage 81 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml/android: protect WIF keys from screenshots in more places

This commit tightens screen-shot protection for private Bitcoin wallet keys (WIF keys and seed phrases) in Electrum's Android/QML user interface. It also fixes a bug where one screen (AddressDetails) was leaving the 'secure window' flag pe…

Adds FLAG_SECURE-style screenshot protection to additional private-key dialogsFixes a bug where secureWindow was never unset in AddressDetailsUses QML Binding 'when' with restoreMode semantics to handle stacked secure dialogs safely
739cba5dby SomberNight+17−05 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 92 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

lnpeer: chan_reest: ctn overflow: force-close instead of disconnect

This commit fixes a bug in Electrum's Lightning Network code. Previously, if a malicious or malfunctioning peer sent a channel re-establishment message with extremely large commitment numbers (over 2^48), the local program would hit an int…

Addition of explicit overflow check on untrusted peer-supplied commitment countersReplacement of assertion-failure/disconnect behavior with force-close on misbehaviorNew test cases for ctn overflow in both next_local_ctn and oldest_unrevoked_remote_ctn
b3e441f8by SomberNight+22−32 files
No security note in commit
Informational 18 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

Merge pull request #10791 from SomberNight/202608_wallet_sign_message2

This change moves the trimming of leading/trailing spaces in message-signing fields from the user-interface code into the shared wallet code. For the graphical interfaces (Qt and QML), spaces are still stripped automatically for convenienc…

Behavior change in message signing/verification input handlingCLI now preserves whitespace, which could affect signature validity for messages that intentionally contain leading or trailing whitespaceNo memory-safety, cryptographic, or authentication flaw visible in the diff
b1aa52d7by ghost43+27−185 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: strip whitespaces in GUIs, do not strip in CLI

This commit tidies up how Electrum handles extra spaces around Bitcoin addresses, messages, and signatures when signing or verifying messages. Previously, different parts of the program (desktop GUI, mobile-style GUI, command line) behaved…

Behavior normalization across GUI and CLI interfacesNo cryptographic primitive changedNo privilege boundary crossed
4c3064f5by SomberNight+27−185 files
No security note in commit
Informational 22 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: nicer error msg if pubkey is unrelated

This commit improves the error handling in Electrum's message decryption feature. Previously, if a user tried to decrypt a message using a public key that did not belong to their wallet, the code could proceed and likely fail with a confus…

Input validation added for public key before cryptographic operationUser-facing exception replaces potential internal failureDefensive check prevents use of unrelated key material
92e938f4by SomberNight+5−01 file
No security note in commit
Informational 16 AI analysisMessage 83 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qt: main_window: use TaskThread for each of sign/verify/encrypt/decrypt

This commit moves four message-crypto operations (sign, verify, encrypt, decrypt) in Electrum's Qt wallet window onto a background worker thread so they all behave the same way. It also lets the background thread surface user-facing errors…

Moved blocking wallet crypto calls off the GUI thread, reducing UI freeze / DoS surfaceRemoved local exception swallowing for encrypt_message; errors now propagate through the window's on_error handlerAdded defensive RuntimeError guard for deleted Qt widget in async callback
4a9a199fby SomberNight+28−151 file
No security note in commit
Low 29 AI analysisMessage 35 · Opaque
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: force kwargs

This commit changes how Electrum's message-signing function is called so that callers must explicitly name each argument (address, message, password) rather than passing them by position. The main practical effect is to prevent accidental …

API hardening: keyword-only arguments prevent positional argument swapNo explicit security bug fix or vulnerability disclosure in commit message or diffNo changes to cryptographic logic, password handling, or message parsing
e1eb2a34by SomberNight+9−44 files
No security note in commit
Low 39 AI analysisMessage 45 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: sign_message: consolidate checks from UIs

This commit moves input-validation checks for signing, verifying, encrypting, and decrypting messages out of the user-interface code and into the shared wallet logic. It also adds type checks so that non-text inputs are rejected earlier. T…

Input validation moved from UI controllers into core wallet logicType checks added at the CLI command entry points for message-crypto operationsUserFacingException used consistently for address, wallet, script-type, and key-format errors
48893760by SomberNight+89−396 files
No security note in commit
Low 27 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: decrypt_message: consolidate checks from UIs

This commit moves input-validation and wallet-type checks for message decryption out of the user-interface and command-line layers and into the core wallet code. It also removes a faster, separate decryption path for imported wallets so al…

Input validation consolidated into a single core methodWatching-only wallet check moved from UI to wallet layerMultisig wallet unsupported-operation check moved from UI to wallet layer
9a0cc0d6by SomberNight+25−173 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add encrypt_message method, consolidated from UIs

This commit is a simple code cleanup: it moves the message-encryption logic from two separate places (the command-line tool and the Qt graphical interface) into a single shared method on the wallet class. The actual encryption behavior is …

No change to cryptographic primitives or parametersNo change to trust boundaries or input sourcesPure refactor consolidating duplicate code
5e9c8df0by SomberNight+26−183 files
No security note in commit
Informational 13 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

wallet: refactor: add verify_message method, consolidated from UIs

This commit is a routine code cleanup: it moves message-signature verification out of three user-interface files into a single shared helper method in the wallet module. There is no security-relevant behavior change visible in the diff. Th…

No security-relevant functional changeRefactoring only: code deduplicationException handling broadened safely (ValueError covers binascii.Error and unicode errors)
ff5bbb04by SomberNight+26−304 files
No security note in commit
Informational 15 AI analysisMessage 60 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

qt: main_window: add type hints to sign/verify, encrypt/decrypt

This commit only adds Python type hints and renames some function parameters for clarity in the Electrum desktop wallet's sign/verify and encrypt/decrypt message dialogs. It does not change what the code actually does, how it processes use…

0906fc20by SomberNight+45−181 file
No security note in commit
Informational 18 AI analysisMessage 50 · Thin
EL ElectrumElectrum BitcoinSoftware wallets

coldcard: fix get_soft_device_id() discarding its return value

This is a tiny one-line bug fix in Electrum's Coldcard hardware wallet plugin. A helper method that is supposed to fetch a software-based device identifier was calling the parent implementation but accidentally throwing away the result ins…

Missing return value causes method to always return NoneAffects hardware wallet device identification onlyNo change to signing, encryption, or authentication code
d7500508by Felipe Micaroni Lalli+1−11 file
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

qml: strip whitespace from message before signing, as in qt gui

This commit fixes a minor consistency bug in Electrum's newer QML (mobile-style) user interface. When signing a message, the app now removes accidental spaces at the start or end of the message and address, just like the older desktop Qt i…

Behavioral inconsistency between GUI implementations could cause user confusion or failed verificationNo cryptographic weakness introduced; change is input normalizationNo memory-unsafe code, no privilege changes, no network changes
72507328by Ferdinando Ametrano+3−01 file
No security note in commit
Low 48 AI analysisMessage 85 · Strong
EL ElectrumElectrum BitcoinSoftware wallets

config: don't save "hidden wallet" paths in CURRENT_WALLET cv

This commit fixes a privacy leak in the Electrum wallet app. Previously, if a user opened a 'hidden wallet' (one whose filename starts with a dot, like a secret file), Electrum would remember it as the last-used wallet and could reopen it …

Privacy leak: hidden wallet filename persisted in config and could be auto-reopenedInformation disclosure: hidden wallet path exposed in recently-opened listBehavioral fix: setter silently drops sensitive value rather than persisting it
c43cf8e4by SomberNight+14−23 files
No security note in commit
Low 28 AI analysisMessage 73 · Adequate
EL ElectrumElectrum BitcoinSoftware wallets

lnrouter: liquidity hints: add extra penalty if amt near cannot_send

This commit tweaks how Electrum's Lightning Network payment routing avoids channels where a previous payment attempt already failed. Previously, the router would treat a channel almost at its known failure limit almost the same as a channe…

Routing/liquidity-hint logic changed to penalize amounts close to a known cannot_send thresholdAdds defensive assertions on num_inflight_htlcs type and rangeSelf-described by author as a 'completely naive bandaid' / heuristic improvement
ee75ea31by SomberNight+12−21 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-prioritylnworker.has_anchor_channels: return False if channel is closed but not redeemed yetby ThomasV · 2d17252b · Sep 8, 2025 · 1 fileMessage 81 · StrongInformational 20Details
Commit message · ThomasV

lnworker.has_anchor_channels: return False if channel is closed but not redeemed yet

this fixes the following issue: user cannot spend max until channel is redeemed.
see https://x.com/AnyoneOReally1/status/1964352775245951291

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 20/100

This is a small bug fix in Electrum's Lightning wallet. Previously, the wallet treated anchor-type channels as still 'active' even after they were closed, as long as their funds hadn't been fully swept. This caused the wallet to incorrectly reserve extra on-chain funds (preventing the user from spending their full balance) until the channel's closing transaction was fully redeemed. The fix changes the check so a closed channel is no longer considered active, allowing the user to spend their maximum available balance sooner. It is a usability/funds-availability issue, not a theft or remote-exploitation vulnerability.

Lower-priorityfix: Re-add fiat values to csv history exportby f321x · 55d8974c · Sep 8, 2025 · 1 fileMessage 94 · StrongInformational 15Details
Commit message · f321x

fix: Re-add fiat values to csv history export

Re-add fiat values to the csv history export as they were missing due to
a regression.

94/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit fixes a bug in Electrum's Qt wallet history export where fiat (local currency) values and fees were missing from CSV exports. The change re-adds those columns by asking the wallet to include fiat data and summing up fiat fees across grouped transactions. There is no security issue here—it's a straightforward data-export bug fix.

AI review queuedwallet history: also add fiat value to child txby f321x · c438f1df · Sep 8, 2025 · 1 fileMessage 60 · AdequateInformational 18Details
Commit message · f321x

wallet history: also add fiat value to child tx

Makes `get_full_history` also add the fiat values to the children of a
tx, not only to the group itself.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit is a minor user-interface fix for Electrum's transaction history. Previously, when showing a group of related transactions, the fiat (local currency) value was only shown for the parent/group entry and not for each child transaction. The change loops through both the parent and child entries so each gets its own fiat value. There is no indication this is a security fix; it appears to be a display completeness improvement.

Lower-prioritystorage.write: make os_chmod best-effortby SomberNight · 9d13855c · Sep 5, 2025 · 1 fileMessage 68 · AdequateLow 29Details
Commit message · SomberNight

storage.write: make os_chmod best-effort

closes https://github.com/spesmilo/electrum/issues/8409
closes https://github.com/spesmilo/electrum/pull/8997

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Low 29/100

This change makes Electrum tolerate a failure when setting restrictive file permissions on a temporary wallet file. Previously, if the operating system refused the permission change (for example on some network file systems), saving a wallet would crash. Now it logs a warning and continues. The security trade-off is that in rare cases a wallet file may be created with slightly looser permissions than intended, but the wallet data is still encrypted by the user's password if the wallet is password-protected.

Security candidateqt confirm_tx_dialog: fix wallet.get_candidates_for_batchingby SomberNight · d01e6b81 · Sep 5, 2025 · 3 filesMessage 81 · StrongLow 34Details
Commit message · SomberNight

qt confirm_tx_dialog: fix wallet.get_candidates_for_batching

I don't understand what the "coins not used" comment meant here.
It was added in the change away from the old config.WALLET_BATCH_RBF option
(https://github.com/spesmilo/electrum/commit/ab14c3e1382c1af48baff73b790aecfbd069eb8a).

The `coins` param *is used* in wallet.get_candidates_for_batching.
Without setting that, the returned set of candidates was restricted to
only base txs that had a large enough change output to cover *all* the newly added outputs.
Instead, it is desirable to allow adding new inputs.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 34/100

This commit fixes a bug in Electrum's transaction batching feature. Previously, when suggesting which existing transactions could be combined (batched) with a new payment, the code ignored the wallet's available unspent coins. This made the batching suggestions too restrictive and could lead to suboptimal or unexpected transaction construction. The fix passes the available coins into the candidate-selection logic and documents the behavior. There is no direct evidence in the commit of a security vulnerability or exploit.

AI review queuedcommands: add clear error that plugin commands cannot be run with -oby SomberNight · 7455cf9d · Sep 5, 2025 · 1 fileMessage 73 · AdequateInformational 22Details
Commit message · SomberNight

commands: add clear error that plugin commands cannot be run with -o

note that atm none of the plugin commands are explicitly marked with 'n' but all require it.
Also note that 'w' for plugin commands kind of implies 'n' anyway, as the 'load_wallet' hook relies on having a daemon.

```
$ ./run_electrum -o --testnet labels_pull
Password:
1.96 | E | __main__ | error running command (without daemon)
Traceback (most recent call last):
File "/home/user/wspace/electrum/./run_electrum", line 587, in handle_cmd
result = fut.result()
File "/usr/lib/python3.13/concurrent/futures/_base.py", line 456, in result
return self.__get_result()
~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/home/user/wspace/electrum/./run_electrum", line 267, in run_offline_command
result = await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/commands.py", line 202, in func_wrapper
return await func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/wspace/electrum/electrum/commands.py", line 2214, in func_wrapper
kwargs['plugin'] = daemon._plugins.get_plugin(plugin_name)
^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute '_plugins'
```

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 22/100

This commit fixes a crash in Electrum's command-line tool. When a user ran a plugin-provided command in offline mode (using the -o flag), the program tried to access a daemon object that didn't exist, causing an ugly AttributeError. The patch makes two changes: it automatically marks all plugin commands as requiring a daemon, and it adds an explicit check so the program fails cleanly if a plugin command is somehow run without a daemon. This is a robustness/usability fix rather than a security vulnerability.

AI review queuedkeystore: get_private_keys should not return Noneby SomberNight · 75195b66 · Sep 5, 2025 · 3 filesMessage 68 · AdequateLow 33Details
Commit message · SomberNight

keystore: get_private_keys should not return None

closes https://github.com/spesmilo/electrum/issues/10200

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 33/100

This commit fixes a small but real bug in Electrum's handling of private key imports. Previously, when a user pasted an empty or invalid list of private keys, the function returned 'None' (meaning 'nothing'). Some parts of the code treated 'None' as if keys were present, which could let an empty or invalid import proceed unexpectedly. The fix makes the function return an empty list instead, so callers correctly recognize there are no valid keys. The direct security impact is limited because the user still has to initiate an import and supply input, but it removes a logic trap that could mishandle private key material.

Lower-priorityswapserver: add commands for statsby f321x · 708aefb0 · Sep 5, 2025 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · f321x

swapserver: add commands for stats

Adds two command to the swapserver plugin to retrieve some stats so swap
providers can see more easily what is going on on their swapserver.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100

This commit adds two read-only statistics commands to Electrum's swapserver plugin, allowing swap providers to view their swap history and summary. It does not change how swaps are executed, does not move funds, and does not introduce obvious security bugs. The main consideration is that these commands expose swap-related financial data through existing command interfaces, but they appear to use the same access controls as other wallet-lightning ('wl') commands.

Lower-prioritychore: replace calls to asyncio.iscoroutinefunctionby f321x · e7bb75bc · Sep 5, 2025 · 4 filesMessage 97 · StrongInformational 15Details
Commit message · f321x

chore: replace calls to asyncio.iscoroutinefunction

Replace calls to deprecated asyncio.iscoroutinefunction with calls to
inspect.iscoroutinefunction to prevent the following deprecation
warnings from showing up if running with Python 3.14:
```
/home/user/code/electrum-fork/electrum/util.py:1225: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
assert asyncio.iscoroutinefunction(func), 'func needs to be a coroutine'
/home/user/code/electrum-fork/electrum/util.py:507: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
if asyncio.iscoroutinefunction(func):
/home/user/code/electrum-fork/electrum/util.py:1246: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
assert asyncio.iscoroutinefunction(func), 'func needs to be a coroutine'
/home/user/code/electrum-fork/electrum/lnpeer.py:272: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
assert asyncio.iscoroutinefunction(func), 'func needs to be a coroutine'
/home/user/code/electrum-fork/electrum/util.py:1225: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
assert asyncio.iscoroutinefunction(func), 'func needs to be a coroutine'
/home/user/code/electrum-fork/electrum/util.py:507: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
if asyncio.iscoroutinefunction(func):
```

97/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This is a routine cleanup change that swaps one Python built-in check for an equivalent one. It removes future deprecation warnings but does not change what the program actually does or fix any security problem.

Lower-priorityswaps: add type hints to gui swap suggestion flowby f321x · 45bdd6a8 · Sep 4, 2025 · 6 filesMessage 60 · AdequateInformational 15Details
Commit message · f321x

swaps: add type hints to gui swap suggestion flow

Adds type more type hints and clearer variable names to the swap
suggestion flow.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a code cleanup: it adds type hints and renames a parameter from recv_amount_sat to recv_amount_sat_or_max to reflect that it can be either a number or the special 'max' marker '!'. It also makes the run_swap_dialog method consistently return a boolean. There is no security-relevant behavior change.

Lower-priorityqt: SwapDialog: don't force amount on userby f321x · 3df1af8e · Sep 4, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · f321x

qt: SwapDialog: don't force amount on user

When a SwapDialog gets initiated with a recv_amount_sat through the
receive tab the Max Button and edits are disabled and the user is forced
to do a swap with the preset amount. Maybe the user wants to do a larger
swap?

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit removes a UI restriction in Electrum's swap dialog. Previously, when opening a submarine swap from the receive tab with a pre-set amount, the amount fields and Max button were disabled, forcing the user to swap exactly that amount. The change keeps those fields editable so users can adjust the swap amount if they want a larger or different swap. It also tweaks an error message to clarify that a swap may not be possible with the current provider. There is no security issue here.

Lower-priorityci: add task to run unittests with frozen depsby SomberNight · b60d2e96 · Sep 3, 2025 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · SomberNight

ci: add task to run unittests with frozen deps

I think it makes sense to run the tests with both the "latest" dependencies,
and with the pinned dependencies that we package for releases.

Testing with latest can reveal changes/issues with new dep versions,
while testing with pinned is testing what users will actually run.
Previously we were only testing with "latest".

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes the project's continuous integration (CI) configuration. It adds a new automated test job that runs the existing unit tests using the exact pinned dependency versions shipped in Electrum's release binaries, in addition to the existing job that tests with the latest dependencies. There is no change to application code, no bug fix, and no security patch.

Lower-priorityci: tests: move away from tox, just use pytest directlyby SomberNight · 6583a986 · Sep 3, 2025 · 3 filesMessage 100 · StrongInformational 15Details
Commit message · SomberNight

ci: tests: move away from tox, just use pytest directly

- it was originally added in https://github.com/spesmilo/electrum/pull/1334,
with the goal of simplifying running the tests on local dev machines.
However this usage is not documented anywhere, and AFAIK regular contributors
don't use it either.
- tox just adds another layer of abstraction that is not that useful IMO
- I want more control over which electrum-deps are installed, which tox is
(in this case) unhelpfully abstracting away

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit is a routine cleanup of the project's automated testing setup. It removes the 'tox' tool and runs tests directly with pytest. There is no change to the Electrum wallet application itself, no bug fix, and no security-related change.

Lower-prioritydaemon: get_wallet: handle OSError for weiiird pathsby SomberNight · c68deb25 · Sep 3, 2025 · 2 filesMessage 81 · StrongInformational 24Details
Commit message · SomberNight

daemon: get_wallet: handle OSError for weiiird paths

I think _wallet_key_from_path should not raise.
This is probably the sane way to deal with this.
Though all this is assuming that os.path.realpath can be treated as consistent/stateless.

closes https://github.com/spesmilo/electrum/issues/10182

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 24/100

This commit hardens Electrum's daemon so that unusual or malformed wallet file paths no longer cause the program to crash with an unhandled error. It wraps a filesystem path normalization call in a try/except block and logs a warning instead of raising an exception. The change is defensive and improves robustness, but it does not appear to fix an active security vulnerability.

Security candidatecontrib: shell scripts: add quotes around more variablesby SomberNight · 4a0a3bb3 · Sep 2, 2025 · 11 filesMessage 50 · ThinLow 26Details
Commit message · SomberNight

contrib: shell scripts: add quotes around more variables

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Low 26/100

This commit adds missing quotation marks around variables in a collection of build and release shell scripts. In shell scripting, unquoted variables can split or be interpreted unexpectedly if paths contain spaces or special characters. The change is defensive hardening of the project's build tooling rather than a fix for a specific reported exploit. It reduces the risk of build failures or accidental command injection during release builds, but it does not patch a vulnerability in the wallet software that end users run.

Lower-priorityqml: android: add padding to report dialog in ExcDialogby f321x · debb4da9 · Sep 2, 2025 · 1 fileMessage 81 · StrongInformational 15Details
Commit message · f321x

qml: android: add padding to report dialog in ExcDialog

Adds padding to the report content dialog in the QML ExceptionDialog if
required on android.
Followup https://github.com/spesmilo/electrum/pull/10178

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit is a minor user-interface layout fix for the Android version of Electrum. It adds spacing so that the crash/error report dialog does not overlap the Android system status bar at the top or the navigation bar at the bottom. There is no security-relevant change in the code.

AI review queuedqml: add some type hints to qetxfinalizerby SomberNight · c8a14cc2 · Sep 1, 2025 · 3 filesMessage 45 · ThinInformational 15Details
Commit message · SomberNight

qml: add some type hints to qetxfinalizer

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds Python type hints and fixes a minor return-value consistency bug in the QML GUI code. It does not change runtime behavior in a security-relevant way, and there is no indication it fixes a vulnerability.

AI review queuedqt: receive tab: also suggest swap for 0 amnt reqby f321x · a62dbb56 · Sep 1, 2025 · 2 filesMessage 80 · StrongInformational 18Details
Commit message · f321x

qt: receive tab: also suggest swap for 0 amnt req

Also suggest a submarine swap if the user creates a 0 amount invoice and
has 0 sat incoming liquidity as it won't be possible to receive
anything.
Users potentially just open a channel, then want to create a lightning invoice
without amount like they are used to from onchain addresses, and then
wonder why receiving doesn't work. So we should at least propose a swap
if there is no inbound liquidity at all.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This commit is a small user-experience improvement in the Electrum Bitcoin wallet's Qt receive tab. It makes the wallet suggest a 'submarine swap' (a way to gain inbound Lightning capacity) even when the user creates a zero-amount Lightning invoice, if they currently have no incoming liquidity. It also tweaks some help messages shown to users. There is no security vulnerability here.

Lower-priorityswaps: make min swap amount a const varby f321x · 2c67c5e1 · Sep 1, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · f321x

swaps: make min swap amount a const var

instead of hardcoding 20_000 sat directly in the code, make
MIN_SWAP_AMOUNT_SAT a const variable outside of SwapManager so it can be
used for other code too.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a simple code cleanup: it replaces a hardcoded number (20,000 satoshis) with a named constant variable. The actual value and behavior are unchanged. There is no security issue here.

Lower-priorityqml: adapt exception dialog to edge-to-edge layoutby f321x · 0263b5ec · Aug 28, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · f321x

qml: adapt exception dialog to edge-to-edge layout

Even though the exception dialog inherits from ElDialog the padding
didn't work as it overwrites the properties of the ElDialog. So the
padding has to be applied separately to the ExceptionDialog.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a purely cosmetic UI adjustment for Electrum's mobile-style QML interface. It changes how padding is applied to the exception/error dialog so that it displays correctly on modern edge-to-edge phone screens. There is no security relevance.

Lower-priorityandroid: 16kb alignment updatesby Sander van Grieken · 87d82f38 · Aug 28, 2025 · 5 filesMessage 58 · ThinInformational 19Details
Commit message · Sander van Grieken

android: 16kb alignment updates

p4a ref: electrum_20240930_android_16kb_page_alignment
Dockerfile: obtain 16kb aligned NDK r23 from google CI (dl-ndk-ci.sh)
barcode, zxing-cpp: add 16kb align patch
build_tools_util.sh: add function to apply a patch

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 19/100

This commit updates Electrum's Android build setup so the app works on newer Android devices that require 16 KB memory page alignment. It swaps the Android NDK to a special canary/CI build, adds a small patch to the barcode scanner library, and adds a helper script to apply patches. There is no direct evidence this fixes an active security vulnerability; it appears to be a compatibility/build hardening change.

Lower-prioritylnurl: only sanitize untrusted LNURL errorsby f321x · bcb74069 · Aug 27, 2025 · 1 fileMessage 60 · AdequateModerate 50Details
Commit message · f321x

lnurl: only sanitize untrusted LNURL errors

it is not neccessary to sanitize all LNURLErrors as most are just source
strings.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
defensive validation
AI analysis · Moderate 50/100

This commit tightens how Electrum handles error messages coming from external LNURL services. Previously, every LNURL error was wrapped with a 'do not trust this message' warning. The change splits those errors into two kinds: errors generated from Electrum's own code now display normally, while only errors returned by untrusted LNURL servers are sanitized and flagged as untrusted. It also applies a text-safety utility to the server-provided message before showing it to the user, reducing the chance that a malicious or compromised LNURL server could trick a user through a crafted error string.

AI review queuedqml: use declarative form for invoiceResolved and requestResolved in WalletMainViewby Sander van Grieken · 313c8a13 · Aug 27, 2025 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Sander van Grieken

qml: use declarative form for invoiceResolved and requestResolved in WalletMainView

(cherry picked from commit 78b2e3df6c47ad5d5d119cbc2372e62807f372fd)

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a minor code-quality refactor in Electrum's mobile/QML user interface. It changes how two internal signals (invoiceResolved and requestResolved) are declared and connected, switching from an imperative connection in Python to a declarative connection in QML. There is no visible security relevance: no input validation, cryptography, network handling, or asset-moving logic is changed.

Lower-priorityqml: lnurlw: bind walletCanReceive to in-liquidityby f321x · c2f5b3ba · Aug 27, 2025 · 1 fileMessage 73 · AdequateInformational 17Details
Commit message · f321x

qml: lnurlw: bind walletCanReceive to in-liquidity

binds the walletCanReceive variable to the available inbound liquidity
so the withdraw button gets enabled when the channels reconnect if the
user opens a lnurlw request dialog before the channels have connected.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 17/100

This is a small user-interface fix in Electrum's mobile-style QML wallet. It makes the 'Withdraw' button correctly enable itself once Lightning channels finish connecting, if the user opened a withdrawal request dialog early. There is no indication this is a security fix; it appears to be a usability/bug-fix for a UI state not updating properly.

AI review queuedqml: separate PI resolving from QEInvoiceParserby f321x · b90090e2 · Aug 27, 2025 · 8 filesMessage 68 · AdequateInformational 10Details
Commit message · f321x

qml: separate PI resolving from QEInvoiceParser

separates the resolving step from the QEInvoiceParser so the 'recipient'
can be resolved first and then either an QEInvoiceParser can be used if
it is a sending request that has been resolved (invoice, address,
lnurlp, ...), or RequestDetails can be used if the resolved 'recipient'
turns out to be a voucher/LNURLW string.

# Conflicts:
# electrum/gui/qml/qeinvoice.py

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 10/100

This commit is a code cleanup in Electrum's mobile/QML user interface. It splits the job of interpreting a payment string (like a Lightning invoice or LNURL link) into two parts: one that resolves/fetches remote details, and one that handles the resulting payment or withdrawal request. There is no indication in the commit that it fixes a security bug or vulnerability; it appears to be a refactor to support voucher/LNURL-withdrawal flows more cleanly.