Specter Desktop is an Open Source Project under the MIT License and everyone is invited to contribute to it.
We haven't created many explicit processes and rely on the best practices of Open Source projects. If you want to contribute, fork the project and create a PR.
- How to Contribute
- Development Setup
- Code Standards
- Testing
- Finding Help
- Contributors and Maintainers
To contribute code:
-
Fork the repository on GitHub
-
Create a branch from
master(or the relevant branch)git checkout -b your-feature-branch
-
Make your changes
- Follow our Code Standards
- Write or update tests as needed
- Update documentation if necessary
-
Test your changes
- Run the test suite (see Testing)
- Ensure all tests pass
-
Commit your changes
- Write clear, descriptive commit messages
- If addressing an issue, reference it in your commit message:
Fixes #123orCloses #123
-
Push to your fork and create a Pull Request
For detailed development setup instructions, see docs/development.md.
Quick start:
-
Install dependencies (see docs/development.md for platform-specific instructions)
-
Set up virtual environment
git clone https://github.com/cryptoadvance/specter-desktop.git cd specter-desktop pip3 install virtualenv virtualenv --python=python3 .env source .env/bin/activate # On Windows: .env\Scripts\activate pip3 install -r requirements.txt --require-hashes pip3 install -e .
-
Run the development server
python3 -m cryptoadvance.specter server --config DevelopmentConfig --debug
Specter will be available at http://127.0.0.1:25441/
Note: Specter currently supports Python 3.9 and 3.10.
- Use Black for code formatting. We have a pre-commit hook to automate this:
This will automatically format your code before commits.
pre-commit install
- We prefer plain JavaScript over frameworks
- Use Material Icons from https://material.io/resources/icons/?style=baseline
- Color scheme:
- Orange:
#F5A623 - Blue:
#4A90E2
- Orange:
- Minimize dependencies - We're security-conscious and prefer fewer dependencies
- If you update
requirements.in, generate the newrequirements.txt:pip-compile --generate-hashes requirements.in
We use two testing frameworks:
Run the test suite:
# Run all tests
pytest
# Run tests excluding slow ones
pytest -m "not slow"
# Run specific test file
pytest tests/test_specter.py
# Run specific test
pytest tests/test_specter.py::test_specterNote: You need bitcoind for tests. See docs/development.md for setup instructions.
Run Cypress tests:
# Run all Cypress tests
./utils/test-cypress.sh run
# Open Cypress app for interactive testing
./utils/test-cypress.sh open
# Run specific test with snapshot
./utils/test-cypress.sh snapshot spec_wallet_utxo.js
./utils/test-cypress.sh run spec_wallet_utxo.jsFor more details, see docs/cypress-testing.md.
- Documentation: Check docs/development.md for development setup
- FAQ: See docs/faq.md for common questions
- Telegram: Join our Telegram support group for real-time help
- GitHub Issues: Search existing issues or create a new one
Thank you very much to all our Contributors. See also the contributors to each specific release in the release-notes.
Maintainers are the ones who can merge PRs and create tags/releases. They are listed as "authors" in pyproject.toml (and setup.py).
If it's necessary to add more formal processes, we'll probably look into Pieter Hintjens' Social Architecture and specifically the C4 process. Pieter explicitly mentions two roles: Contributors and Maintainers.
Thank you for contributing to Specter Desktop! Your contributions help make Bitcoin more accessible and secure for everyone.