joinmarket logo


JoinMarket is a Bitcoin Wallet that ensures privacy and earnings via decentralized CoinJoin, ensuring untraceable BTC transactions seamlessly.

joinmarket gui

Joinmarket with a user-friendly interface

Completely decentralized.

Decentralized structure with no single point of control or failure. Each node operates independently with its own rules, funds, and privacy. Made possible through market forces and Joinmarket.

joinmarket gui

Free as in freedom.

Joinmarket is a privacy-enhancing tool that allows users to join coinjoin transactions on the Bitcoin blockchain, improving the anonymity of their transactions. It is powerful due to its protocol-based operation, not corporate control. There is no central authority or financial gain for any entity. You have control and benefit from its use.

joinmarket screenshot

How can I earn sats using JoinMarket?

Joinmarket allows you to blend in with the crowd, making it easy to conceal yourself. By participating in a crowd, you can earn small amounts of money without drawing attention. It's not a significant amount, but it's a way to earn passively.

joinmarket mobile
joinmarket twitter

Successful privacy solutions with centralized attack vectors such as a known team, domains, mixing coordinators, etc� will be taken down by governments or continue running comprised. This is why it is so important to make JoinMarkets work well for average users.

NVK - CEO of Coinkite


1How much can I earn?

Earning sats entails providing liquidity to other market participants. Consequently, how much you can earn depends on multiple factors, market conditions and liquidity size being two of them. In general, the more liquidity you provide, the more you can earn. That being said, you are competing in an open market, and because competition is global and only constraint by market forces, the margin is usually thin. If your offers are not taken by market participants, your offer might be too expensive. Check the order book and compare your offer to the market price. If your offer is competitive and is still ignored, make sure to create a Fidelity Bond, which signals that you are a serious market participant and not a malicious entity.

2 How high are the fees that I do have to pay?

The amount of fees you have to pay depends on market and blockspace conditions. They are dictated by supply and demand, both for collaborative transactions and single user transactions. Market makers provide liquidity and set the fee they want to earn, either in absolute or percentage terms. Market takers have to agree to take these offers voluntarily. Check the orderbook to get an up-to-date overview of the current fee market. In addition to these fees, you will have to pay mining fees for you and the makers. Mining fees depend on how many transactions are currently in the mempool. Inspect your mempool or use a public site like to do a fee estimation. Hint We recommended that you run your own instance on your full node.

3I'm getting an error when trying to open the wallet

The following error can pop up in case JoinMarket didnt't shut down cleanly: wallet.jmdat cannot be created/opened, it is locked. Warning Make sure that you have written down your wallet seed before executing any command You can resolve this by manually deleting the wallet .lock file. Why is my collaborative transaction taking so long? This can have multiple reasons. Tor or general network connection issues, participants not responding in a timely manner, missing requirements to source commitments (see the docs), period of slow block production, unexpected increase of transaction fees, etc. For a better assessment, the following can be taken as a guideline: single collaborative transactions generally take only a few minutes (<15min) a scheduled sweep can take hours, even days (<3days) If an operation takes longer than that, then there might be a different issue. See "Something else is/seems stuck" for more info. Something else is/seems stuck; what can I do? If a single collaborative transaction takes hours, or if your scheduled sweep already takes over three days, there might be a different underlying problem. A general rule of thumb is: Any operation either succeeds or fails. If an operation is aborted prematurely, there is no danger of loss of funds. All operations can be aborted by locking your wallet. Since Joinmarket does not yet have a way to provide fine grained error information to users, it is always a good idea to inspect the log files for warning and error messages.

4 How do I view the log file?

f you are running JoinMarket with one of the supported integrations (RaspiBlitz, Citadel, Umbrel, etc.) chances are you can view the logs inside the app (See Settings > Show logs). If the option is not displayed, or if you run the standalone docker image yourself, you can find all log files inside the container in directory /var/log/JoinMarket/. See jmwalletd_stdout.log or jmwalletd_stderr.log for problems with JoinMarket. e.g. tail -n 200 -f /var/log/JoinMarket/jmwalletd_stdout.log If you run JoinMarket natively, you can find the logs files inside the logs folder of JoinMarket's working directory (e.g. /home//.joinmarket/logs) e.g. tail -n 200 -f /home/user/.joinmarket/logs/jmwalletd_logs.log

5 How to resolve "No connection to gateway"?

This can have several reasons and basically means that the UI cannot reach the backend service. Depending on your installation (native setup, docker images, local/remote hosts, etc.), there are a number of things you should verify. Please make sure that: Your Bitcoin Core instance is up and running, fully synced and is accepting RPC requests. bitcoin-cli getblockchaininfo The backend service is running and is reachable on the specified ports. Verify that you get a response from the server, by executing a request on the host that is running your JoinMarket instance (if you run an Umbrel node, this requests needs to be executed inside the JoinMarket docker container): curl --insecure Check the logs for any errors or warnings. If all the above fails, try restarting every service or do a complete node reboot.

6 Can I import an existing wallet?

Yes, it is possible to import an existing wallet. However, not yet via the web interface, but with a few manual steps via the command line. Log into the host machine, e.g. with ssh (see an example for Umbrel below) Navigate to JoinMarket's root directory Invoke the recover mechansim of the script jmvenv/bin/activate # if virtual environment is enabled python3 scripts/ recover --gap-limit=200 --recoversync

Improve your financial privacy today