Thank you for your interest in contributing to Claude SDR Control! This project represents a 28-year dream of combining AI with software-defined radio, and we welcome contributions that help make it even better.
- Getting Started
- Development Environment Setup
- Hardware Requirements
- How to Contribute
- Reporting Bugs
- Submitting Pull Requests
- Code Style
- Project Structure
- Testing
- License
Before contributing, please:
- Read the README.md to understand the project architecture
- Check existing Issues to see if your idea is already being discussed
- Review the app-specific documentation in
claude-sdr-control/apps/directories - Consider starting with "good first issue" labeled items
- Python 3.10 or higher
- Git for version control
- Modern web browser for testing the dashboard
- HackRF One and/or PortaPack H2 (recommended but not required for basic development)
-
Fork and clone the repository:
git clone https://github.com/yourusername/sdr.git cd sdr/ -
Create a virtual environment:
python -m venv .venv source .venv/bin/activate # Linux/macOS # or .venv\Scripts\activate # Windows
-
Install dependencies:
pip install -r requirements.txt
-
Set up environment variables:
cp config.example.env .env # Edit .env with your hardware configuration -
Test the installation:
cd claude-sdr-control/ python sdr_web_server.pyOpen http://localhost:5051 in your browser to verify the dashboard loads.
Don't have SDR hardware? No problem! The system includes a REPLAY mode that uses cached data for development and testing:
- ADS-B tracking works with pre-recorded aircraft data
- All dashboards and web interfaces are fully functional
- Perfect for UI/UX improvements and web development
- No hardware required for most contributions
- HackRF One — Software-defined radio transceiver
- PortaPack H2 — Portable SDR platform (optional but recommended)
- Appropriate antennas for your target frequencies
- REPLAY mode works without any SDR hardware
- Mock data is available for most radio applications
- Web interface development can be done entirely offline
- New Radio Applications — Add support for additional protocols
- UI/UX Improvements — Enhance the web dashboards
- Documentation — Improve user guides and API docs
- Signal Processing — Optimize IQ decoders and DSP algorithms
- Testing — Help test with different hardware configurations
- Mobile Responsiveness — Improve mobile web experience
Each radio application has its own development documentation:
claude-sdr-control/apps/adsb/— ADS-B aircraft trackingclaude-sdr-control/apps/fm-radio/— FM broadcast radioclaude-sdr-control/apps/rds/— RDS data decodingclaude-sdr-control/apps/recon/— Frequency scanning- And more...
Check the TODO.md and ROADMAP.md files in these directories for specific tasks.
When reporting bugs, please include:
- Operating System (Windows 10, macOS 14, Ubuntu 22.04, etc.)
- Python Version (
python --version) - Hardware (HackRF One, PortaPack H2, antenna setup)
- Data Source Mode (REPLAY, SERIAL, or GATEWAY)
Use our Bug Report Template when creating issues. Include:
- Expected behavior vs actual behavior
- Steps to reproduce the issue
- Error messages or logs (if any)
- Screenshots (for UI issues)
- Hardware configuration (if hardware-related)
Helpful log locations:
- Web server: Console output from
sdr_web_server.py - HackRF Gateway:
claude-sdr-control/sdr-gateway/src/gateway.log - Serial Gateway:
serial-gateway/gateway.log
- Create an issue to discuss major changes
- Fork the repository and create a feature branch
- Test your changes thoroughly
- Update documentation if needed
-
Create a feature branch:
git checkout -b feature/your-feature-name
-
Make your changes and commit:
git add . git commit -m "Add: brief description of your changes"
-
Test thoroughly:
- Run existing tests:
pytest - Test web interface functionality
- Verify REPLAY mode works (if applicable)
- Run existing tests:
-
Push and create PR:
git push origin feature/your-feature-name
-
Fill out the PR template with:
- Description of changes
- Testing performed
- Screenshots (for UI changes)
- Breaking changes (if any)
- Keep PRs focused — One feature or fix per PR
- Write clear commit messages — Use conventional commit format when possible
- Update tests — Add tests for new functionality
- Update documentation — Keep README.md and app docs current
- Test on multiple platforms — If possible, test on different OS/hardware
We follow PEP 8 with some project-specific conventions:
- Line length: 100 characters (not 80)
- Import order: Standard library, third-party, local imports
- Type hints: Use where helpful, but not required everywhere
- Docstrings: Use for public functions and classes
- One class per file for major components
- Group related functions in utility modules
- Keep app-specific code in
claude-sdr-control/apps/[app-name]/ - Web assets go in
static/directory
- Variables and functions:
snake_case - Classes:
PascalCase - Constants:
UPPER_SNAKE_CASE - Files:
snake_case.py - Directories:
kebab-case
- HTML: Semantic markup, accessible structure
- CSS: BEM methodology for class names when possible
- JavaScript: Modern ES6+ syntax, avoid jQuery
- Responsive: Mobile-first design approach
Understanding the codebase:
sdr/
├── claude-sdr-control/ # Main application
│ ├── src/claude_sdr/
│ │ ├── decoders/ # IQ signal processing
│ │ ├── parsers/ # Data format parsers
│ │ └── controllers/ # Hardware control
│ ├── static/ # Web dashboards
│ ├── apps/ # Per-app documentation
│ └── sdr_web_server.py # Main FastAPI server
├── serial-gateway/ # PortaPack serial interface
├── screenshots/ # Documentation images
└── requirements.txt # Python dependencies
- Create decoder in
src/claude_sdr/decoders/ - Create parser in
src/claude_sdr/parsers/ - Add web dashboard in
static/ - Create app documentation in
apps/[app-name]/ - Update main server routing
Run the test suite:
pytestEssential manual tests:
- Web dashboard loads at http://localhost:5051
- REPLAY mode works for development testing
- WebSocket connections establish correctly
- App-specific dashboards display data properly
If you have SDR hardware:
- Serial Gateway connects to PortaPack
- HackRF Gateway streams IQ data
- Frequency tuning works correctly
- Signal decoders produce expected output
By contributing, you agree that your contributions will be licensed under the MIT License. See the LICENSE file for details.
- Documentation issues: Check
claude-sdr-control/apps/directories - Technical questions: Create a GitHub issue
- General discussion: Use GitHub Discussions (when enabled)
Thank you for helping make Claude SDR Control even better! 🎯📡