Electrum

electrum.org
Electrum

Long-standing Python-based Bitcoin wallet with good security features. Private keys are encrypted and do not touch the internet and balance is checked with a watch-only wallet. Compatible with other wallets, so there is no tie-in, and funds can be recovered with your secret seed. It supports proof-checking to verify transactions using SPV, multi-sig, and add-ons for compatibility with hardware wallets. A decentralized server indexes ledger transactions, meaning it's fast and doesn't require much disk space. The potential security issue here would not be with the wallet, but rather your PC - you must ensure your computer is secure and your wallet has a long, strong passphrase to encrypt it with.

Open Source

Electrum Source Code

Author

spesmilo

Description

Electrum Bitcoin Wallet

#bitcoin#bitcoin-wallet#electrum#lightning#lightning-network#python

Homepage

https://electrum.org

License

MIT

Created

02 Aug 12

Last Updated

28 Jul 26

Latest version

seed_v10

Primary Language

Python

Size

71,274 KB

Stars

8,533

Forks

3,451

Watchers

8,533

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • ghost43 (27 Jul 26)

    Merge pull request #10773 from f321x/ln_bug_mpp lnwallet: fix fee buget check regression

  • f321x (27 Jul 26)

    test_lnpeer: add unittest for mpp fee budget check

  • f321x (27 Jul 26)

    LNWallet: fix fee budget check regression The fee budget during local pathfinding route creation incorrectly compared the full payment amount against the full budget on every route instead of the partial amount against its fraction of the budget. This is a regression introduced by df5c8c4c9 and makes it possible for a payment to exceed the budget or a route to be incorrectly considered too expensive.

  • Felix (27 Jul 26)

    Merge pull request #10772 from spesmilo/bump_review_ci ci: bump security review ci model to opus 5

  • Felix (27 Jul 26)

    ci: bump security review ci model to opus 5 Bump the LLM used by the security review CI script from Claude Opus 4.8 to Claude Opus 5

  • ThomasV (24 Jul 26)

    Merge pull request #10763 from f321x/register_onion_keys wallet_db: register onion_keys converter

  • ghost43 (23 Jul 26)

    Merge pull request #10768 from SomberNight/202607_qt_rename_themes qt: rename color themes (the user-visible names of the themes)

  • SomberNight (23 Jul 26)

    qt: rename color themes (the user-visible names of the themes) "Light" is actually the Platform-dependent system theme, where we let Qt define the palette and it leave it alone. Qt in turn mostly defers to the OS. On modern windows/macos/gnome/kde/etc, if the OS is set to "dark mode", Electrum will end up using a system-specific dark mode. Hence the name "Light" is confusing. "Dark" is the qdarkstyle theme, which is largely platform-independent. I think it's fine if these names are not completely "user-friendly". closes https://github.com/spesmilo/electrum/issues/10767

  • ghost43 (23 Jul 26)

    Merge pull request #10765 from f321x/jsondb_recovery_modified json_db: set_modified after removing incomplete data

  • ghost43 (23 Jul 26)

    Merge pull request #10764 from f321x/jsonpointer_escape_path json_db: escape '\' and '~' in json patch pointer

  • f321x (21 Jul 26)

    json_db: set_modified after incomplete data Set the JsonDB modified after `maybe_load_incomplete_data` removed a corrupted patch. Otherwise we might not override the file on disk, append more patches and lose them all again on the next reload.

  • f321x (21 Jul 26)

    json_db: escape '\' and '~' in json patch pointer > Because the characters '~' (%x7E) and '/' (%x2F) have special meanings in JSON Pointer, '~' needs to be encoded as '~0' and '/' needs to be encoded as '~1' when these characters appear in a reference token. https://www.rfc-editor.org/info/rfc6901/

  • f321x (21 Jul 26)

    wallet_db: register onion_keys converter `Channel.onion_keys` had no registered converter for hex -> bytes, causing `pop_onion_key()` to return a hex str instead of bytes after the keys got loaded from db following a restart.

  • ThomasV (16 Jul 26)

    Merge pull request #10753 from f321x/destroy_swap_transport swaps: destroy swap transport on failed initialization

  • f321x (14 Jul 26)

    swaps: destroy swap transport on failed initialization Call `swap_transport.destroy()` when the swap transport initialization task fails, otherwise the task will keep the swap transport tasks alive, leaking a swap transport for each failed connection attempt.

  • ghost43 (13 Jul 26)

    Merge pull request #10752 from SomberNight/202607_lntransport_exc lntransport: wrap connection errors in send_bytes_and_drain

  • SomberNight (13 Jul 26)

    lntransport: wrap connection errors in send_bytes_and_drain LightningPeerConnectionClosed is handled in Peer.handle_disconnect. ``` 162.39 | E | lnpeer.Peer.[LNGossip, 02ab5336d0-d8be58cb] | Exception in main_loop: ConnectionResetError('Connection lost') Traceback (most recent call last): File "/home/user/wspace/electrum/electrum/util.py", line 1218, in wrapper return await func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/wspace/electrum/electrum/lnpeer.py", line 544, in wrapper_func return await func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/user/wspace/electrum/electrum/lnpeer.py", line 558, in main_loop async with self.taskgroup as group: ^^^^^^^^^^^^^^ File "/home/user/wspace/aiorpcX/aiorpcx/curio.py", line 304, in __aexit__ await self.join() File "/home/user/wspace/electrum/electrum/util.py", line 1423, in join task.result() ~~~~~~~~~~~^^ File "/home/user/wspace/electrum/electrum/lnpeer.py", line 897, in _message_loop await self._process_message(msg) File "/home/user/wspace/electrum/electrum/lnpeer.py", line 277, in _process_message await f(*args) File "/home/user/wspace/electrum/electrum/lnpeer.py", line 389, in on_ping await self.transport.send_bytes_and_drain(raw_msg) File "/home/user/wspace/electrum/electrum/lntransport.py", line 238, in send_bytes_and_drain await self.writer.drain() File "/usr/lib/python3.13/asyncio/streams.py", line 386, in drain await self._protocol._drain_helper() File "/usr/lib/python3.13/asyncio/streams.py", line 166, in _drain_helper raise ConnectionResetError('Connection lost') ConnectionResetError: Connection lost ```

  • SomberNight (10 Jul 26)

    contrib/make_download: fix imports not sure why this was not an issue before(?) perhaps due to python version differences ``` $ ./contrib/make_download /home/user/wspace/electrum-web Traceback (most recent call last): File "/home/user/wspace/electrum/./contrib/make_download", line 17, in <module> version_spec = importlib.util.spec_from_file_location('version', 'electrum/version.py') ^^^^^^^^^^^^^^ AttributeError: module 'importlib' has no attribute 'util' ```

  • SomberNight (08 Jul 26)

    release notes: bump 4.8.0 date for second attempt We failed to get a full quorum to reproduce the prior git tag. The android apks were problematic to reproducibly build. should be fixed by https://github.com/spesmilo/electrum/pull/10739 here we go again

  • ghost43 (07 Jul 26)

    Merge pull request #10743 from SomberNight/202607_fresh_clone_vartmp build: move default FRESH_CLONE location from /tmp to /var/tmp

  • ghost43 (07 Jul 26)

    Merge pull request #10739 from SomberNight/202607_android_build android build: use --no-isolation, hash-pin more deps, only one install of setuptools

  • f321x (07 Jul 26)

    android build: patch hostpython3 to not install setuptools Add a patch to the hostpython3 p4a recipe to prevent it from installing setuptools as part of the ensurepip invocation. Setuptools is later installed from a hash-pinned recipe. --- NOTE(ghost43): this is a workaround for reproducible-build issues we ran into during the 4.8.0 release. see https://github.com/spesmilo/electrum/pull/10739#issuecomment-4904680121 Since the last p4a rebase, p4a is installing some python packages using "pip install --target". We noticed that hostpython had two different versions of setuptools installed at the same time (two dist-info folders in site-packages/). This is due to the `--target` option for `pip install`. We are calling it with `--upgrade` too, but even then apparently it does not remove old versions. Indeed, when testing locally in a venv it leaves all .dist-infos there hanging. According to https://github.com/pypa/pip/issues/13763#issuecomment-3783977222, `--target` is not suitable or intended for this usecase at all. Current patch is only focused on setuptools, as a minimal workaround. Ultimately the same issue could arise with any other package. For example, still with ensurepip itself, we could be left with multiple versions of pip installed. Or anything we install via hostpython_prerequisites could have duplicate versions installed...

  • SomberNight (07 Jul 26)

    build: move default FRESH_CLONE location from /tmp to /var/tmp Apparently many distros these days mount /tmp as RAM-disk. Even debian (starting with 13) does this now. The Android build needs to store dozens of gigs, so RAM is often not sufficiently large.

  • SomberNight (04 Jul 26)

    android build: forbid buildozer to install unversioned deps of p4a While p4a itself does not need ninja in our usage, to build Qt6, we need ninja. However instead of installing it from PyPI, I think debian main is much more trustworthy.

  • SomberNight (04 Jul 26)

    android build: build p4a recipes with --no-isolation the core change is https://github.com/spesmilo/python-for-android/commit/8c0fcc9ef2e559918ca96ecde6e09fe521bb1427 the rest here just follow that

  • SomberNight (04 Jul 26)

    release notes: mention increased min android version ref https://github.com/spesmilo/electrum/pull/10485

  • ghost43 (02 Jul 26)

    Merge pull request #10734 from f321x/qml_people qml: add myself to About page

  • f321x (02 Jul 26)

    qml: add myself to About page

  • ThomasV (02 Jul 26)

    update locale

  • ThomasV (02 Jul 26)

    Merge pull request #10719 from f321x/release_v4.8.0 Release v4.8.0

Electrum Security

5.3/10

Repo Security Summary

Updated 13 Jul 26

  • Dangerous-Workflow 0/10
  • Maintained 10/10
  • Code-Review 3/10
  • Security-Policy 10/10
  • CII-Best-Practices 0/10
  • Packaging N/A
  • Token-Permissions 10/10
  • Binary-Artifacts 10/10
  • License 10/10
  • Fuzzing 0/10
  • Signed-Releases N/A
  • Pinned-Dependencies 5/10
  • Branch-Protection N/A
  • SAST 0/10

Security Advisories (5)

  • medium Patched

    GHSA-vw94-r84p-66qf External Plugin authorization bypass: local code execution

  • low Patched

    GHSA-q7m2-785w-r585 Nostr Wallet Connect plugin: daily spending limit bypass

  • medium Patched

    GHSA-8r85-vp7r-hjxf receiving with Lightning: partial MPP might be accepted

  • high Patched

    GHSA-9gpc-prj9-89x7 sending with Lightning: payment_preimage validation is skipped on Android

  • medium Patched

    GHSA-4fh4-hx35-r355 BIP70 payment requests `?r=` field supports `file://` URIs, allowing attacker to trick victim machine to `open()` arbitrary file

Electrum Website

Website

Electrum Bitcoin Wallet

Electrum Bitcoin Wallet.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address 172.67.179.87
  • Location San Francisco, California, United States of America, NA
  • ISP CloudFlare Inc.
  • ASN AS13335

Associated Countries

  • US US
  • FR FR

Safety Score

Website marked as safe

100%

Blacklist Check

electrum.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Electrum Reviews

More Crypto Wallets

  • BitBox02

    BitBox02

    shiftcrypto.ch

    Open source hardware wallet, supporting secure multisig with the option for making encrypted backups on a MicroSD card.

  • An easy-to-use, super secure Bitcoin hardware wallet, which can be used independently as an air-gapped wallet. ColdCard is based on partially signed Bitcoin transactions following the BIP174 standard. Built specifically for Bitcoin, and with a variety of unique security features, ColdCard is secure, trustless, private, and easy-to-use. Companion products for the ColdCard include: BlockClock, SeedPlate, and ColdPower.

  • A steel plate, with engraved letters which can be permanently screwed - CryptoSteel is a good fire-proof, shock-proof, water-proof, and stainless cryptocurrency backup solution.

  • Sparrow is a Bitcoin wallet for those who value financial self-sovereignty. Sparrow’s emphasis is on security, privacy, and usability. Sparrow does not hide information from you - on the contrary, it attempts to provide as much detail as possible about your transactions and UTXOs, but in a way that is manageable and usable.

  • Open source, cross-platform, offline, crypto wallet, compatible with 1000+ coins. Your private key is generated on the device, and never leaves it, all transactions are signed by the Trezor, which ensures your wallet is safe from theft. There are native apps for Windows, Linux, MacOS, Android, and iOS, but Trezor is also compatible with other wallets, such as Wasabi. You can back the Trezor up, either by writing down the seed, or by duplicating it to another device. It is simple and intuitive to use, but also incredibly customizable with a large range of advanced features.

  • An open source, native desktop wallet for Windows, Linux, and MacOS. Wasabi implements trustless CoinJoins over the Tor network. Neither an observer nor the participants can determine which output belongs to which input. This makes it difficult for outside parties to trace where a particular coin originated from and where it was sent to, which greatly improves privacy. Since it's trustless, the CoinJoin coordinator cannot breach the privacy of the participants. Wasabi is compatible with cold storage and hardware wallets, including OpenCard and Trezor.

About the Data: Electrum

API

You can access Electrum's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/electrum

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Electrum

Help your friends compare Crypto Wallets, and pick privacy-respecting software and services.
Share Electrum and Awesome Privacy with your network!

View Crypto Wallets (7)