Skip to content

joinstr

joinstr is a coinjoin implementation for bitcoin that uses nostr relays for coordination. There is no central coordinator. Anyone can create a pool and anyone can join one. Every participant checks and broadcasts the final transaction on their own.

A pool brings together a fixed number of peers who each put in one coin of about the same value and get back one output of exactly the pool denomination at a fresh address. Inputs are signed with SIGHASH_ALL|ANYONECANPAY, which lets each peer sign their own input before seeing the others and keeps coordination to a few simple steps.

joinstr started as a proof of concept in August 2022. Today it has an Electrum plugin, a web UI available in the Umbrel app store, a REST daemon with a CLI, an Android app, a Sparrow Wallet fork and a Rust library with Dart bindings.

  • Quickstart

    Pick a client and make your first coinjoin.

  • How it works

    Pools, rounds, signatures and what each peer checks.

  • Protocol

    Event kinds, message formats and validation rules.

  • For LLMs and agents

    llms.txt, markdown sources and a compact brief.

Clients

Client Platform Wallet backend Latest release
Electrum plugin Linux, macOS, Windows Electrum server 0.4.2
Web UI Browser, Umbrel Bitcoin Core Umbrel app 0.1.2
Daemon and CLI Any system with Python 3 Bitcoin Core in repository
Android app Android 7.0 or newer Bitcoin Core 0.3.0
Sparrow Linux, Windows Any Sparrow server 0.2.0
Rust and Dart library Library Electrum server in repository

Key properties

  • No coordinator. Pools are announced and run over ordinary nostr relays. A pool uses one relay, chosen by its creator.
  • One denomination per pool. Every output in the coinjoin has the same value and there are no change outputs.
  • Tor by default. The Electrum plugin, web UI, daemon, Android app and Sparrow send relay traffic through Tor on separate circuits, so a relay cannot link a peer's input to their output by IP address.
  • Fresh keys. Each pool has its own nostr key pair and each joining peer uses a new one, so nothing ties a pool to a long lived nostr identity.
  • Optional sybil resistance. The Electrum plugin and Sparrow can require peers to prove ownership of a coin in a published set with aut-ct, without revealing which coin.
  • No fees to anyone but miners. Peers share the mining fee. A paid relay may charge its own fee.