Blender Plugin Development
Quick Start
- Confirm target Blender versions (minimum and maximum expected).
- Read
references/blender4_to_5_compat.mdbefore writing or patching code. - Scaffold a new add-on package with
scripts/scaffold_addon.pywhen requested. - Implement requested behavior with explicit compatibility guards for 4.x and 5.x.
- Validate syntax and registration flow before returning code.
Workflow
1) Scope the task
- Extract target behavior, UI location, operator names, and data model.
- Ask for Blender version range if unspecified; default to
>= 4.0with 5.x awareness. - Decide whether output should be:
- A full add-on package.
- A standalone
bpyscript. - A migration patch to existing code.
2) Generate a baseline when creating a new add-on
- Run:
python3 scripts/scaffold_addon.py --name "<Addon Name>" --output <target-dir>
- Customize generated
__init__.py,operators.py,ui.py, andcompat.pyfor the feature request. - Keep
bl_info["blender"]at the minimum supported version (for this skill, usually(4, 0, 0)or higher).
3) Implement compatibility-safe code
- Use
bpy.app.versiongates only when behavior truly diverges. - Prefer compatibility wrappers in
compat.pyover scattered version checks. - Avoid APIs called out as removed/deprecated in
references/blender4_to_5_compat.md. - For operator context overrides, use
context.temp_override(...). - For assets, prefer
context.assetandAssetRepresentation. - For GPU drawing in 5.x, avoid
bgland migrate togpu.
4) Validate before returning code
- Run
python3 -m py_compileon changed Python files. - If Blender binaries are available, run headless smoke tests:
blender --background --factory-startup --python <smoke_test.py>
- Check register/unregister order and operator
bl_idnameformat. - Confirm no removed API names remain in generated output.
Script Generation Patterns
- Generate small, composable files:
operators.pyfor operators.ui.pyfor panels/menus.compat.pyfor version shims.__init__.pyforbl_infoand registration entrypoints.
- Use idempotent register/unregister functions.
- Keep class lists explicit (tuple of classes) and unregister in reverse order.
- Report actionable failures with
self.report({"ERROR"}, "...")inside operators. - Avoid hard-coded context assumptions in
poll()andexecute().
Required Compatibility Rules
- Avoid dict-like access for runtime-defined RNA properties in 5.0 when accessing add-on-defined data; use supported property access patterns documented in Blender 5.0 release notes.
- Never depend on bundled private modules listed in Blender 5.0 notes (for example,
bl_ui_utils,rna_info). - Treat
scene.use_nodesas deprecated and avoid using it for new code. - Avoid
UILayout.template_asset_view()in new code; use asset-shelf-compatible APIs. - Keep code ready for Blender 6.0 removals by addressing documented 5.0 deprecations proactively.
Resources (optional)
scripts/
scripts/scaffold_addon.py: Generate a Blender 4/5-ready add-on package skeleton.
references/
references/blender4_to_5_compat.md: Blender 4.0 and 5.0 compatibility map with official sources.references/script_generation_patterns.md: Reusable patterns for operators, panels, and background scripts.