Play Video

How To Use JoinMarket
Bitcoin Privacy Software

Improve your privacy with joinmarket CoinJoins.

Learn how to use joinmarket for significant privacy benefits on the Bitcoin network.

joinmarket is a CoinJoin implementation aimed at improving the privacy and fungibility of bitcoin transactions.

CoinJoin is a privacy technique where two or more users pool their Bitcoins together into a collaborative transaction.

joinmarket works by creating a marketplace for CoinJoins, allowing them to be paid for.

On one side are Takers, who pay for CoinJoins because they require them on demand and On the other side of the market are Makers, who provide the CoinJoin liquidity and are compensated a fee for CoinJoins.


  1. joinmarket requires a connection to an instance of Bitcoin Core.
  2. On Mac OS , you need Homebrew.
  3. joinmarket is a python application, which requires an up to date version of python to run.
  4. This guide was created for Mac and Linux users, for windows guides refer to joinmarket documentation.



We will use git to download joinmarket. You can also manually download the latest release from joinmarket’s github repository.

git clone


Make sure joinmarket is reset to most recent stable release.

git reset --hard  SOFTWARE VERSION


Verify the GPG signature of the folder we downloaded.

We will check the signature and compare it against the developer’s public key, as he showed it on a live demonstration of joinmarket.



Install joinmarket from the scripts folder.



The virtual ENV provides an isolated environment for joinmarket to run in. Every time you want to use joinmarket, you must activate the virtual environment first.

source jmvenv/bin/activate



Before we can use joinmarket we have to configure it. The joinmarket.cfg location will be shown to you in the terminal when you created it.

Lines starting with “#” are comments, they are descriptive and are ignored by joinmarket.

Lines with “=” are parameters. They are modifiable and affect how joinmarket runs.

Anything can be turned off by adding a “#” at beginning of a line.

Detailed documentation on the config file.

Opennoms joinmarket tutorial.



Blockchain settings will configure your connection to Bitcoin Core.

You can connect to Bitcoin Core running on –

  1. The same computer (local)
  2. On the same local area network ie.. another computer in your home network.
  3. Over Tor. Connecting over Tor does not work natively and requires a few more steps, see Opennoms guide on how to Torify joinmarkets connection to Bitcoin Core.


rpc_wallet_file option will isolate the watch only addresses.

Read joinmarket’s documentation for detailed explanation.


Messaging settings dictate how joinmarket connects with other users.

You can leave these default settings, but for improved privacy Tor is recommended.


Fee settings refer to Bitcoin network transaction fees. These can be modified at anytime.

joinmarket documentation on fees.

Opennoms joinmarket fee tutorial.


Taken directly from the Bitcoin Wiki

To avoid a later transaction recombining a change output with a CoinJoin output, JoinMarket’s wallets have the concept of a mixdepth.

UTXOs from one mixdepth are never used as inputs along with coins from others, so mixdepths are like seperate identities which users can use to stop coins from different sources being mixed.

Coins only move between them via CoinJoins. The Deterministic wallet discourages users from doing address reuse. The wallet allows individual private keys and UTXOs to be imported, which can be used with reused addresses to have CoinJoins created from them which would confuse any analysis based on the common-input-ownership heuristic.


04:08 offers a very flexible single CoinJoin implementation.

You can send Bitcoin to another address right away and get the privacy benefits of a CoinJoin. The privacy benefits are less than using the script, or being a Maker and running the Yield Generator scripts – but is still a valuable option.

Learn more at joinmarket’s documentation on single CoinJoins.


Fee limits apply to what you, as a Taker, pay for the service of CoinJoin.

This can be set in your joinmarket.cfg file or you can manually set it every time you do a CoinJoin.

After getting the hang of joinmarket, you will get a better idea of what is appropriate to pay based on your use case.

joinmarket documentation on fees.

Opennoms joinmarket fee tutorial.


The participant information is presented to the taker, so the taker can confirm they want to go through with the CoinJoin.


For a detailed explanation on Tumble.schedule, you can open the “sample schedule for testnet” file locally or go to joinmarket’s github repository to view it.


You can manually pass parameters for the yield generator, when you type it into the command line.

Learn more about the Yield Generator in the joinmarket documentation.


Installing Tmux or GNU screen guide will allow you to run joinmarket in the background.

This can be useful for running the yield generator indefinitely.

Opennoms Guide to running joinmarket with Tmux

Ministry of Nodes joinmarket guide – tmux install starts at 21:35.



Subscribe for more fresh Bitcoin content.

Learn Bitcoin Email Signup

Learning Bitcoin sparks ideas

Check your Inbox for a confirmation link.

We never spam, we hate it too.

Has it helped ?

Help us create more educational content


Get the best bitcoin guides delivered to you.

Subscribe now

Looking forward to helping

Check your inbox for a confirmation link.

Learn Bitcoin Email Signup