Thank you for your interest in contributing to Satkit! This document provides guidelines and information for contributors.
- Rust: Install the latest stable Rust toolchain from rustup.rs
- Python: Python 3.8 or later for Python bindings testing
- Git: For version control
-
Fork and clone the repository:
- First, fork the repository on GitHub by clicking the "Fork" button at github.com/ssmichael1/satkit
- Then clone your fork:
git clone https://github.com/YOUR-USERNAME/satkit.git cd satkit- Add the original repository as an upstream remote:
git remote add upstream https://github.com/ssmichael1/satkit.git
-
Download test vectors and data files:
python -m pip install requests python ./python/test/download_testvecs.py
-
Build the project:
cargo build
-
Run the tests:
cargo test
-
Create a new branch for your feature or fix:
git checkout -b feature/your-feature-name
-
Make your changes following the code style guidelines below
-
Test your changes:
cargo test cargo clippy -- -D warnings cargo fmt --check -
Commit your changes with clear, descriptive commit messages:
git commit -m "Add feature: brief description" -
Push to your fork:
git push origin feature/your-feature-name
-
Open a Pull Request on GitHub with a clear description of your changes
- Follow the Rust API Guidelines
- Use
cargo fmtto format your code (runs automatically in CI) - Ensure
cargo clippypasses without warnings - Write documentation comments (
///) for all public APIs - Include examples in documentation where appropriate
- Follow PEP 8 style guidelines
- Provide type hints in
.pyistub files for IDE support - Include docstrings for all public functions and classes
- Test Python bindings separately when making changes ; see
python/test/test.py
- Write unit tests for all new functionality
- Add integration tests for complex features
- Ensure existing tests continue to pass
- Add test cases from published references when available (Vallado, JPL, etc.)
- Update relevant documentation for API changes
- Add examples for new features
- Keep README.md up to date with new capabilities
- Document any breaking changes clearly
When you encounter a bug, please help us fix it by:
- Opening a GitHub Issue at github.com/ssmichael1/satkit/issues
- Include a minimal reproducible example
- Specify your environment (OS, Rust version, Python version if applicable)
- Describe expected vs actual behavior
- Add relevant error messages or stack traces
If you have a suggestion for a feature:
- Open a GitHub Issue at github.com/ssmichael1/satkit/issues
- Use a clear, descriptive title
- Explain the use case and potential benefits
- Describe the proposed solution or API
- Consider backward compatibility
- Tag the issue with the
enhancementlabel if possible
Note: Please open an issue to discuss significant new features before implementing them. This helps ensure alignment with project goals and avoids duplicated effort.
We welcome contributions in these areas:
- Bug fixes and correctness improvements
- Performance optimizations
- Additional test coverage
- Documentation enhancements
- See issues in github page for current list
To build and test the Python package locally:
# Create and activate a virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install build dependencies and test
pip install setuptools setuptools-rust setuptools-scm pytest
# Build and install in development mode
pip install -e .
# Run Python tests
python -m pytest python/test/test.pyWhen you're done developing, deactivate the virtual environment:
deactivatecargo testcargo test ode::ode_testscargo test -- --nocaptureAll pull requests are automatically tested via GitHub Actions:
- Build: Compiles on Linux, macOS, and Windows
- Test: Runs full test suite on all platforms
- Lint: Checks code style with clippy
- Format: Verifies formatting with rustfmt
- Python: Tests Python bindings on all supported versions (3.8-3.14)
Ensure all CI checks pass before requesting review.
- Maintainers will review your pull request
- Address any feedback or requested changes
- Once approved, maintainers will merge your contribution
- Your changes will be included in the next release
Satkit is dual-licensed under the MIT license (LICENSE-MIT) and the Apache License, Version 2.0 (LICENSE-APACHE). Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Satkit by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
- Open a GitHub Issue at github.com/ssmichael1/satkit/issues for questions about contributing
- Email the maintainer: ssmichael@gmail.com
- Review existing issues and pull requests for examples
- Check the documentation at satellite-toolkit.readthedocs.io
Thank you for contributing to Satkit! 🛰️