electrs
RustDoes not need Core's transaction index. Some queries re-read blocks, so lookups are slower.
Running a node and using it are two different achievements. The index layer nobody mentions, connecting each wallet to it, reaching it from outside your house, and proving your wallet is not quietly still using somebody else's server.
Plenty of people run a node and still leak everything. The node hums away in a cupboard, validating blocks, while their wallet carries on asking a stranger's server for balances — because nothing about installing Bitcoin Core changes what your wallet is configured to talk to.
Running a node and using a node are separate achievements. Why run a node makes the case for the first. This page is the second: the piece of software nobody warns you about, how each wallet connects, how to reach it when you are not at home, and how to prove it is actually working rather than assuming.
Here is the thing that confuses almost everybody on their first attempt.
Bitcoin Core does not keep an index of addresses. It is built to validate the chain and to track wallets it was told about — it is not built to answer "what is the balance of this arbitrary address?" quickly. That question, which is exactly what a wallet needs to ask, is one Core alone is poorly suited to.
So most wallets do not talk to Core at all. They speak the Electrum protocol, and expect an index server sitting alongside your node, reading its data and maintaining an address index for lookups.
"I installed Bitcoin Core" is not enough to point Sparrow at it. You need Core plus an index server. Node distributions like Umbrel, Start9, and RaspiBlitz bundle one already, which is most of why they exist. A manual Core install almost always needs one added.
Specter is the notable exception, because it drives Core's own descriptor wallets directly rather than speaking Electrum, which is why the Specter guide requires Core and nothing else. Core's own wallet is a guide of its own.
Three implementations are in common use, and the choice is a genuine trade rather than a matter of taste.
Does not need Core's transaction index. Some queries re-read blocks, so lookups are slower.
Sparrow's benchmarks put history loading tens of times quicker than ElectrumX, at the cost of more disk.
The original implementation and the slowest of the three in practice.
The distributions have already picked for you: Start9 ships Fulcrum, while Umbrel and RaspiBolt default to electrs and offer Fulcrum as an alternative. If your wallet history feels sluggish to load, that setting is usually the cause and switching is usually the cure.
Every wallet hides this in a different place, but you are always supplying the same thing: a host, a port, and whether to use SSL.
On your home network this is straightforward: the node has a local address and your laptop can see it. The problem arrives with phones, which are mostly used somewhere else.
This is the section that matters most, because the failure mode here is silent by design.
Wallets are built to work. When your server is unreachable — the node is updating, Tor is slow, the laptop moved networks — many will quietly fall back to a public server rather than showing you an error. You get a working balance and the privacy you thought you had bought is simply gone, with no indication.
A wallet that shows you a balance is not telling you where it got it. Assume nothing you have not checked.
Pointing an existing wallet at your own server for the first time means the server has to find your history, and that is not instant.
Bitcoin Core alone cannot answer the questions wallets ask, so you need an index server — electrs, Fulcrum, or ElectrumX — alongside it, which node distributions bundle for you. Point each wallet at it explicitly, use Tor or a VPN to reach it from a phone, and then verify by switching the node off and confirming your wallet actually breaks.
Test it by turning your node off. It is the only check that cannot be fooled by a setting that did not take or a fallback you did not know about — and a wallet that keeps working when your node is down was never using it.