ChangeLog¶
Version 2.0.0 (03 July 2026)¶
TL;DR:
new DB schema, so you need to rebuild from scratch. No more “DB::flush_count overflow”.
Bitcoin Core >=31 is now required, with txospenderindex=1
added support for Electrum Protocol 1.7
running with free-threaded CPython is now (experimentally) supported, and is much faster
Breaking changes to on-disk database. Server operators need to manually delete old DB, no migration path. New DB will be rebuilt while rescanning again from genesis.
in return, no more manual “history compaction” and unexpected downtimes every year: no more “DB::flush_count overflow” (spesmilo/electrumx#88)
the size of the new DB is comparable to the old one, however:
We now require Bitcoin Core to have
txospenderindex=1(added in Bitcoin Core 31) in addition totxindex=1. This is needed to serve theblockchain.outpoint.subscribeRPC added in Electrum Protocol 1.7.For reference, on Bitcoin mainnet around height=950k,
- the ElectrumX db uses around 122 GiB (using LevelDB, roughly same for both of e-x 1.x and 2.0),
note: using RocksDB 9, it is a bit smaller, around 106 GiB
.bitcoin/blocks/uses 788 GiB,.bitcoin/chainstate/uses 12 GiB,.bitcoin/indexes/txindex/uses 66 GiB,.bitcoin/indexes/txospenderindex/uses 88 GiB (new!)
This also means that we now require Bitcoin Core 31.0 or newer (for
COIN=Bitcoin).
env: the previously optional envvar
DB_ENGINE, is now mandatory.choose either
leveldborrocksdbin ElectrumX 1.x versions, the default was leveldb.
You need to install the appropriate dependencies for your engine, see the
[leveldb]and[rocksdb]pip extras and the “Database Engine” section of the HOWTO.Previously RocksDB was difficult to use as the python bindings for it have been unmaintained for years. By the super-slop-powers of LLMs, we revived the python bindings as
rocksdb-ngand made it compatible with modern cpython, cython, and rocksdb. The changes are reviewable and not really slop. (see spesmilo/electrumx#347) rocksdb-ng (starting with version 2.3) is also compatible with free-threaded python, see “performance” section.LevelDB was written with HDDs in mind. RocksDB is more modern and on an SSD takes around ~25% less time than LevelDB to sync from genesis. Given that this release contains breaking DB changes and a resync is needed anyway, maybe try out RocksDB :)
performance:
the BlockProcessor is now massively multi-threaded, both inside a single block and across a span of blocks. This can mainly only be taken advantage of if the GIL (Global Interpreter Lock) is disabled, that is, when using a free-threaded python interpreter: e.g. cpython
3.14t, compiled with--disable-gil. On a decent modern machine with a multi-core CPU, this has been measured to cut initial sync time from genesis to a bit less than half. OTOH, much more RAM is required for the parallel processing (example: approx 2 GB when syncing with GIL, 8 GB when syncing without GIL).processing a single block at the tip, when already caught up, is expected to take around half the time, regardless of the GIL. Still, without the GIL, it is even faster.
for more details, see spesmilo/electrumx#369
the (block)Prefetcher and the Mempool code are now partially event-based (but still also polling): e.g. a mempool update is triggered as soon as processing a new block begins (and part of the work is done concurrently)
json (de)serialization can now optionally use the Rust-based
orjsonlibrary (via theorjsonpip extra), replacing the previousujsonandrapidjsonextras.
Dockerfiles: the existing Dockerfile was updated and cleaned up a bit, and it serves as a simple minimal example to show how to run ElectrumX. There is now also a second Dockerfile that sets up a free-threaded python for a beefy server to utilise the above-mentioned performance gains. See them in
contrib/. (also see the new runtime logline “Python GIL enabled” to verify effect)- protocol:
new: implement electrum protocol version 1.7 (spesmilo/electrum-protocol#2). The min supported protocol version remains 1.4, the max is now 1.7.
LocalRPC: new command: “inspect_session” (spesmilo/electrumx#361).
Version 1.20.0 (03 June 2026)¶
Small fixes and general maintenance.
After this release, the master branch will move towards a 2.0 release, which will require a resync from genesis. So for a while, master might be less stable than usual.
fix: lib/tx.py: vsize calculation was off by 6-8 vbytes (spesmilo/electrumx#328). Added tests. The discrepancy was externally observable via the mempool.get_fee_histogram RPC.
fix: don’t get stuck during shutdown waiting for SessionManager to stop (spesmilo/electrumx#339)
fix: protocol: name of arg for broadcast_package RPC: tx_package->raw_txs (c9b72e7e)
changed: peer discovery: allow short chain splits (spesmilo/electrumx#351)
changed: rm ‘attrs’ as a direct dependency, use stdlib dataclasses instead (spesmilo/electrumx#345)
new: daemon: check early “txindex” is enabled for bitcoind, error if missing (spesmilo/electrumx#349)
new: coins: add Bitcoin mutinynet (spesmilo/electrumx#352)
maintenance: coins: some clean-up (spesmilo/electrumx#344, spesmilo/electrumx#348, …)
maintenance: moved CI from Cirrus CI to Github Actions (spesmilo/electrumx#340)
(We also made some changes to make RocksDB practical and nicer to use, but if you currently use LevelDB, maybe consider waiting for 2.0 before you resync the DB)
Version 1.19.0 (11 Nov 2025)¶
- protocol:
new: implement electrum protocol version 1.6 (spesmilo/electrumx#317, …) (spesmilo/electrum-protocol#6). The min supported protocol version remains 1.4, the max is now 1.6.
- coins:
changed: for COIN=Bitcoin, there is now a min required bitcoind version: Bitcoin Core 28.0 (or Knots 28) (spesmilo/electrumx#316). This is due to protocol 1.6 requiring a bitcoind with working submitpackage RPC.
- security:
fix DOS vector: if MAX_SESSIONS was reached, when using python 3.12+, the server stopped accepting new incoming sessions until full-restart (spesmilo/electrumx#312)
- session:
changed: add warmup budget to PaddedRSTransport (spesmilo/electrumx#323): this is a small relaxation of the traffic analysis countermeasures added in 1.18, where the first 1024 bytes we send are now exempt from buffering (and hence delays)
fix ReplyAndDisconnect for PaddedRSTransport: flush message buffer (spesmilo/electrumx#322)
- env:
rm DROP_CLIENT_UNKNOWN opt-in env var: this behaviour is now mandated by protocol 1.6 and we just always enforce it (~small breaking change, affected clients would have already been considered misbehaving)
- misc:
new: try to raise ulimit -n open file limit automatically at startup (spesmilo/electrumx#326)
Version 1.18.0 (14 June 2025)¶
- protocol:
add basic countermeasures against traffic analysis by padding the jsonrpc payload with whitespaces to have ~uniform-size TCP packets, and by artificially delaying sending messages a bit. (spesmilo/electrumx#301)
- dependencies:
bump required aiorpcx to >=0.25.0,<0.26
Version 1.17.0 (16 Apr 2025)¶
Long time no see!
- coins:
rm support for legacy coin name “BitcoinSegwit” (ca59151d) (users should just change their config files to
COIN=Bitcoin)add support for Bitcoin Signet (spesmilo/electrumx#122)
add support for Bitcoin Testnet4 (spesmilo/electrumx#273)
- dependencies:
bump required python to >=3.10
bump required aiorpcx to >=0.23.0,<0.25
rm “pylru” dep, instead bundle stripped-down “cachetools” (spesmilo/electrumx#248)
session: log IP address of excessive resusage sessions (spesmilo/electrumx#75)
protocol: increase resolution of
mempool.get_fee_histogram(265a5a87)- build/maintenance:
add scripts for reproducible build (0ba87447)
migrate from setup.py to pyproject.toml
refactor file layout flat->src (spesmilo/electrumx#298)
some internal refactors in preparation for future changes
Version 1.16.0 (10 Dec 2020)¶
Note: this is the first release since forking from kyuupichan/electrumx.
kyuupichan has the electrumx name on PyPI, so we needed a new name there.
We are using the e-x name on PyPI, so you can
install this package via e.g. pip install e-x.
security: a vulnerability has been fixed that allowed a remote attacker to crash electrumx if peer discovery was enabled (#22)
fixed some peer-discovery-related bugs (e.g. #35)
ENV: when using Bitcoin, the COIN ENV var can now be set to
Bitcoin. For compatibility, usingBitcoinSegwitwill also keep working. (#5)session resource limits: made more useful in general. connection-time-based grouping has been removed (#70). Disconnects of over-limit sessions happen sooner (4b3f6510). Subnet sizes for IP-based grouping can now be configured (a61136c5).
protocol:
mempool.get_fee_histogramnow returns fee rates with 0.1 sat/byte resolution instead of 1 sat/byte, and the compact histogram is calculated differently. (#67)performance: bitcoind is now queried less frequently as estimatefee, relayfee, and server.banner requests are now cached (#24)
performance: json ser/deser is now abstracted away and the
ujsonandrapidjsonexras can be used for somewhat faster block processing. (#11)multiple other small performance improvements
Version 1.15.0 (27 May 2020)¶
switch to 5-byte txnums to handle larger blockchains. Upgrade DBs during restart.
accurate clearing of stale caches
coin additions / updates: NavCoin + Hush + VersusCoin + Zero (cipig), DashRegtest (colmenero), Quebecoin (morinpa), Primecoin (Sunny King), multiple (Panagiotis David), RVN (standard-error), Sumcoin
other: Jeremy Rand, Jin Eguchi, ddude, Jonathan Cross, Carsen Klock, cipig
Version 1.14.0 (19 Jan 2020)¶
require Python 3.7
support for Bitcoin SV Genesis activation
DB upgrade to allow for larger transactions. Your DB will automatically upgrade when starting, the upgrade should take approximately 15 mintues.
fix server shutdown process
fix cache race condition (issue #909)
faster initial sync
coin additions / updates: Emercoin (yakimka), Feathercoin (wellenreiter01), Peercoin (peerchemist), Namecoin (JeremyRand), Zcoin (a-bezrukov), Simplicity, Mice (ComputerCraftr), Sibcoin testnet (TriKriSta), Odin (Manbearpixel),
other: h2o10, osagga, Sombernight, breign, pedr0-fr, wingsuit
Version 1.13.0 (26 Sep 2019)¶
daemon: use a single connection for all requests rather than a connection per request. Distinguish handling of JSON and HTTP errors
recognise OP_FALSE OP_RETURN scripts as unspendable
peers - attempt to bind to correct local IP address
improve name support (domob1812)
coin additions / updates: BitZeny (y-chan), ZCoin (a-bezrukov), Emercoin (yakimka), BSV (Roger Taylor), Bellcoin (streetcrypto7), Ritocoin (traysi), BTC (Sombernight), PIVX (mrcarlanthony), Monacoin (wakiyamap)), NamecoinRegtest (JeremyRand), Axe (ddude1), Xaya (domob1812), GZRO (MrNaif2018), Ravencoin (standard-error)
other: gits7r
Version 1.12.0 (13 May 2019)¶
require aiorpcX 0.18.1. This introduces websocket support. The environment variables changed accordingly; see
SERVICESandREPORT_SERVICES.work around bug in recent versions of uvloop
aiorpcX upgrade fixes from Shane M
coin additions / updates: BitcoinSV, Bolivarcoin (Jose Luis Estevez), BTC Testnet (ghost43), Odin (Pixxl)
Version 1.11.0 (18 Apr 2019)¶
require aiorpcX 0.15.x
require aiohttp 3.3 or higher; earlier versions had a problematic bug
add
REQUEST_TIMEOUTandLOG_LEVELenvironment variablesmark 4 old environment variables obsolete. ElectrumX won’t start until they are removed
getinfo local RPC cleaned up and shows more stats
miscellaneous fixes and improvements
more efficient handling of some RPC methods, particularly
blockchain.transaction.get_merkle()coin additions / updates: BitcoinSV scaling testnet (Roger Taylor), Dash (zebra lucky),
Version 1.10.1 (13 Apr 2019)¶
introduce per-request costing. See environment variables documentation for new variables
COST_SOFT_LIMIT,COST_HARD_LIMIT,REQUEST_SLEEP,INITIAL_CONCURRENT,BANDWIDTH_UNIT_COST. Sessions are placed in groups with which they share some of their costs. Prior cost is remembered across reconnects.require aiorpcX 0.13.5 for better concurrency handling
require clients use protocol 1.4 or higher
handle transaction.get_merkle requests more efficiently (ghost43)
Windows support (sancoder)
peers improvements (ghost43)
report mempool and block sizes in logs
electrumx_rpc: timeout raised to 30s, fix session request counts
other tweaks and improvements by Bjorge Dijkstra, ghost43, peleion,
coin additions / updates: ECA (Jenova7), ECCoin (smogm), GXX (DEVCØN), BZX (2INFINITY), DeepOnion (Liam Alford), CivX / EXOS (turcol)
Version 1.10.0 (15 Mar 2019)¶
extra countermeasures to limit BTC phishing effectiveness (ghost43)
peers: mark blacklisted peers bad; force retry blacklisted peers (ghost43)
coin additions / updates: Monacoin (wakiyamap), Sparks (Mircea Rila), ColossusXT, Polis, MNPCoin, Zcoin, GINCoin (cronos), Grosetlcoin (gruve-p), Dash (konez2k), Bitsend (David), Ravencoin (standard-error), Onixcoin (Jose Estevez), SnowGem
coin removals: Gobyte, Moneci (cronos)
minor tweaks by d42
issues fixed #660 - unclean shutdowns during initial sync
Version 1.9.5 (08 Feb 2019)¶
server blacklist logic (ecdsa)
require aiorpcX 0.10.4
remove dead wallet code
fix #727 - not listing same peer twice
Version 1.9.4 (07 Feb 2019)¶
require aiorpcX 0.10.3
fix #713
Version 1.9.3 (05 Feb 2019)¶
ignore potential sybil peers
coin additions / updates: BitcoinCashABC (cculianu), Monacoin (wakiyamap)
Version 1.9.2 (03 Feb 2019)¶
restore protocol version 1.2 and send a warning for old BTC Electrum clients that they need to upgrade. This is an attempt to protect users of old versions of Electrum from the ongoing phishing attacks
increase default MAX_SEND for AuxPow Chains. Truncate AuxPow for block heights covered by a checkpoint. (jeremyrand)
coin additions / updates: NMC (jeremyrand), Dash (zebra-lucky), PeerCoin (peerchemist), BCH testnet (Mark Lundeberg), Unitus (ChekaZ)
tighter RPC param checking (ghost43)
Version 1.9.1 (11 Jan 2019)¶
fix #684
Version 1.9.0 (10 Jan 2019)¶
minimum protocol version is now 1.4
coin additions / updates: BitcoinSV, SmartCash (rc125), NIX (phamels), Minexcoin (joesixpack), BitcoinABC (mblunderburg), Dash (zebra-lucky), BitcoinABCRegtest (ezegom), AXE (slowdive), NOR (flo071), BitcoinPlus (bushsolo), Myriadcoin (cryptapus), Trezarcoin (ChekaZ), Bitcoin Diamond (John Shine),
other minor tweaks (Michael Schmoock, Michael Taborsky)
Original author of ElectrumX:
Neil Booth kyuupichan@gmail.com https://github.com/kyuupichan
This fork maintained by:
Electrum developers electrumdev@gmail.com https://github.com/spesmilo