Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/satsigner/satsigner/llms.txt

Use this file to discover all available pages before exploring further.

SatSigner is an open-source Bitcoin wallet application built for users who demand complete control over their Bitcoin. We welcome contributions from developers who want to help build powerful Bitcoin tools and improve Bitcoin UX.

Why Contribute?

  • Build powerful Bitcoin tools: Help create a comprehensive native mobile Bitcoin signer management application
  • Advance Bitcoin UX: Contribute towards the integration, development, and enhancement of Bitcoin user experience design
  • Privacy and sovereignty: Build privacy-first tools that give users complete control over their keys, data, and privacy
  • Visual Bitcoin tools: Unlock coin insights via integrated onchain analyses and data visualization to inform better Bitcoin usage practices
  • Educational impact: Advance Bitcoin understanding through visual tools and Bitcoin-native terminology
  • Open source ethos: Propagate FOSS principles and support Bitcoin and related projects
  • Participate in Bitcoin history: Be part of building the future of Bitcoin technology

Project Philosophy

Before contributing, familiarize yourself with SatSigner’s core principles:
  • Bitcoin On Chain First: Full vertical support of all things sats with on chain as the safe layer of last resort
  • Sat denomination supremacy: Sats as the primary unit
  • Complete UTXO control: Full control over coin selection and spending
  • Privacy first: Emphasis on privacy-enhancing features and no tracking
  • Visual-native UI: Comprehensive visualization tools for all Bitcoin data
  • Bitcoin-native terminology: Using Bitcoin’s true language (UTXOs, transactions, signers)
  • Security focused: PIN-protected encryption, seed dropping, multi-signature support
  • Open source: Fully auditable codebase with open-source dependencies only
  • User sovereignty: Complete control over keys, data, and privacy
  • Educational: Learn Bitcoin while using it with visual tools and explanations

Getting Started

The best way to get involved is to:
  1. Join the community:
  2. Set up your development environment:
  3. Find issues to work on:
    • Browse open issues
    • Look for issues tagged with good first issue for beginner-friendly tasks
    • Check the roadmap for upcoming features

Contribution Workflow

1. Fork and Clone

# Fork the repository on GitHub, then clone your fork
git clone https://github.com/YOUR_USERNAME/satsigner.git
cd satsigner

2. Create a Branch

git checkout -b feature/your-feature-name

3. Make Your Changes

  • Write clean, maintainable code following the project’s style
  • Add tests for new functionality
  • Update documentation as needed
  • Ensure all tests pass

4. Test Your Changes

# Run unit tests
cd apps/mobile
yarn test:unit

# Run integration tests
yarn test:int

# Type checking
yarn type-check

# Linting
yarn lint

5. Commit Your Changes

Write clear, descriptive commit messages:
git add .
git commit -m "feat: add UTXO labeling feature"
Follow conventional commit format:
  • feat: - New feature
  • fix: - Bug fix
  • docs: - Documentation changes
  • style: - Code style changes (formatting, etc.)
  • refactor: - Code refactoring
  • test: - Adding or updating tests
  • chore: - Maintenance tasks

6. Push and Create Pull Request

git push origin feature/your-feature-name
Then create a pull request on GitHub with a clear description of your changes.

Code Guidelines

TypeScript

  • Use TypeScript for all code
  • Enable strict type checking
  • Avoid any types - use proper type definitions
  • Define types in the types/ directory

Code Style

  • Follow the existing code style
  • Use Prettier for formatting (run yarn format:fix)
  • Use ESLint for linting (run yarn lint:fix)
  • Keep functions small and focused
  • Write descriptive variable and function names

React Native Best Practices

  • Use functional components with hooks
  • Optimize performance with useMemo and useCallback
  • Follow React Native’s platform-specific conventions
  • Test on both iOS and Android

State Management

  • Use Zustand stores for global state (see store/ directory)
  • Use React Query for server state
  • Keep state as local as possible
  • Use Immer for immutable updates

Testing

Unit Tests

Write unit tests for utility functions and isolated components:
// tests/unit/utils/bitcoin.test.ts
import { formatSats } from '@/utils/bitcoin'

describe('formatSats', () => {
  it('formats satoshis correctly', () => {
    expect(formatSats(100000000)).toBe('1.00000000')
  })
})

Integration Tests

Write integration tests for complex workflows:
// tests/int/wallet.test.ts
import { createWallet } from '@/api/bdk'

describe('Wallet Creation', () => {
  it('creates a wallet from mnemonic', async () => {
    // Test wallet creation workflow
  })
})

Areas for Contribution

High Priority

  • BDK integration improvements: Enhance Bitcoin Development Kit integration
  • Privacy features: Implement additional privacy-enhancing features
  • UTXO management: Improve coin control and selection UI/UX
  • Multi-signature workflows: Enhance collaborative signing experiences
  • Performance optimizations: Improve app performance and responsiveness

Features

  • Visualizations: New chart types and data visualizations
  • Layer 2 integrations: Lightning Network, eCash improvements
  • Nostr integration: Enhanced label synchronization
  • Transaction building: Advanced transaction construction tools
  • Accessibility: Improve accessibility for all users

Documentation

  • User guides: Step-by-step tutorials
  • API documentation: Document internal APIs
  • Architecture docs: Explain system design decisions
  • Examples: Code examples and use cases

Bug Fixes

  • Check the issue tracker for bugs
  • Verify the bug exists and document reproduction steps
  • Fix the bug and add regression tests

Security

Security is paramount in Bitcoin applications:
  • Never commit sensitive data: No private keys, mnemonics, or credentials
  • Review crypto code carefully: Encryption, key derivation, signing
  • Report security issues privately: Contact the team directly for vulnerabilities
  • Follow Bitcoin best practices: Use established libraries and patterns
  • Test security features thoroughly: Especially authentication and encryption

Code Review Process

All contributions go through code review:
  1. Automated checks: CI runs tests, linting, and type checking
  2. Peer review: Maintainers review code for quality and correctness
  3. Testing: Changes are tested on multiple devices and platforms
  4. Documentation: Ensure documentation is updated
  5. Merge: Once approved, changes are merged to main

Communication

  • Be respectful: Treat all contributors with respect
  • Be clear: Write clear issue descriptions and pull request explanations
  • Be responsive: Respond to feedback and questions promptly
  • Ask questions: Don’t hesitate to ask for help or clarification
  • Share knowledge: Help other contributors learn and grow

Recognition

We value all contributions:
  • Contributors are listed in the project
  • Significant contributions are highlighted in release notes
  • Active contributors may be invited to become maintainers

License

By contributing to SatSigner, you agree that your contributions will be licensed under the MIT License.

Questions?

If you have questions about contributing: Welcome to the SatSigner community! We’re excited to have you contribute to building the future of Bitcoin tools.