First off, thank you for considering contributing to Kalign! It's people like you that make Kalign such a powerful multiple sequence alignment tool for the bioinformatics community.
- Code of Conduct
- How Can I Contribute?
- Getting Started
- Development Environment Setup
- Pull Request Process
- Issue Guidelines
- Coding Standards
- Testing
- Community
This project and everyone participating in it is governed by our commitment to providing a welcoming and inclusive environment. By participating, you are expected to uphold high standards of respectful communication and collaboration.
Our Standards:
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Gracefully accept constructive criticism
- Focus on what is best for the community
- Show empathy towards other community members
We welcome many different types of contributions:
- Bug reports and fixes - Help us identify and resolve issues
- Performance improvements - Optimizations for speed and memory usage
- New features - Alignment algorithms, output formats, or usability enhancements
- Documentation - API docs, tutorials, examples, or README improvements
- Testing - Writing tests, testing on different platforms, benchmarking
- Python bindings - Improvements to the Python package
- Build system - CMake, Zig, CI/CD improvements
Please don't use the issue tracker for:
- Support questions (use discussions instead)
- Feature requests that fundamentally change Kalign's core purpose
- Issues related to third-party tools or dependencies
Unsure where to begin? You can start by looking through these issues:
- Good first issue - Issues that are good for newcomers
- Help wanted - Issues that need attention from the community
Never made an open source contribution before? Here are some helpful resources:
For large changes, please open an issue first to discuss what you would like to change. This helps ensure your contribution aligns with the project's goals and avoids duplicate work.
- C compiler - GCC, Clang, or MSVC
- CMake (3.18 or higher)
- Git
- OpenMP (optional, for parallelization)
- Zig (for alternative build system)
- Python (3.9+ for Python bindings)
- pybind11 (for Python module development)
# Clone your fork
git clone https://github.com/yourusername/kalign.git
cd kalign
# Create build directory
mkdir build && cd build
# Configure and build
cmake ..
make
# Run tests
make testcd python
pip install -e .
python -c "import kalign; print(kalign.__version__)"- Fork the repository and create your branch from
main - Make your changes following our coding standards
- Add tests for any new functionality
- Update documentation if you change APIs or add features
- Ensure tests pass locally before submitting
- Submit a pull request with a clear description
- One feature per PR - Keep changes focused and atomic
- Clear commit messages - Use descriptive commit messages
- Link related issues - Reference any related issue numbers
- Update CHANGELOG - Add a brief description of your changes
- Cross-platform compatibility - Ensure changes work on Linux, macOS, and Windows
When reporting bugs, please include:
- Kalign version - Output of
kalign --version - Operating system - Including version
- Build information - How you installed/built Kalign
- Input data - Sample sequences that trigger the bug (if possible)
- Expected behavior - What you expected to happen
- Actual behavior - What actually happened
- Error messages - Complete error output
- Steps to reproduce - Minimal steps to trigger the issue
When suggesting features:
- Use case - Describe the problem you're trying to solve
- Proposed solution - How you envision the feature working
- Alternatives - Other approaches you've considered
- Impact - Who would benefit from this feature
For performance problems:
- Input size - Number and length of sequences
- System specs - CPU, RAM, OS
- Timing data - How long operations take
- Comparison - Performance with other tools (if applicable)
- Indentation - Use spaces, not tabs (consistent with existing code)
- Naming - Use descriptive variable and function names
- Comments - Document complex algorithms and non-obvious code
- Memory management - Always check malloc/free pairs
- Error handling - Use consistent error checking patterns
- PEP 8 - Follow Python style guidelines
- Type hints - Use type annotations for function signatures
- Docstrings - Document all public functions and classes
type(scope): brief description
Detailed explanation if needed
Fixes #issue_number
Examples:
fix(alignment): handle empty sequences correctlyfeat(python): add support for custom gap penaltiesdocs(readme): update installation instructions
# C/C++ tests
cd build
make test
# Python tests
cd python
python -m pytest- All tests must pass before submitting PRs
- Add tests for new features and bug fixes
- Cross-platform testing - Test on different operating systems when possible
- Performance tests - Include benchmarks for performance-critical changes
Use the provided test sequences in tests/data/ or create minimal test cases. For large datasets, provide instructions for users to download test data separately.
- GitHub Discussions - For questions and general discussion
- Issues - For bug reports and feature requests
- Email - Contact the maintainer for security issues
Contributors are recognized in:
- AUTHORS file - All contributors are listed
- Release notes - Significant contributions are highlighted
- Paper acknowledgments - For substantial algorithmic contributions
By contributing to Kalign, you agree that your contributions will be licensed under the Apache License 2.0.
Don't hesitate to ask! The worst thing that can happen is that you'll be politely asked to change something. We appreciate any sort of contribution and don't want a wall of rules to get in the way of that.
Thank you for contributing to Kalign! 🧬