Thanks for your interest in contributing to OCTO! 🐙 We welcome contributions of all sizes.
- Fork the repo and create your branch from
main. - Install dependencies — see the project's README for setup instructions.
- Make your changes — follow existing code style.
- Add tests — if you're fixing a bug or adding a feature, please add tests.
- Update docs — if behavior changes, update the README/docs accordingly.
- Open a Pull Request — fill in the PR template.
- All changes go through a Pull Request.
- PRs must pass CI before merging.
- PRs require at least one approving review from a maintainer.
- We use squash-merge to keep history clean.
Follow Conventional Commits:
feat: add user presence API
fix: resolve message ordering race condition
docs: update README install steps
chore: bump dependency versions
- Describe what you changed and why.
- Reference any related issues (e.g.
Fixes #123). - Include screenshots for UI changes.
- Write PR descriptions in English to keep the history accessible to the global community.
- Go:
gofmt+golangci-lint - TypeScript/JavaScript: Prettier + ESLint (config in repo)
- Swift: SwiftFormat
- Kotlin: ktlint / Android Studio default
Open a GitHub issue using the Bug Report template. Include:
- Expected vs actual behavior
- Steps to reproduce
- Environment (OS, version, etc.)
- Logs/screenshots if relevant
Open a GitHub issue using the Feature Request template. Explain the use case and why existing features don't solve it.
By contributing, you agree that your contributions will be licensed under the project's Apache License 2.0.
- Open a GitHub Discussion
- Read the docs (coming soon)
Thanks for helping make OCTO better! 🚀