# JoinMarket NG 0.9.0 Release Summary
## Major Features
Descriptor Wallet Backend
- New default backend using Bitcoin Core's descriptor wallets
- Sync time reduced from ~90s to ~1s via listunspent instead of scantxoutset
- One-time setup with automatic descriptor import
- Smart scan for mainnet: initial import scans ~1 year, full rescan runs in background
Orderbook Watcher Enhancements
- Direct maker reachability tracking via Tor health checks
- directly_reachable field in orderbook API responses
- Maker feature extraction from handshakes for monitoring
Operator Notifications
- Push notifications via Apprise (100+ services: Telegram, Discord, email, etc.)
- Privacy-aware with configurable data inclusion
- Per-event toggles, fire-and-forget design
- Integrated across all components
## Configuration Changes
Defaults Modified
- Backend: full_node → descriptor_wallet
- Fee rate fallback: 10 sat/vB → 1 sat/vB
- Counterparty count: 3 → 10 makers
- Broadcast policy: RANDOM_PEER → MULTIPLE_PEERS (3 random makers)
Fee Estimation
- Added --block-target (1-1008 blocks) and --fee-rate options
- Support for sub-1 sat/vB rates (float precision)
- Default: 3-block estimation with full node, 1 sat/vB fallback with Neutrino
## Critical Fixes
Transaction Handling
- Fixed maker multi-UTXO support (multiple !sig messages)
- Fixed maker fee calculation bug causing "Change output value too low" errors
- offer.txfee is total contribution, not per-input/output multiplier
Orderbook Watcher Stability
- Fixed aggressive offer pruning removing valid long-running makers
- Fixed peerlist handling treating partial updates as complete replacements
- Fixed concurrent read race conditions in TCP connections
- Philosophy shift: "show offers when in doubt" vs aggressive cleanup
Timeout Handling
- Fixed JoinMarket NG directory compatibility (120s timeout for peerlist features)
- Reduced Neutrino pending transaction timeout: 48h → 10h
## Performance & UX
- Estimated fees displayed before confirmation
- Final transaction summary with exact counts and fees
- Early backend validation before wallet sync
- Reduced logging verbosity for routine operations
- Improved sweep coinjoin logging clarity
## Backend Improvements
- Unified broadcast behavior across full node and Neutrino
- Self-fallback now allowed for RANDOM_PEER and MULTIPLE_PEERS policies
- Enhanced Neutrino UTXO detection with incremental rescans
- Block-based verification for Neutrino (no mempool access)
https://github.com/m0wer/joinmarket-ng/releases/tag/0.9.0