Thank you for your interest in contributing. httpware is an open-source resilience-first async HTTP client framework for Python, maintained under the modern-python org.
git clone https://github.com/modern-python/httpware.git
cd httpware
just install # uv lock --upgrade && uv sync --all-extras --frozen --group lint
just lint # eof-fixer + ruff format + ruff check + ty check
just test # pytest with coverage- Open an issue first for non-trivial changes — design discussion catches issues earlier than code review.
- Branch from
main, use a descriptive name (feat/retry-budget-jitter,fix/transport-cancel-leak). - Run
just lintandjust testlocally before pushing. CI will reject changes that fail either. - Add tests for any code change. Property-based tests (via Hypothesis) are required for concurrency-sensitive code (retry budget, bulkhead, retry interleaving).
- Open a pull request against
main. PR titles use conventional-commits style (feat:,fix:,docs:,refactor:,test:,chore:).
ruff formatenforces formatting; do not hand-format.- Type-check with
ty(Astral). Use# ty: ignore[<rule>]for suppressions, not# type: ignore. - Do NOT use
from __future__ import annotations. Python 3.11+ is the floor. - Module, class, and public-method docstrings are required (PEP 257); see
architecture/conventions.md.
These are project invariants — see
architecture/overview.md for exactly which
ones CI machine-checks, partially checks, or leaves to review. Do not break
them in pull requests:
- No
httpx2._*(private API) usage anywhere in the library. - No
from __future__ import annotations. - No
print()calls. - No
logging.basicConfig()or barelogging.getLogger(). - Type suppressions use
# ty: ignore[<rule>], never# type: ignoreor# mypy: ignore.
By participating in this project, you agree to abide by its Code of Conduct. Be excellent to one another.
By contributing, you agree that your contributions will be licensed under the project's MIT license.