Contributions are welcome! Whether it is a bug report, feature request, or pull request, we appreciate your help.
Read through the README and the documentation to understand how data-diff works.
Please include:
- The exact command you used (run with
-dfor debug output). - The full output (stdout, logs, exceptions).
- Steps to reproduce the issue, if possible.
Always redact sensitive information like passwords before pasting.
Check existing issues before filing a new one.
Open an issue for feature requests, new database support, or documentation improvements. If one already exists, upvote it with a thumbs-up to help prioritize.
git clone https://github.com/dtsong/data-diff.git
cd data-diff
uv sync # install all dependencies
uv run pre-commit install # set up pre-commit hooksSystem dependencies (if building native database drivers):
# macOS
brew install mysql postgresql
# Debian/Ubuntu
apt-get install libpq-dev libmysqlclient-devuv run pytest # run all tests
uv run pytest -k <test_name> # run a specific test
uv run pytest -x # stop on first failureuv run ruff check .- Format with
ruff format .. - Follow existing patterns in the codebase when in doubt.
Use Docker Compose to spin up test databases:
docker compose up -d mysql postgresUpdate TEST_*_CONN_STRING values in tests/local_settings.py (git-ignored) if your setup differs from the defaults.
Add a new module in data_diff/databases/. If possible, include the database in docker-compose.yml (or compose.yaml) and update CI configuration.
Guide: https://data-diff.readthedocs.io/en/latest/new-database-driver-guide.html
- Fork and create a feature branch.
- Write tests for your changes.
- Ensure all tests pass and linting is clean.
- Open a PR with a clear description of the change.
Maintainers will review and provide feedback. See GOVERNANCE.md for how decisions are made.