Getting Started
Before you begin contributing, make sure you have:- Read the Development Setup guide
- Familiarized yourself with the Frappe Framework
- Joined our community channels:
Contribution Workflow
Fork and Clone
Fork the Frappe Helpdesk repository and clone it to your local machine:
Set Up Development Environment
Follow the local development setup from the README:For frontend development:
Make Your Changes
- Write clean, maintainable code following the project’s coding standards
- Add or update tests as needed (see Testing Guidelines)
- Update documentation if you’re changing functionality
- Follow the existing code structure and patterns
Commit Your Changes
Write clear, descriptive commit messages:Use conventional commit prefixes:
feat:for new featuresfix:for bug fixesdocs:for documentation changesrefactor:for code refactoringtest:for test additions or changeschore:for maintenance tasks
Pull Request Guidelines
Before submitting your pull request, ensure:- Code follows the project’s style and conventions
- All tests pass
- New code includes appropriate tests
- Documentation is updated if needed
- Commit messages are clear and descriptive
- PR description explains the changes and reasoning
- No merge conflicts with the target branch
Code Structure
Backend (Python)
Backend code follows Frappe Framework conventions:- DocTypes: Located in
helpdesk/helpdesk/doctype/ - API Endpoints: Located in
helpdesk/api/ - Utilities: Shared functions in
helpdesk/utils.py - Tests: Test files alongside doctypes as
test_*.py
Frontend (Vue.js)
Frontend uses Vue 3 with TypeScript:- Components: Located in
desk/src/components/ - Pages: Located in
desk/src/pages/ - Stores: Pinia stores in
desk/src/stores/ - Routing: Defined in
desk/src/router/
Coding Standards
Python
- Follow PEP 8 style guide
- Use type hints where applicable
- Write docstrings for functions and classes
- Use
frappe.qb.get_query()for database queries (preferred overfrappe.db.get_all()) - Add
@frappe.whitelist()decorator for API endpoints
JavaScript/TypeScript
- Use TypeScript with
<script setup lang="ts">syntax - Follow Vue 3 Composition API patterns
- Use Tailwind CSS semantic classes for styling
- Prefer Lucide icons for consistency
- Use frappe-ui composables (
createResource,createListResource,createDocumentResource)
Reporting Issues
When reporting bugs or requesting features:- Search existing issues to avoid duplicates
- Use issue templates for bugs and feature requests
- Provide details:
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details (Frappe version, browser, etc.)
- Screenshots or error logs if applicable
Security Vulnerabilities
If you discover a security vulnerability, please do not open a public issue. Instead, report it responsibly:- Visit frappe.io/security
- Follow the security disclosure process
Translation
Help translate Frappe Helpdesk to your language:- Visit the Crowdin project
- Request access or join an existing language team
- Translate strings and submit for review
Code of Conduct
Be respectful and inclusive:- Be welcoming to newcomers
- Respect differing viewpoints and experiences
- Accept constructive criticism gracefully
- Focus on what’s best for the community
Getting Help
If you need help with your contribution:- Ask questions in the Telegram group
- Post on the Discuss forum
- Check the documentation
- Review existing code for examples
Recognition
All contributors are valued and recognized:- Contributors are listed in the project’s GitHub contributors page
- Significant contributions are acknowledged in release notes
- Active contributors may be invited to become maintainers