Getting Started
Thank you for your interest in contributing to angr Management! This guide will help you get started with contributing code, tests, and documentation.Set up your development environment
Follow the Development Setup guide to install angr Management from source with all development dependencies.
Clone the test binaries
Many tests require binary files from the angr binaries repository:The tests expect the binaries repository to be in
../binaries/ relative to the angr-management directory.Code Style
angr Management follows strict code style guidelines enforced by Ruff.Linting and Formatting
Style Guidelines
Configuration
Ruff configuration is inpyproject.toml:106-138:
- Target version: Python 3.10
- Line length: 120
- Excluded:
angrmanagement/vendor/
Testing
angr Management uses pytest for testing. All contributions should include appropriate tests.Running Tests
- All Tests
- Specific Tests
- Parallel Testing
Writing Tests
angr Management provides test base classes to simplify test creation. Seetests/common.py:33-71.
Test Base Classes
AngrManagementTestCase (tests/common.py:33)
- Creates a
MainWindowinstance withshow=False - Provides
self.main- the MainWindow - Cleans up after each test
ProjectOpenTestCase (tests/common.py:49)
- Extends
AngrManagementTestCase - Loads a default test binary (x86_64
true) - Provides convenience properties:
self.workspace- The Workspaceself.instance- The Instanceself.project- The angr.Project
- Waits for jobs to complete after setup
Headless Testing
Tests run in headless mode using Qt’s minimal platform:Coverage
Coverage configuration is inpyproject.toml:149-161:
Type Checking
Run mypy to check type hints:pyproject.toml:140-147:
- Packages checked:
angrmanagement,tests - Excludes:
angrmanagement/vendor/,/build,/dist
Pull Request Process
Make your changes
- Write code following the style guidelines
- Add tests for new functionality
- Update documentation if needed
- Run linting and tests locally
Push and create a pull request
- Clear title describing the change
- Description of what changed and why
- Any relevant issue numbers (e.g., “Fixes #123”)
- Screenshots for UI changes
Testing Pull Requests
The CI system runs multiple test suites:Platform Tests
Tests run on:- Windows (windows-2022)
- macOS (macos-15)
- Ubuntu ARM (ubuntu-24.04-arm)
- Ubuntu x64 (ubuntu-latest with coverage)
.github/workflows/ci.yml and .github/workflows/coverage.yml.
Test Groups
- Unit tests - Component-level tests
- Integration tests - Full workflow tests
- UI tests - Interactive component tests
API Stability
Plugin Development
Plugins are a great way to extend angr Management without modifying core code.Plugin Structure
Plugins are Python files containing aBasePlugin subclass:
Plugin Locations
Plugins are loaded from:angrmanagement/plugins/- Built-in plugins~/.local/share/angr-management/plugins/- User plugins
Plugin Resources
- Plugin base class source
- Any method or attribute can be overridden and will be called on relevant events
- See existing plugins in
angrmanagement/plugins/for examples
Documentation
Documentation contributions are always welcome!Building Documentation
Documentation Structure
- Sphinx RST - Legacy documentation in
docs/ - Mintlify MDX - New documentation (this site)
Getting Help
angr Discord
Join the community and ask questions
GitHub Issues
Report bugs or request features
Architecture Guide
Understand the codebase structure
Development Setup
Set up your development environment
Common Contribution Types
Bug Fixes
Bug Fixes
- Create an issue describing the bug (if one doesn’t exist)
- Write a test that reproduces the bug
- Fix the bug
- Verify the test passes
- Submit a PR referencing the issue
New Features
New Features
- Discuss the feature in an issue or on Discord first
- Design the feature to fit the existing architecture
- Implement the feature with comprehensive tests
- Update documentation
- Submit a PR with screenshots/examples
UI Improvements
UI Improvements
- Describe the UX issue or improvement
- Provide mockups or examples if possible
- Implement using Qt/PySide6 following existing patterns
- Test on multiple platforms if possible
- Include before/after screenshots in PR
Performance Improvements
Performance Improvements
- Profile and identify the bottleneck
- Write a benchmark test
- Implement the optimization
- Verify the benchmark shows improvement
- Ensure existing tests still pass
Code Review Guidelines
When reviewing or submitting code:- Functionality - Does it work as intended?
- Tests - Are there adequate tests?
- Style - Does it follow the code style?
- Performance - Are there any performance concerns?
- Documentation - Is it documented appropriately?
- Maintainability - Is it easy to understand and maintain?
License
By contributing to angr Management, you agree that your contributions will be licensed under the BSD-2-Clause License.Recognition
Contributors are recognized in:- Git commit history
- GitHub contributors page
- Release notes (for significant contributions)