Skip to content

Flatpak

The Flatpak package (org.joinmarketng.JamNG) bundles all services (jmwalletd + JAM web UI, Tor, the Neutrino light client, and the orderbook watcher) in a single sandboxed desktop application. It is the easiest way to run JoinMarket NG with the JAM web UI on mainnet.

Build and install

Install the latest .flatpak from the releases page, or build and install from source with:

flatpak-builder --user --install --force-clean build-dir flatpak/org.joinmarketng.JamNG.yml

Run

flatpak run org.joinmarketng.JamNG            # mainnet (default)
flatpak run org.joinmarketng.JamNG --no-gui   # headless (opens the browser instead of the GUI)

On launch the app starts Tor, the Neutrino light client, jmwalletd, and the orderbook watcher, then opens the JAM web UI. All ports are allocated dynamically so the Flatpak never conflicts with other local services.

Running CLI commands

Use the cli pass-through to run any bundled CLI tool inside the sandbox with the same environment (Tor, Neutrino, data directory) as the running services. Start the app first, then in another terminal:

# General form
flatpak run org.joinmarketng.JamNG cli <command> [args...]

# Wallet info / balance
flatpak run org.joinmarketng.JamNG cli jm-wallet info default.jmdat

# Fidelity bonds: refresh a registered bond's on-chain UTXO info
flatpak run org.joinmarketng.JamNG cli jm-wallet sync-bonds

# Fidelity bonds: rediscover bonds by scanning all timelocks (recovery)
flatpak run org.joinmarketng.JamNG cli jm-wallet recover-bonds

The cli runner reads the running instance's ports and credentials from <data-dir>/run/env, so the app must be running for Neutrino-backed commands to connect. jmwalletd already runs a bond-aware sync on every wallet utxos and display request, so a funded fidelity bond shows up in JAM automatically after a refresh; sync-bonds is only needed to update the offline registry view used by jm-wallet list-bonds.

Data directory

The Flatpak is sandboxed. All state lives in:

~/.var/app/org.joinmarketng.JamNG/.joinmarket-ng/

This is separate from the standard ~/.joinmarket-ng/ used by a non-Flatpak install. The wallet file format (.jmdat) is the same in both, so you can copy a wallet from a previous install into the Flatpak data directory:

cp ~/.joinmarket-ng/wallets/default.jmdat \
   ~/.var/app/org.joinmarketng.JamNG/.joinmarket-ng/wallets/

If the wallet is encrypted you are prompted for the password when you select it in the UI or run a jm-wallet CLI command.

Other networks

Mainnet uses the base data directory directly. Signet and regtest are supported for testing via --network, and each gets its own sub-directory so wallets and state never mix:

flatpak run org.joinmarketng.JamNG --network signet
~/.var/app/org.joinmarketng.JamNG/.joinmarket-ng/          # mainnet
~/.var/app/org.joinmarketng.JamNG/.joinmarket-ng/signet/   # signet
~/.var/app/org.joinmarketng.JamNG/.joinmarket-ng/regtest/  # regtest

Pass the same --network flag to cli commands so they use the matching data directory. Addresses derived from the same mnemonic differ between mainnet and the test networks because the BIP32 coin-type differs (0' for mainnet, 1' for signet/testnet), so a wallet copied across networks shows different addresses.