Contributing
Contributions can include bug reports, feature proposals, translations, documentation, tests, and source-code changes.
Report an issue or propose a feature
Section titled “Report an issue or propose a feature”Search the GitLab issue tracker before opening an issue. If no existing issue covers your case, include:
- The Blender Development, PyCharm, operating-system, and Blender versions involved
- Clear steps to reproduce the behavior
- What you expected and what happened instead
- Relevant logs or screenshots with credentials and personal information removed
For feature proposals, describe the workflow the feature would improve rather than only the proposed implementation.
Prerequisites
Section titled “Prerequisites”- JDK 21
- Network access for the first Gradle dependency resolution
- IntelliJ IDEA 2026 with Plugin DevKit installed
- One of these environments for the bundled Python runtime:
- PyCharm 2026
- IntelliJ IDEA 2026 with both Python and Python Community Edition installed
- Git and a GitLab account
- Blender 4.2 or newer for live integration testing
Set up the project
Section titled “Set up the project”- Fork the Blender Development repository on GitLab.
- Clone your fork using the URL shown on its GitLab page.
- Create a focused branch for the change.
- Open the repository as a Gradle project in IntelliJ IDEA 2026.
- Confirm Plugin DevKit is enabled. In IntelliJ IDEA, also enable Python and Python Community Edition.
- Set the project SDK to JDK 21 and allow Gradle to resolve the IntelliJ Platform dependencies.
- Confirm the project compiles:
./gradlew compileKotlin --no-daemonThe Gradle build packages src/main/python into the Blender runtime archive while processing plugin resources.
Make a focused change
Section titled “Make a focused change”- Use Kotlin for new JVM code and follow surrounding conventions.
- Put user-visible strings in
messages/MessageBundle.properties. - Add KDoc to new public classes and functions.
- Keep service and extension IDs stable unless the change includes a migration.
- Do not block Swing’s Event Dispatch Thread with file, network, or process work.
- Add or update tests for new behavior, regressions, and meaningful edge cases.
- Update public documentation when a user-facing workflow or setting changes.
Run the plugin
Section titled “Run the plugin”./gradlew runIdeThis opens a sandbox PyCharm instance with the development build installed. Exercise the affected workflow there, including both Run and Debug behavior when changing process or runtime integration.
Live Blender behavior is not covered by the JVM test suite. Test against a compatible Blender installation when changing discovery, launch, debugging, add-on loading, extensions, or runtime commands.
Validate changes
Section titled “Validate changes”At minimum, compile Kotlin and run the test suite:
./gradlew compileKotlin --no-daemon./gradlew test --no-daemonBuild the distributable plugin when changing dependencies, build metadata, packaged resources, or the bundled Python runtime:
./gradlew buildPluginIf a relevant check cannot run, explain what was skipped and why in the merge request.
Submit the change
Section titled “Submit the change”- Review the diff and exclude generated files, IDE metadata, credentials, and unrelated changes.
- Commit complete work as
[Type -> module] Description. Omit-> modulewhen the change spans three or more modules. - Push the branch to your fork.
- Open a merge request against the original GitLab repository.
- Summarize the problem and solution, list validation, and disclose known limitations or skipped checks.
- Link the issue addressed by the change when one exists.
Keep the merge request focused enough to review and test independently.
Licensing
Section titled “Licensing”Blender Development is licensed under the GNU General Public License v3.0 or later. By submitting a contribution, ensure you can provide the code, documentation, or assets under that license.