PluginBench
Rule

blender python addon

via PatrickJS/awesome-cursorrules

Structure, register, and safely script Blender Python add-ons with operators, panels, and properties.

What is blender python addon?

Rules for building Blender Python add-ons covering operator and panel design, property registration, API safety, and cleanup. Use this when creating or maintaining add-ons that extend Blender's functionality with custom tools, UI panels, or scene automation.

  • Define operators, panels, and property groups with explicit bl_idname, bl_label, and context validation
  • Register and unregister classes, handlers, and keymaps cleanly to avoid memory leaks and conflicts
  • Store add-on settings in PropertyGroup and AddonPreferences instead of global state
  • Use dependency graph and evaluated objects for reading final scene state safely
  • Batch mesh edits with bmesh and avoid blocking UI work in modal operators
  • Test add-on import, registration, core operations, and cleanup in clean Blender profiles

Applies to

File patterns this rule matches.

["**/*.py"
blender_manifest.toml
"__init__.py"]
Rule definition (reference)

Source of truth, from the repository.

Blender Python Add-on Rules

Add-on Structure

  • Keep add-on entry points in __init__.py with clear register() and unregister() functions.
  • Group operators, panels, properties, preferences, and utilities into separate modules for non-trivial add-ons.
  • Use bl_info or blender_manifest.toml according to the Blender version and packaging target.
  • Keep UI labels concise and user-facing text translatable where appropriate.

API Usage

  • Use bpy.types.Operator for actions, bpy.types.Panel for UI, and bpy.types.PropertyGroup for grouped settings.
  • Define bl_idname, bl_label, and bl_options explicitly.
  • Validate context in poll() before enabling operators.
  • Use invoke() for interactive setup and execute() for the actual operation.
  • Return {'FINISHED'} or {'CANCELLED'} consistently.
  • Use dependency graph updates and evaluated objects when reading final scene state.

Data and Properties

  • Register custom properties through PropertyGroup classes instead of loose global state.
  • Store add-on preferences in AddonPreferences.
  • Use PointerProperty, CollectionProperty, and typed properties with names and descriptions.
  • Clean up custom properties and handlers during unregister().

Safety and Performance

  • Do not run destructive scene operations without explicit user action.
  • Avoid blocking UI work in modal operators; use timers or modal state machines for long operations.
  • Batch mesh changes and use bmesh when editing mesh data programmatically.
  • Avoid repeatedly scanning large scenes in draw methods.
  • Keep file paths configurable and use Blender path utilities.

Testing and Debugging

  • Test scripts in a clean Blender profile and a representative production scene.
  • Add smoke tests that import the add-on, register it, run core operators, and unregister cleanly.
  • Log actionable messages with self.report() for user-facing operator feedback.
  • Keep version-specific API differences isolated behind helper functions.

Common Mistakes

  • Do not forget to unregister classes, handlers, timers, and keymaps.
  • Do not mutate Blender data from panel draw() methods.
  • Do not assume an active object, selected object, or mode without checking context.
  • Do not hardcode absolute asset paths.

Related rules

Senior full-stack TypeScript, React, Node.js guidance with clean architecture, testing, and WHY-oriented reasoning.

**/*
41k
via PatrickJS/awesome-cursorrules

Quantitative factor research skills for designing, evaluating, and mining alpha factors in equities markets.

**/*
41k
via PatrickJS/awesome-cursorrules

Android development with Jetpack Compose, clean architecture, and Material Design 3.

**/*
41k
via PatrickJS/awesome-cursorrules

Angular development with Novo Elements UI library using standalone components.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert Angular 18 + TypeScript development with Jest, emphasizing clean code and performance.

**/*
41k
via PatrickJS/awesome-cursorrules

Manage Kubernetes clusters, add-ons, stacks, and credentials via the Ankra CLI platform.

**/*.sh +5
41k
via PatrickJS/awesome-cursorrules