JoinMarket NG
JoinMarket NG (Next Generation) is a modern implementation of JoinMarket - decentralized Bitcoin privacy through CoinJoin.
What It Is
- CoinJoin: Mix your coins with others to break transaction history
- Decentralized: No central coordinator - taker coordinates peer-to-peer
- Earn or spend: Makers earn fees providing liquidity, takers pay fees for privacy
What It Isn't
- Not a custodial mixer (you control your keys)
- Not a centralized tumbler service
- Not bulletproof - multiple rounds recommended for stronger privacy
Quick Start
Install (Linux/macOS):
curl -sSL https://raw.githubusercontent.com/joinmarket-ng/joinmarket-ng/main/install.sh | bash
Configure (~/.joinmarket-ng/config.toml):
[bitcoin]
backend_type = "descriptor_wallet" # or "neutrino" for light client
rpc_url = "http://127.0.0.1:8332"
rpc_user = "your_user"
rpc_password = "your_password"
Create wallet:
jm-wallet generate
Run your first CoinJoin (as taker):
jm-wallet info # Get deposit address, fund it
jm-taker coinjoin --amount 1000000 --mixdepth 0 --destination INTERNAL
Or earn fees (as maker):
jm-maker start
Why JoinMarket-NG?
JoinMarket NG is a modern alternative to the reference implementation, fully compatible but with key improvements:
Cross-compatible: Makers running JoinMarket-NG are automatically discovered by takers using the legacy implementation, and vice versa. The wire protocol is 100% compatible, so you can seamlessly join the existing JoinMarket network.
- No daemon - just run commands, no background services
- Run maker + taker simultaneously - no suspicious gaps in offers
- Light client support - Neutrino backend, no full node required
- Modern codebase - Python 3.14+, full type hints, ~100% test coverage
See JoinMarket-NG for detailed comparison.