A self-hosted DEX
with no coordinator.

The full BasicSwap protocol, self-hosted and running end to end on your own machine.

Post swap offers, run automated market making strategies, and settle straight to your wallets across 12 chains. No operator stands in between. Trustless by your node, not by anyone's promise.

0% fees

No protocol fees for makers or takers.

pay only the on-chain network cost

localhost:12700/offers/offer/000000006ad02f6b1599740583429c98b3a2656f6c3d8c04dcbbf2c6/bid/000000006ad02b33a1e969381dccc192f43a7bb947d0a9a58a308d79/smartbuy/wallets/wallet/BTC/amm
Order book
Send a bid
Swap progress
Smart Buy
Wallets
AMM

BasicSwap 0.19.0, with example figures.

verify the release

Check the signature before you build.

BasicSwap ships as source code. Every release tag is signed with the maintainer's PGP key, so you can confirm the code you build is the code that was released. git verify-tag should report a good signature from this key.

Signing key
62C7 4C11 3CD9 E31D AA65564F 8ED6 D875 0C4E 3F93
Signer
tecnovert
Latest release
v0.19.1
verify
curl -s https://github.com/tecnovert.gpg | gpg --import
git clone https://github.com/basicswap/basicswap.git && cd basicswap
git checkout v0.19.1
git verify-tag v0.19.1

no shortcuts

The protocol, uncompromised.

This is BasicSwap with nothing held back. Your own coin core wallets, your own full nodes, and the strongest privacy, decentralization, and security the protocol can offer. Whether you're making markets or just taking a trade.

  • Fully self-hosted

    Runs the actual coin core wallets on your machine, each one a validating node. Funds stay in wallets only you control, and your node checks every swap against the chains itself.

  • 0% protocol fees

    The protocol takes no cut, for makers or takers. You pay only the on-chain network cost of each swap.

  • Truly decentralized

    A distributed order book carried over peer-to-peer messaging. No coordinator, no matching engine, no operator who can throttle, censor, or front-run your offers.

  • Maximum privacy

    Everything runs locally, optionally over Tor, and no one logs your trades. Adaptor signatures leave no fingerprint on-chain, so nothing proves a transaction is a swap or links the two payments across chains to reveal who you traded with.

  • All 12 coins

    Bitcoin, Monero, Litecoin (with MWEB), Particl (with anon variants), Bitcoin Cash, Dash, Decred, Firo, Dogecoin, Namecoin, PIVX, Wownero. The complete protocol coin list, every supported pair. See how a BTC to XMR swap settles.

  • Built-in AMM

    Run automated market making, manage liquidity across pairs, and schedule offer refreshes. The same surface partner integrators build on.

12 coins · one protocol

Cross-chain, end to end.

Not every coin can swap with every other, and the cryptographic method depends on the pair. Here is exactly what is possible, and how each swap settles.

  • adaptor signature
  • secret hash
  • one-time VES
  • not compatible

columns: you send · rows: you receive

Coins with scriptsParticl private balancesScriptless (CryptoNote)
BTCBCHDASHDCRDOGEFIROLTCNMCPARTPIVXPARTanonPARTblindWOWXMR
BTCAA HA HAAA HA HA HA HAAAA
BCHAAAAAVAVV
DASHA HA HA HA HA HHA
DCRA HAA HAAA HA HA HA HAAAA
DOGEAAAAAA
FIROAAAAAA
LTCA HAA HA HAAA HA HA HAAAA
NMCA HAA HA HAAA HA HA HAAAA
PARTA HAA HA HAAA HA HA HAAAA
PIVXA HHA HA HA HA H
PART anonAVAAAAA
PART blindAAAAAAAAAAAA
WOWAVAAAAA
XMRAVAAAAA
  • Bitcoinswaps with 13 coins
    • BCH
    • DASH
    • DCR
    • DOGE
    • FIRO
    • LTC
    • NMC
    • PART
    • PIVX
    • PART anon
    • PART blind
    • WOW
    • XMR
  • Bitcoin Cashswaps with 9 coins
    • BTC
    • DCR
    • LTC
    • NMC
    • PART
    • PART anon
    • PART blind
    • WOW
    • XMR
  • Dashswaps with 7 coins
    • BTC
    • DCR
    • LTC
    • NMC
    • PART
    • PIVX
    • PART blind
  • Decredswaps with 13 coins
    • BTC
    • BCH
    • DASH
    • DOGE
    • FIRO
    • LTC
    • NMC
    • PART
    • PIVX
    • PART anon
    • PART blind
    • WOW
    • XMR
  • Dogecoinswaps with 6 coins
    • BTC
    • DCR
    • LTC
    • NMC
    • PART
    • PART blind
  • Firoswaps with 6 coins
    • BTC
    • DCR
    • LTC
    • NMC
    • PART
    • PART blind
  • Litecoinswaps with 13 coins
    • BTC
    • BCH
    • DASH
    • DCR
    • DOGE
    • FIRO
    • NMC
    • PART
    • PIVX
    • PART anon
    • PART blind
    • WOW
    • XMR
  • Namecoinswaps with 13 coins
    • BTC
    • BCH
    • DASH
    • DCR
    • DOGE
    • FIRO
    • LTC
    • PART
    • PIVX
    • PART anon
    • PART blind
    • WOW
    • XMR
  • Particlswaps with 13 coins
    • BTC
    • BCH
    • DASH
    • DCR
    • DOGE
    • FIRO
    • LTC
    • NMC
    • PIVX
    • PART anon
    • PART blind
    • WOW
    • XMR
  • PIVXswaps with 6 coins
    • BTC
    • DASH
    • DCR
    • LTC
    • NMC
    • PART
  • Particl (anon)swaps with 7 coins
    • BTC
    • BCH
    • DCR
    • LTC
    • NMC
    • PART
    • PART blind
  • Particl (blind)swaps with 12 coins
    • BTC
    • BCH
    • DASH
    • DCR
    • DOGE
    • FIRO
    • LTC
    • NMC
    • PART
    • PART anon
    • WOW
    • XMR
  • Wowneroswaps with 7 coins
    • BTC
    • BCH
    • DCR
    • LTC
    • NMC
    • PART
    • PART blind
  • Moneroswaps with 7 coins
    • BTC
    • BCH
    • DCR
    • LTC
    • NMC
    • PART
    • PART blind
  • A adaptor signature
  • H secret hash
  • V one-time VES
  • blank not compatible

columns send · rows receive

runs on

Wherever you run software.

Every method below builds BasicSwap and its coin cores from source.

install guide

Linux

Debian, Ubuntu, Arch, Fedora

Script suite

The community script suite (nahuhh/basicswap-bash) builds BasicSwap and its coin cores and installs the bsx-* management commands.

prerequisites
sudo apt install curl git   # pacman / dnf on Arch / Fedora
install
git clone https://github.com/nahuhh/basicswap-bash && cd basicswap-bash
./basicswap-install.sh

# Scripts move to ~/.local/bin, so the clone can go
cd .. && rm -rf basicswap-bash
basicswap-bash
run BasicSwap
bsx-update
update BSX + coin cores
bsx-addcoin
enable a coin
bsx-removecoin
disable a coin
bsx-enabletor
route through Tor
bsx-clientauth
set a client password

Docker

The official Docker path (basicswap/basicswap). Builds the image from source and runs it with Compose.

install
# Dependencies + Docker engine
sudo apt install curl jq git
# install Docker -> docs.docker.com/engine/install

# Build the image
git clone https://github.com/basicswap/basicswap.git
cd basicswap/docker && cp example.env .env
docker compose build

# Configure (example: monero + bitcoin)
export COINDATA_PATH=/var/data/coinswaps
CURRENT_XMR_HEIGHT=$(curl -s http://node2.monerodevs.org:18089/get_info | jq .height)
docker run --rm -t --name swap_prepare -v $COINDATA_PATH:/coindata i_swapclient \
  basicswap-prepare --datadir=/coindata --withcoins=monero,bitcoin \
  --htmlhost=0.0.0.0 --wshost=0.0.0.0 \
  --xmrrestoreheight=$CURRENT_XMR_HEIGHT --usebtcfastsync

# Start, then open http://localhost:12700
docker compose up

macOS

Intel + Apple Silicon

Build from source

macOS builds from source with Homebrew. Docker is not available on macOS.

prerequisites
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install python git gnupg pkg-config jq zeromq
build
export SWAP_DATADIR=/Users/$USER/coinswaps
python3 -m venv "$SWAP_DATADIR/venv"
. $SWAP_DATADIR/venv/bin/activate && python3 -V
cd $SWAP_DATADIR
git clone https://github.com/basicswap/basicswap.git
cd $SWAP_DATADIR/basicswap
sudo python3 bin/install_certifi.py
pip3 install --require-hashes -r requirements.txt
pip3 install .
configure + run
CURRENT_XMR_HEIGHT=$(curl -s http://node2.monerodevs.org:18089/get_info | jq .height)
basicswap-prepare --datadir=$SWAP_DATADIR --withcoins=monero,bitcoin \
  --xmrrestoreheight=$CURRENT_XMR_HEIGHT --usebtcfastsync

basicswap-run --datadir=$SWAP_DATADIR
# open http://localhost:12700

Windows

Windows 10/11 · via WSL

Script suite (WSL)

Inside WSL2, the community script suite (nahuhh/basicswap-bash) builds BasicSwap and its coin cores and installs the bsx-* management commands. An unstable .exe installer also exists but is not recommended.

open wsl
# Windows + R  ->  type "wsl"  ->  Enter
sudo apt update && sudo apt install curl git
install
git clone https://github.com/nahuhh/basicswap-bash && cd basicswap-bash
./basicswap-install.sh
cd .. && rm -rf basicswap-bash
basicswap-bash
run BasicSwap
bsx-update
update BSX + coin cores
bsx-addcoin
enable a coin
bsx-removecoin
disable a coin
bsx-enabletor
route through Tor
bsx-clientauth
set a client password

Docker

The official Docker path (basicswap/basicswap). Builds the image from source and runs it with Compose.

install
# Dependencies + Docker engine
sudo apt install curl jq git
# install Docker -> docs.docker.com/engine/install

# Build the image
git clone https://github.com/basicswap/basicswap.git
cd basicswap/docker && cp example.env .env
docker compose build

# Configure (example: monero + bitcoin)
export COINDATA_PATH=/var/data/coinswaps
CURRENT_XMR_HEIGHT=$(curl -s http://node2.monerodevs.org:18089/get_info | jq .height)
docker run --rm -t --name swap_prepare -v $COINDATA_PATH:/coindata i_swapclient \
  basicswap-prepare --datadir=/coindata --withcoins=monero,bitcoin \
  --htmlhost=0.0.0.0 --wshost=0.0.0.0 \
  --xmrrestoreheight=$CURRENT_XMR_HEIGHT --usebtcfastsync

# Start, then open http://localhost:12700
docker compose up

other ways to swap

Just want to swap, not run a node?

BasicSwap Mobile and BasicSwap Web will give you the same atomic swaps without running any nodes. Mobile is coming first to the Litecoin Nexus Wallet, and Web will bring BasicSwap to a browser tab.