# Contributing to fast
Thank you for your interest in contributing to fast! This document provides guidelines for contributing to the project.
## Getting Started
1. Fork the repository
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/fast.git`
3. Create a new branch: `git checkout -b feature/your-feature-name`
4. Make your changes
5. Run tests and ensure compilation: `cargo test && cargo check`
6. Commit your changes with a descriptive message
7. Push to your fork and submit a pull request
## Development Setup
### Requirements
- Rust nightly (for unstable features)
- Linux with io_uring support (kernel 5.1+)
- x86_64 or aarch64 architecture
### Building
```bash
cargo build
cargo test
```
## Code Guidelines
- **No external dependencies**: This is a core design principle
- **Safety first**: Unsafe code must be thoroughly documented and justified
- **Performance matters**: But not at the expense of correctness
- **Platform-specific code**: Use conditional compilation appropriately
- **Documentation**: Public APIs must be documented
- **Tests**: Add tests for new functionality
## Pull Request Process
1. **One feature per PR**: Keep changes focused and reviewable
2. **Update documentation**: Including inline comments and README if needed
3. **Add tests**: All new features should have corresponding tests
4. **Fix warnings**: Code must compile without warnings
5. **Describe changes**: Provide clear PR description and motivation
## Code Style
- Follow Rust standard formatting: `cargo fmt`
- Use descriptive variable names
- Keep functions focused and small
- Comment complex algorithms
- Use type annotations where helpful for clarity
## Testing
- Unit tests go in the same file as the code
- Integration tests go in `tests/`
- Use `#[cfg(test)]` for test modules
- Mock external dependencies when needed
## Areas Needing Help
- Completing `todo!()` implementations
- Performance benchmarking
- Documentation improvements
- Cross-platform compatibility research
- Security auditing of unsafe code
## Communication
- Open an issue for bugs or feature requests
- Discuss major changes before implementing
- Be respectful and constructive in all interactions
## License
By contributing, you agree that your contributions will be licensed under the MIT License.