Back to Freedom.Tech Back
All JoinMarket-NG releasesAll versions
Release Fri, Sep 4, 2026 4 min read

JoinMarket-NG 0.39.0

Original release notes

Bug fixes, security hardening, and privacy improvements. Takers now consider only quantized maker offers by default, with an optional equalized payment policy. New features like jm-wallet delete and improved usability and logs noise.

Important: you might need to install the system dependency libsecp256k1-dev or equivalent for your distro.

Added

  • Add a safe jm-wallet delete command for wallet files, backend watches, and private local state (2f270388)
  • Add correlated maker CoinJoin lifecycle diagnostics (a47db6c3)
  • Migrate cryptographic operations to the maintained python-bitcointx fork (f7ff7780)
  • Allow interactive UTXO selection without specifying amount or source mixdepth (8ed0ff1d)
  • Default takers to quantized exact fees and add optional equalized maker payments (678bb264)
  • Import and verify SeedSigner fidelity bond registrations (5613ad05)

Fixed

  • Restore matched directory outage recovery alerts across maker identity rotation (2b606fe9)
  • Retry order-book discovery after reconnects return no offers (e4c96e1f)
  • Stop routine direct peer disconnects from producing maker error logs (10d49899)
  • Prevent notification Tor routing from redirecting wallet backend traffic (0ac1b368)
  • Prevent wallet backend RPC clients from inheriting process proxy settings (c2f16c0d)
  • Improve diagnostics for unsupported PoDLE authorization scripts (48c5598b)
  • Sanitize maker authentication errors and ignore unrelated response traffic (b6b21233)
  • Keep maker session and nick state synchronized after identity rotation (f4d893e3)
  • Allow CoinJoin IDs to be hidden from notifications (38521726)
  • Report directory outages and recovery once across failed identity rotations (4d113bd3)
  • Make daemon message signatures compatible with Electrum verification (eabcf715)
  • Fix macOS installation of the native secp256k1 dependency (85bca486)
  • Prevent sweep CoinJoins from underfunding miner fees when makers contribute multiple inputs (ff170542)
  • Keep tumbler maker nick state synchronized after identity rotation (09135415)
  • Release taker inputs when maker signature collection fails before local signing (9b14b85c)
  • Make release update checks Tor-only and resilient to GitHub API rate limits (2e4a28b5)
  • Make orderbook pick chances reflect quantized-only taker defaults (1f430703)
  • Prevent nested sudo prompts and refresh imported history from the TUI (2de7a560)
  • Reconstruct imported wallet history when a Bitcoin Core rescan completes (e365bce5)
  • Stop unchanged periodic wallet syncs from filling default INFO logs (a7237cf7)
  • Automatically discover existing fidelity bonds during imported wallet synchronization (6fd6f2bd)
  • Allow fidelity bond discovery in wallets without persistent storage (0224358b)
  • Clarify and improve development updates in the terminal UI (ce1781e0)
  • Require two trusted GPG signatures when installing or verifying releases (1efaef0b)

Configuration Changes

Existing config.toml files are not updated automatically. Review the bundled template changes below and apply the relevant options manually.

--- config.toml.template (0.38.0)
+++ config.toml.template (0.39.0)
@@ -305,6 +305,9 @@
 # into clickable links (e.g. "https://mempool.space/signet" -> ".../tx/<txid>").
 # Leave empty to show the bare txid instead.
 # mempool_url = ""
+# Include the commitment-derived correlation ID in CoinJoin notifications.
+# Set to false to keep the ID in local logs only.
+# include_coinjoin_id = true
 # include_nick = true
 # use_tor = true

@@ -337,9 +340,10 @@
 # summary_interval_hours = 24  # Interval: 24 (daily), 168 (weekly), or custom (1-168)

 # Update checks (opt-in, disabled by default)
-# PRIVACY WARNING: When enabled, this polls api.github.com each summary interval
-# to check for new releases. The request is routed through Tor when use_tor = true,
-# but GitHub will still see the Tor exit node IP.
+# PRIVACY WARNING: When enabled, this contacts github.com each summary interval
+# to check for new releases. The request is always routed through Tor and is skipped
+# when use_tor = false or the Tor proxy is unavailable. GitHub will still see the
+# Tor exit node IP.
 # check_for_updates = false

 # Retry failed notifications in the background (recommended for Tor)
@@ -502,15 +506,19 @@
 # Maximum acceptable coinjoin fees (paid to makers, not network/miner fees)
 # max_cj_fee_abs = 500        # Absolute fee in satoshis per maker
 # max_cj_fee_rel = "0.001"    # Relative fee (0.001 = 0.1%)
-# max_sweep_fee_change = 0.8  # Relative fee tolerance for sweep transactions
+# max_sweep_fee_change = 0.8  # Max relative amount actual sweep fee needs may exceed its budget
 # Round each selected maker fee up to the closest same-type public quantum.
-# Disable temporarily for exact-fee compatibility with older makers that reject
-# any overpayment.
-# round_up_cj_fees = true
+# Requires makers that accept outputs paying at least their advertised fee, as
+# supported by joinmarket-clientserver v0.9.12 and newer implementations.
+# Pre-v0.9.12 makers that require exact output values are unsupported.
+# round_up_cj_fees = false
 # Only consider offers already on the public fee grid. This remains effective
-# when rounding is disabled. Recommended future policy (planned default):
-# require_quantized_cj_fees = true with round_up_cj_fees = false.
-# require_quantized_cj_fees = false
+# when rounding is disabled and avoids overpaying legacy exact-fee makers.
+# require_quantized_cj_fees = true
+# Opt in to paying every selected maker the highest realized fee in the set.
+# This makes maker payments indistinguishable by fee amount, but legacy makers
+# may refuse the increased output and cause the CoinJoin attempt to fail.
+# equalize_cj_fees = false

 # Maximum inputs a single maker may contribute to the CoinJoin.
 # The taker pays the mining fee for EVERY input, so a maker with many inputs