A desktop application for performing private Bitcoin swaps using the Coinswap Protocol.
In the Coinswap protocol, a Taker is a Bitcoin user who initiates atomic swaps to enhance their transaction privacy. The Taker app acts as a Bitcoin wallet with coinswap capabilities, allowing you to:
- Swap your Bitcoin UTXOs with multiple makers simultaneously
- Break transaction graph analysis through multi-hop routing
- Maintain complete custody of your funds throughout the swap
- Earn privacy without trusting any third party
Unlike traditional Bitcoin transactions that create an on-chain trail, coinswaps mix your coins through multiple makers, making it significantly harder to trace the origin and destination of funds.
The Taker app requires the following components to operate:
-
Bitcoin Core (Mutinynet) - A fully synced Mutinynet node with proper RPC and ZMQ configuration
- See the Bitcoin Core setup guide for detailed instructions
-
Tor - Required for anonymous maker discovery and privacy
- See the Tor setup guide for configuration instructions
-
Node.js (v18 or higher) - Only required for building from source
-
Rust toolchain - Only required for building from source
- Install from rustup.rs
If you prefer a pre-configured environment, you can use Docker Compose to spin up Tor, Bitcoin Core (Mutinynet), and maker services automatically.
See the Docker setup guide for instructions.
# Clone the repository
git clone https://github.com/citadel-tech/taker-app.git
cd taker-app
# Install dependencies and setup native modules
# Note: First-time setup compiles Rust code and may take 2-3 minutes
npm install
# Start development mode
npm run devBuilt with Electron, Vanilla JavaScript, and Tailwind CSS. The app communicates with the Coinswap protocol through coinswap-ffi, which provides native Rust performance for cryptographic operations and protocol handling.
The app uses coinswap-napi, a Node.js native addon that wraps the Rust coinswap implementation. This is automatically built and linked during installation:
npm installtriggers thepreparescriptsetup-coinswap.jsclones coinswap-ffi- The native module is compiled and symlinked to
node_modules/coinswap-napi
If you encounter issues with the native module, manually run:
npm run setup:coinswapSee the Usage Guide for detailed instructions on:
- Wallet management and setup
- Browsing the maker marketplace
- Executing coinswaps
- Sending and receiving Bitcoin
- Recovery procedures
Before creating a production build, ensure you have installed all dependencies:
npm installThis will automatically:
- Install Node.js dependencies
- Clone and build the coinswap native module (first build may take 2-3 minutes)
- Build production CSS
npm run distThis creates production-ready packages in the dist/ directory:
TakerApp-1.0.0.AppImage- Portable executable for all Linux distributionstaker-app_1.0.0_amd64.snap- Optional snap package
# Make executable (one-time)
chmod +x dist/TakerApp-1.0.0.AppImage
# Run directly
./dist/TakerApp-1.0.0.AppImageOptional desktop integration:
# Integrate with application menu
./dist/TakerApp-1.0.0.AppImage --appimage-integrate
# Remove integration
./dist/TakerApp-1.0.0.AppImage --appimage-unintegrateExtract and inspect:
./dist/TakerApp-1.0.0.AppImage --appimage-extract
cd squashfs-root
./TakerApp- Native Module: Production builds use release-optimized Rust binaries (
--releaseflag) for better performance and reduced memory usage - ASAR: Currently disabled to ensure native module compatibility
- CSS: Tailwind processes only the classes used in your app for minimal bundle size
For development with hot-reload:
npm run devThis runs:
- Tailwind CSS in watch mode
- Electron in development mode with live reloading
| Command | Description |
|---|---|
npm install |
Install dependencies and setup native modules |
npm run dev |
Start app in development mode with hot-reload |
npm run setup:coinswap |
Clone/update and build the coinswap native module |
npm run build:css |
Build Tailwind CSS for production |
npm run dist |
Create production build (AppImage + Snap) |
npm start |
Start Electron without hot-reload |
AppImage won't run
# Check if FUSE is available
which fusermount
# If missing, install FUSE2
sudo apt install fuse libfuse2
# Or extract and run directly
./TakerApp-1.0.0.AppImage --appimage-extract
./squashfs-root/TakerAppError: Cannot find module 'coinswap-napi'
npm installNative module fails to load
# Rebuild the native module
cd coinswap-ffi/coinswap-js
npm run build
cd ../..
npm run setup:coinswapBuild takes a long time
The first build compiles Rust code which can take 2-3 minutes. This is normal. Subsequent builds will be faster as most dependencies are cached.
Contributions are welcome! To contribute:
- Report Bugs - Open an issue with reproduction steps
- Suggest Features - Propose improvements via issues
- Submit Code - Fork, create a feature branch, and submit a PR
- Test changes on both Signet and Regtest before submitting
- Ensure
npm run distsucceeds before submitting PRs - For protocol-level changes, contribute to the core Coinswap library
Questions? Join our Discord server.
Report security issues on our Discord or email [email protected].
Dual-licensed under MIT or Apache 2.0 at your option.
- Discord - Join our server
- GitHub Issues - Report bugs and request features
- Core Library - Coinswap protocol implementation