selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

jam logo

Self-host jam

v0.4.1

Web interface for JoinMarket NG with user-friendly design

BetaOpen SourceMIT
Updated4 months ago
LanguageTypescript
Setup difficultyAdvanced
ThemeDark mode
Stars
333
Port
80 (HTTP web interface (container port, mapped to 8080 on host for jam-standalone))
Requires
Bitcoin Core, JoinMarket NG (jmwalletd, ob-watcher), Tor
Docker
ghcr.io/joinmarket-webui/jam-standalone
Install with Docker
Jam web interface in light modeJam web interface in dark mode

What is jam?

Jam is a free and open-source web interface for JoinMarket NG, a peer-to-peer Bitcoin CoinJoin implementation. It aims to make financial privacy accessible by providing a user-friendly UI with sensible defaults while retaining advanced features. Users can send and receive bitcoin, run a yield generator to earn fees by providing liquidity, create fidelity bonds, schedule transactions, and view the orderbook. Jam runs on popular Bitcoin node platforms like Umbrel, Citadel, RaspiBlitz, MyNode, Start9, and RaspiBolt, or can be installed manually via Docker or npm. It connects to a JoinMarket NG backend (jmwalletd and ob-watcher) which requires Bitcoin Core and Tor. The project is in beta with v2.0.0-beta.4 as the latest release.

Should you self-host jam?

jam scores 46/100 on selfhost.directory (how scoring works) and ranks #8 of 12 in Privacy. It has 333 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is FreedomBox (64/100). It scores higher overall, so compare the two before you pick. See jam vs FreedomBox side by side.

Features

  • CoinJoin spending
  • Fidelity Bonds
  • Multi-language Support
  • Multiple wallets
  • Orderbook viewer
  • PayJoin supportOn roadmap
  • Regular spending
  • Scheduled Transactions
  • Wallet ImportSince v0.1.6

jam README

How to install jam

Install jam with Docker

Bitcoin Core, docker
Environment variables
JM_RPC_HOST, JM_RPC_PORT, JM_RPC_USER, JM_RPC_PASSWORD, APP_USER, APP_PASSWORD, ENSURE_WALLET, REMOVE_LOCK_FILES, RESTORE_DEFAULT_CONFIG

docker run --rm -it
--env JM_RPC_HOST="IP_OF_HOST_RUNNING_BITCOIN_CORE"
--env JM_RPC_PORT="API_PORT_OF_BITCOIN_CORE"
--env JM_RPC_USER="BTC_RPC_USERNAME"
--env JM_RPC_PASSWORD=""
--env APP_USER="JAM_USERNAME"
--env APP_PASSWORD="
"
--env ENSURE_WALLET="true"
--env REMOVE_LOCK_FILES="true"
--env RESTORE_DEFAULT_CONFIG="true"
--volume jmdatadir:/root/.joinmarket
--publish "8080:80"
ghcr.io/joinmarket-webui/jam-standalone:${jam_version}

Bundled with JoinMarket and Tor, easiest manual method

How to configure jam

  • APP_PASSWORDJam web interface password

    Jam web interface password

  • APP_USERJam web interface username

    Jam web interface username

  • ENSURE_WALLETtrueAutomatically create wallet if none exists

    Automatically create wallet if none exists

    values: true/false

  • JAM_JMOBWATCH_PORT62601Port for ob-watcher (for jam-ui-only)

    Port for ob-watcher (for jam-ui-only)

  • JAM_JMWALLETD_API_PORT28183Port for jmwalletd API (for jam-ui-only)

    Port for jmwalletd API (for jam-ui-only)

  • JAM_JMWALLETD_HOSTHost for jmwalletd API (for jam-ui-only)

    Host for jmwalletd API (for jam-ui-only)

  • JAM_JMWALLETD_WEBSOCKET_PORT28283Port for jmwalletd WebSocket (for jam-ui-only)

    Port for jmwalletd WebSocket (for jam-ui-only)

  • JM_RPC_HOSTIP address of host running Bitcoin Core

    IP address of host running Bitcoin Core

  • JM_RPC_PASSWORDBitcoin Core RPC password

    Bitcoin Core RPC password

  • JM_RPC_PORTAPI port of Bitcoin Core

    API port of Bitcoin Core

  • JM_RPC_USERBitcoin Core RPC username

    Bitcoin Core RPC username

  • REMOVE_LOCK_FILEStrueRemove lock files on startup

    Remove lock files on startup

    values: true/false

  • RESTORE_DEFAULT_CONFIGtrueRestore default configuration on startup

    Restore default configuration on startup

    values: true/false

jam releases & version history

FAQ

Which Bitcoin Core versions are supported?

JoinMarket <=v0.9.11 supports Bitcoin Core up to v29. Bitcoin Core v26+ requires deprecatedrpc=create_bdb in bitcoin.conf. v30 not yet supported.

Can I try Jam on Testnet/Regtest/Signet?

Yes, Jam works on testing networks. Regtest or Signet recommended. Configure Bitcoin Core and JoinMarket for the test network, Jam will switch automatically.

Which bitcoin address types are supported?

All address types for sending. Only bech32 (p2wpkh) for receiving.

Can I import an existing wallet?

Yes, via the web interface since Jam v0.1.6 using the "Import existing wallet" button. Requires JoinMarket v0.9.10 or later.

How to resolve "No connection to gateway"?

Verify Bitcoin Core is running and synced, check backend service is reachable on configured ports, check logs for errors, restart services or reboot node.

How do I view the log file?

On integrated nodes, check Settings > Show logs. For standalone Docker, logs are in /var/log/jam/. For native JoinMarket, check ~/.joinmarket/logs/.

Does Jam need to be open for/during coinjoin?

No, the wallet stays active (unlocked) after closing the browser. The backend services must keep running and stay online.

Why is my collaborative transaction taking so long?

Single collaborative transactions usually take under 15 minutes. Scheduled sweeps can take hours or days. Longer times may indicate network issues, fee changes, or other problems.

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

If JoinMarket didn't shut down cleanly, a wallet lock file may remain. Delete the .lock file manually to resolve.

Does Jam support PayJoin?

No, PayJoin is not currently supported for sending or receiving. It is on the roadmap.

What is the password used for?

The password encrypts the wallet file. It is not a passphrase extending the mnemonic seed. Only the seed is needed to recover funds.

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

Fees depend on market and blockspace conditions, set by market makers. Takers voluntarily agree to offers. Mining fees also apply and depend on mempool conditions.

How much can I earn?

Earnings depend on market conditions and liquidity provided. More liquidity generally means more earnings, but margins are thin due to global competition. Check the orderbook and consider creating a fidelity bond to signal seriousness.

More in Privacy

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…