Thanks for your interest in contributing! We welcome contributions from everyone.
Please read and follow our Code of Conduct.
- Check existing issues
- Open a new issue describing the feature or bug
- Wait for maintainer feedback before starting work
git clone https://github.com/OpenS2P/OpenS2P.git
cd OpenS2P
make installgit checkout -b feat/your-feature-name
git checkout -b fix/your-bug-fix- Backend: Python 3.12, FastAPI, SQLAlchemy 2.x
- Frontend: React 19, TypeScript, Tailwind CSS
- Follow existing code style and patterns
make lint
make test- Target the
mainbranch - Include a clear description of changes
- Reference the related issue
- Keep PRs focused on a single concern
Please do not open a public issue for a security vulnerability. Email opens2p@gmail.com with details and we'll respond privately.
- Use
asyncfor all endpoints and service methods - Business logic belongs in services, not in endpoints
- Database queries belong in repositories, not in services
- Add audit events for all state-changing operations
- Include unit tests for new functionality
- One component per file
- Use TypeScript strict mode
- Use TanStack Query for server state
- Use Tailwind utility classes (no CSS modules)
Before submitting:
- Code follows project style
- Tests pass (
make test) - Lint passes (
make lint) - Documentation updated
- Commit messages are clear
- PR targets
developbranch
Open a discussion or issue.