Thanks for your interest in contributing! This document describes how to get set up and what to keep in mind when submitting changes.
- Fork the repository and clone your fork.
- Make sure you have Rust 1.85+ installed (see README.md for setup).
- Run
cargo buildto verify everything compiles. - Place any test
.replayfiles in a subdirectory underassets/replays/and runcargo runto confirm parsing works.
Check ROADMAP.md for the current feature roadmap. Unchecked items are open for contribution. If you want to work on something not listed, open an issue first to discuss the approach.
Bot detection improvements and new match analysis modules are the highest priority areas right now.
- One module per feature — Each analysis feature lives in its own
src/<name>.rsfile. Don't add analysis logic tomain.rsorparser.rs. - Error handling — Use
Box<dyn error::Error>for public function return types. Don'tunwrap()in library code;unwrap()is acceptable inmain.rsfor CLI-level errors. - Network data parsing — Always enabled via
must_parse_network_data(). If your feature reads network frames, follow the existing pattern of resolving object IDs from theobjectsarray, then iteratingnetwork_frames.frames[].updated_actors. - Reporting — Each module should expose an
analyze()function that returns structured results, aprint_report()function for CLI output, andto_json()/results_to_json()methods for programmatic use. - Keep it simple — Don't over-abstract. Three similar lines of code is better than a premature helper function. Only add comments where the logic isn't self-evident.
- Create a feature branch from
main(git checkout -b feature/your-feature). - Make your changes. Keep commits focused — one logical change per commit.
- Make sure
cargo buildandcargo clippypass without warnings. - Test your changes against real replay files. Include sample output in the PR description if it's a new analysis module.
- Open a pull request against
main. In the PR description:- Describe what the change does and why.
- Reference the relevant ROADMAP item if applicable.
- Include example output for new features.
- Create
src/your_module.rs. - Add
mod your_module;tosrc/main.rs. - Wire it into the interactive menu in
main.rs(add a menu option and call youranalyze()+print_report()functions). - Update ROADMAP.md to check off the item.
- Add a section to README.md describing the feature.
- Run
cargo fmtbefore committing. - Run
cargo clippyand fix any warnings. - No unnecessary dependencies — if the standard library or an existing dependency can do it, use that.
Open an issue on the GitHub repository for questions, bug reports, or feature discussions.