Contributing to Zulip
- Contributing guide
- Zulip Code of Conduct
- How we communicate
- Asking great questions
- Design discussions
- Commit discipline
- Code style and conventions
- Be consistent with existing code
- Follow Zulip conventions and practices
- Python-specific conventions and practices
- JavaScript and TypeScript conventions and practices
- HTML and CSS
- Dangerous constructs in Django
- Avoid excessive database queries
- Never do direct database queries (
UserProfile.objects.get()
,Client.objects.get()
, etc.) - Don’t use Django model objects as keys in sets/dicts
- Don’t call user_profile.save() without
update_fields
- Don’t update important model objects with raw saves
- Don’t use naive datetime objects
- Dangerous constructs in JavaScript and TypeScript
- Reviewing Zulip code
- Submitting a pull request
- Pull request review process
- Using zulipbot
- Reporting bugs
- Suggesting features and improvements
- Counting contributions
- Licensing