Ways to Contribute
There are many ways you can contribute to Plane:- Try Plane Cloud and self-hosting and provide feedback
- Add new integrations
- Add or update translations
- Help with open issues or create your own
- Share your thoughts and suggestions
- Help create tutorials and blog posts
- Request features by submitting proposals
- Report bugs
- Improve documentation - fix incomplete or missing docs, bad wording, examples, or explanations
Before You Start
Search Existing Issues
Before submitting a new issue, search the issues tab. An issue or discussion might already exist that can inform you of workarounds or provide new information.Set Up Your Development Environment
Make sure you have your local development environment configured before contributing code.Submitting Issues
Creating Quality Bug Reports
When reporting a bug, provide us with a minimal reproduction scenario. This helps us investigate without asking follow-up questions:- Third-party libraries being used and their versions
- A specific use case that fails
- Steps to reproduce the issue
- Expected vs. actual behavior
Without a minimal reproduction, we may not be able to investigate or resolve the issue.
Naming Conventions for Issues
Use clear and concise titles following this format:- Bugs:
🐛 Bug: [short description] - Features:
🚀 Feature: [short description] - Improvements:
🛠️ Improvement: [short description] - Documentation:
📘 Docs: [short description]
🐛 Bug: API token expiry time not saving correctly📘 Docs: Clarify RAM requirement for local setup🚀 Feature: Allow custom time selection for token expiration
Feature Requests
If you’d like to request a new feature:- Submit a feature request
- If you want to implement it yourself, submit an issue with your proposal first to ensure alignment with project goals
- Follow the coding guidelines below
Coding Guidelines
To ensure consistency throughout the source code, follow these rules:Code Style
- TypeScript: Strict mode enabled, all files must be typed
- Naming Conventions:
camelCasefor variables and functionsPascalCasefor components and types
- Imports:
- Use
workspace:*for internal packages - Use
catalog:for external dependencies
- Use
Linting and Formatting
Plane uses OxLint and oxfmt for code quality:.oxlintrc.json- Linting rules.oxfmtrc.json- Formatting rules
Testing
- All features or bug fixes must be tested by one or more specs (unit tests)
- Use the existing test framework for each package
- Run tests before submitting your pull request
Error Handling
- Use try-catch blocks with proper error types
- Log errors appropriately using the logger package
- Provide meaningful error messages
State Management
- MobX stores should be placed in
packages/shared-state - Follow reactive patterns
- Use observables, computed values, and actions appropriately
Component Development
- Build reusable components in
@plane/ui - Use Storybook for isolated development and testing
- Start Storybook:
pnpm --filter=@plane/ui storybook
Contributing Translations
Translation Structure
Translations are organized by language in thepackages/i18n/src/locales/ directory:
Translation Format
Plane uses IntlMessageFormat for dynamic content: Simple variables:Updating Translations
- Locate the key in
locales/<language>/translations.json - Update the value while keeping the key structure intact
- Preserve any existing ICU formats (variables, pluralization)
Adding New Translation Keys
- Add the key to all language files
- Use English as a placeholder if translations aren’t immediately available
- Keep the nesting structure consistent across all languages
- Apply ICU format uniformly if using dynamic content
Adding New Languages
Create translation files
- Create
locales/your-lang/folder - Add
translations.jsonfile - Copy structure from an existing translation file
Translation Quality Checklist
Before submitting:- All translation keys exist in every language file
- Nested structures match across all languages
- ICU message formats are correctly implemented
- All languages load without errors
- Dynamic values and pluralization work as expected
- No missing or untranslated keys
Pull Request Process
- Fork the repository and create your branch from
master - Make your changes following the coding guidelines
- Test your changes thoroughly
- Run checks:
pnpm checkto ensure code quality - Commit your changes with a clear commit message
- Push to your fork and submit a pull request
- Wait for review - maintainers will review your PR and provide feedback
Pull Request Guidelines
- Provide a clear description of the changes
- Reference any related issues
- Include screenshots for UI changes
- Ensure all checks pass
- Be responsive to feedback
Getting Help
Questions, suggestions, and thoughts are always welcome!- Forum: forum.plane.so
- GitHub Discussions: GitHub
- Documentation: docs.plane.so
Next Steps
- Set up your development environment
- Learn about Plane’s architecture
- Explore open issues to find something to work on
