Thank you for considering a contribution. nagara is in active early development; the foundation is intentionally small so contributors can learn the whole codebase in an afternoon.
just bootstrap # uv sync + start postgres/redis/minio
cp .env.example .env # set NAGARA_SECRET_KEY (generate with: python -c "import secrets; print(secrets.token_urlsafe(64))")
just dev # API on http://127.0.0.1:8000Inside the codespace or any local Linux/macOS:
just test # full test suite
just coverage # with branch coverage at htmlcov/index.html
just lint # ruff format + check --fix
just typecheck # ty
just check # everything CI runs (lint + format + types + tests)See CLAUDE.md — it documents the repository pattern,
service layer, route structure, and the kit/ split. New domain modules
follow model.py / schemas.py / repository.py / service.py / routes.py.
- Lowercase, present tense, ≤ 30 chars in the title (e.g.,
add rate limiting) - No prefix scopes (
feat:/fix:/ etc.) - Each commit a focused logical unit —
git rebase -i --autosquashwelcome - Body explains why when non-obvious
- Branch from
main(or the closest stacked branch) —git checkout -b feat/<short-name> - Run
just checklocally before pushing - Add tests for new code in
tests/test_<module>.py - Open a PR with a description that covers what changed and why
- Be patient — solo maintainer right now
Open an issue with:
- nagara version + git SHA
- Python version (
python -V) - Minimal reproduction
- Stack trace if applicable
- Expected vs actual behavior
Open a discussion first so we can align on shape before code.
By participating you agree to abide by the Code of Conduct.