Home Tutorials Article PGP Guide

Self-Hosted ElectrumX Server Setup

Running a self-hosted ElectrumX server means your Electrum wallet queries your own Bitcoin Core node instead of a public indexer that can log your IP and your transaction history.

Page updated

What is ElectrumX?

Running a self-hosted ElectrumX server means your Electrum wallet queries your own Bitcoin Core instead of a public indexer that can log your IP and history. ElectrumX is a lightweight Python reimplementation of an Electrum server — a bridge between bitcoind and your wallet.

Why run it?

By default, Electrum connects to random public servers. These servers can see your IP address and all your transaction history. By running ElectrumX, you keep this data on your own hardware.

Prerequisites

1. Hardware

SSD is mandatory. HDD syncs will be too slow. You need roughly 60-80GB of space for the ElectrumX database (in addition to the ~600GB for Bitcoin Core).

2. Bitcoin Core Configuration

You must have a running Bitcoin node (`bitcoind`). It MUST have transaction indexing enabled. Add this to your `bitcoin.conf`:

txindex=1

If you didn't have this set before, you must restart bitcoind with `-reindex`. This takes time.

3. Software Dependencies

Python 3.10 or higher is required.
sudo apt-get install python3-pip python3-dev libleveldb-dev

Installation Guide

1 Step 1: Install ElectrumX

We will install directly from the source to ensure we have the latest version.

# Clone the repository
git clone https://github.com/spesmilo/electrumx.git
cd electrumx

# Install with pip
sudo pip3 install .

2 Step 2: Generate SSL Certificates

Electrum wallets require a secure SSL connection. You must generate a self-signed certificate.

mkdir ssl
cd ssl
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
# (Press enter through prompts)
openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt

3 Step 3: Configuration (Environment Variables)

ElectrumX is configured via environment variables. You will typically put these in a systemd service file or a script.

  • COIN=Bitcoin
  • DB_DIRECTORY=/path/to/your/db (SSD location)
  • DAEMON_URL=http://user:[email protected]:8332/ (Your local Bitcoin node creds)
  • SERVICES=tcp://:50001,ssl://:50002 (Ports to listen on)
  • SSL_CERTFILE=/path/to/ssl/server.crt
  • SSL_KEYFILE=/path/to/ssl/server.key
  • NET=mainnet

4 Step 4: Persistence with Systemd

To keep the server running in the background and starting on boot:

Create a file at /etc/systemd/system/electrumx.service:

[Unit]
Description=ElectrumX
After=network.target

[Service]
User=yourusername
EnvironmentFile=/etc/electrumx.conf
ExecStart=/usr/local/bin/electrumx_server
TimeoutStopSec=30m

[Install]
WantedBy=multi-user.target

Note: TimeoutStopSec=30m is critical. ElectrumX takes time to flush data to disk when stopping. If systemd kills it too early, the database will corrupt.

Connecting Your Wallet

Once your server is synced (check logs with journalctl -u electrumx -f), connect your desktop wallet.

Command Line Launch:

electrum --oneserver --server localhost:50002:s

The :s tells the wallet to use SSL. Since you are using a self-signed certificate, the wallet might warn you—this is expected and safe for localhost connections.

Official Documentation

For advanced peer discovery and RPC commands:

ElectrumX serving your wallet

You are now running a sovereign Bitcoin infrastructure. Your Electrum wallet is communicating directly with your own node via ElectrumX, ensuring no third party can spy on your addresses or balances.

Back to Tutorials