Skip to content

Latest commit

 

History

History
224 lines (144 loc) · 4.11 KB

File metadata and controls

224 lines (144 loc) · 4.11 KB

Contributing to rust-jpl

Thank you for your interest in contributing to rust-jpl! 🎉
Contributions of all kinds are welcome — bug reports, feature requests, documentation improvements, and code contributions.

This project focuses on scientific correctness, API clarity, and long-term stability, especially due to its integration with NASA JPL ephemeris data.


Code of Conduct

This project follows the guidelines outlined in CODE_OF_CONDUCT.md.
By participating, you agree to uphold respectful and inclusive behavior.


Ways to Contribute

You can contribute by:

  • Reporting bugs
  • Suggesting features or improvements
  • Improving documentation
  • Writing tests
  • Submitting pull requests

If you are unsure where to start, feel free to open an issue for discussion.


Reporting Bugs

When reporting a bug, please include:

  • The rust-jpl version
  • Rust compiler version (rustc --version)
  • Operating system and architecture
  • The relevant NASA JPL ephemeris (e.g., DE441)
  • Steps to reproduce the issue
  • Expected vs actual behavior
  • A minimal reproducible example, if possible

Please use the Bug Report issue template.


Feature Requests

Feature requests are welcome, especially those that:

  • Improve scientific accuracy
  • Extend support for additional JPL ephemerides
  • Improve ergonomics without sacrificing clarity
  • Maintain backward compatibility

Before starting implementation:

  1. Open a feature request issue
  2. Describe the use case and scope
  3. Discuss API design if public APIs are involved

This helps avoid wasted effort and ensures design alignment.


Development Setup

Requirements

  • Rust 1.70.0 or newer (MSRV)
  • Cargo
  • Git

Verify your setup:

rustc --version
cargo --version

Clone and Build

git clone https://github.com/chinmayvivek/rust-jpl.git
cd rust-jpl
cargo build

Coding Guidelines

Rust Style

  • Follow rustfmt
  • Code must pass cargo clippy without warnings
  • Prefer clear, idiomatic Rust over clever code
cargo fmt
cargo clippy --all-targets --all-features

API Design Principles

  • Public APIs should be explicit and predictable
  • Avoid breaking changes whenever possible
  • All public items must be documented
  • Types should encode invariants where possible
  • Favor Result over panics

Safety

  • Avoid unsafe unless absolutely necessary
  • Any use of unsafe must be:
    • Minimal
    • Justified
    • Documented

Testing

  • New features must include tests
  • Bug fixes should include regression tests
  • Prefer unit tests where possible
  • Integration tests should be used for ephemeris validation

Run tests with:

cargo test

Documentation

  • Public APIs must have /// doc comments
  • Examples in docs should compile
  • Update README.md when behavior changes
  • Keep documentation accurate and concise

Check documentation locally:

cargo doc --open

Commit Messages

Please use clear and descriptive commit messages:

feat: add DE440 ephemeris support
fix: correct Julian date conversion edge case
docs: clarify configuration example
refactor: simplify ephemeris loader

Pull Requests

Before Submitting

Ensure that:

  • Code builds successfully
  • All tests pass
  • cargo fmt and cargo clippy succeed
  • Public APIs are documented
  • Relevant issues are referenced

Review Process

  • All pull requests are reviewed by the maintainer
  • Feedback may be requested
  • Be open to discussion and revisions

As a solo-maintained project, response times may vary — thank you for your patience.


Release Policy

The project follows Semantic Versioning.

  • PATCH: bug fixes
  • MINOR: backward-compatible features
  • MAJOR: breaking changes

See RELEASE.md for details.


License

By contributing, you agree that your contributions will be licensed under the project’s license:

  • MIT OR Apache-2.0

Questions or Discussions?

If you have questions or are unsure about anything:

  • Open an issue
  • Start a discussion

Thank you for contributing to rust-jpl 🚀