We are always happy to see new contributors! If small or large, every contribution is welcome. Please follow these guidelines to ensure a smooth contribution process.
Found a bug or issue? Please open a report on the GitHub Issues page and include:
- What you did (steps to reproduce)
- What you expected vs. what actually happened
- Your environment (OS, Python version)
- Any relevant error messages or logs
We use uv as our Python package manager and project tool. If you don't have uv installed, follow the official installation guide.
- Clone or fork the repository from GitHub.
# Clone the repository
git clone https://github.com/metasauce/plistsync
cd plistsync- Install the required dependencies (including dev, test dependencies and all optional dependencies)
uv sync --all-groups --all-extras- Make your changes in a new branch.
git checkout -b my-feature-branch- Write code
- Add or update tests as needed
- Update documentation if your changes affect the public API
- Ensure code meets quality standards.
# Activate the virtual environment first
source ./.venv/bin/activate
# Check code style and formatting
ruff check --fix .
ruff format .
# Run type checking
mypy .
# Strip output from notebooks (if modified)
find . -name '*.ipynb' -exec nbstripout --keep-output {} +
# Run mypy on notebooks
./.github/workflows/mypy_notebooks.shIf this looks tedious you may alternatively install the pre-commit hooks to automatically enforce code quality standards before each commit (this runs the commands above autocmatically).
# Install the git hooks
pre-commit installOnce installed, every git commit will trigger automatic formatting with ruff, type checking with mypy, and linting. If you need to skip these checks (e.g., for a work-in-progress commit), use git commit --no-verify.
- Run tests
pytest .- Commit your changes with clear messages.
git add .
git commit -m "Add feature X"Looking for a place to start? Search the codebase for TODO and FIXME comments. These mark areas that need improvement, new features, or bug fixes and are often great entry points for new contributors.
Feel free to follow this guide for more information on how to create a pull request. Once you are done we will review your changes as soon as possible. Please be patient, as we are a small team and may not be able to review your changes immediately.
We use:
- Ruff for linting and formatting
- mypy for type checking
- pytest for testing
Please ensure your code passes all checks before submitting a pull request.
We are not opposed to AI-generated contributions, but communication should be handled by a real person. We will likely have questions about your PR, and we need you to understand the proposed changes in order to discuss with us what the implications are. If a contribution is mostly AI-generated, we also expect this information to be disclosed upfront.
We value human oversight and accountability, AI as a tool, not a contributor.