Skip to content

Legacy feature-gap audit

This audit compares the current Blender Development pre-release with the legacy main-legacy implementation. It identifies user-visible capabilities that have not yet been reintroduced while avoiding false gaps where the current plugin already provides the same outcome through newer IntelliJ Platform or PyCharm APIs.

The comparison was completed on July 22, 2026. It covered registered plugin extensions and actions, Kotlin and Python implementations, templates, tests, changelogs, and project documentation. Generated build output and third-party payloads were excluded.

Technical terms with a dotted underline include source evidence. Focus or hover over a term to see its repository-relative path, or follow the link to open that file on Codeberg.

Result Count Main themes
High-priority gaps 3 Managed Blender installations, isolated launches, and extension packaging workflows
Medium-priority gaps 7 Project variants, generated configurations, multi-source operation, Run-mode reloading, and manifest options
Low-priority gaps 6 IDE affordances, optional scaffolding, and consolidated diagnostics

The current plugin already has the stronger core run/debug architecture. It provides PyCharm debugger attachment, session-aware runtime commands, per-project environment variables, installation discovery, and version-matched Blender API stubs. The largest remaining gaps surround that core workflow: acquiring Blender, isolating its state, packaging extensions, and supporting alternate project layouts.

ID Legacy capability Current status Result
FG-01 Download, verify, extract, cache, and delete managed Blender versions Settings can download, extract, detect, and delete managed versions; checksum verification remains Partial
FG-02 Project-local Blender sandbox, optional user-config import, custom splash, and cleanup No managed sandbox Gap
FG-03 Build, validate, and arbitrary Blender CLI run-configuration modes Blender launch configuration only Gap
FG-04 Classic single-file add-on project generator Package-oriented src generator only Gap
FG-05 Automatic Start, Build, and Validate configuration creation Configurations are not generated Gap
FG-06 Multiple extension source folders linked in one project One configured extension source folder Partial
FG-07 Automatic extension reload during normal Run sessions Reload on save is limited to Debug Partial
FG-08 Optional automatic class-registration scaffold Explicit registration only Gap
FG-09 Manifest platform filters and build exclusion patterns in the wizard Not exposed or generated Gap
FG-10 Persistent catalog of multiple named custom Blender installations One project-specific custom path Partial
FG-11 Connection status-bar widget No status widget Gap
FG-12 .blend file and marked source-folder icons No Blender-specific icon provider Gap
FG-13 Blender operator and panel live templates Full-file templates only Gap
FG-14 New Blender package action that creates a package and __init__.py File templates only Gap
FG-15 Post-creation project repair and scaffolding commands Initial wizard generation only Gap
FG-16 Consolidated offline launch-environment diagnostic snapshot General and runtime logging only Partial

The legacy BlenderDownloadermain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/blender/services/BlenderDownloader.kt could download supported Blender versions, fetch and check Blender’s SHA-256 manifest, extract the archive into managed storage, locate the executable, reuse cached installations, report progress, and delete installed versions.

The current installation workflow can download, extract, detect, and delete managed Blender versions from Settings > Tools > Blender Development. The installation scannermain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/core/BlenderInstallationScanner.kt refreshes the shared installation list after a managed change. Published archive checksum verification is not implemented yet.

User impact: Supported Blender versions can be managed from PyCharm, but this pre-release workflow does not yet verify the downloaded archive against Blender’s published checksum.

The legacy BlenderLaunchermain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/blender/services/BlenderLauncher.kt could redirect Blender configuration, scripts, and data into a project-local sandbox. It also supported importing selected user preferences, applying a project splash image, excluding the sandbox from indexing, and clearing the sandbox from the UI.

The current launchermain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/core/BlenderLauncher.kt supports environment variables and additional script directories, but it does not construct an isolated Blender home or configuration area.

User impact: launches can depend on and affect the user’s normal Blender configuration, which reduces isolation and reproducibility.

Extension build, validation, and generic commands

Section titled “Extension build, validation, and generic commands”

The legacy run-configuration typemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/run/BlenderRunConfigurationType.kt offered Start Blender, Build Extension, Validate Extension, and arbitrary Blender Command modes. Its profile statemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/run/BlenderRunProfileState.kt supplied Blender’s extension CLI with source and output paths.

The current configuration typemain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/run/BlenderConfigurationType.kt registers one launch factory for Run or Debug and does not expose packaging or validation as first-class IDE workflows.

User impact: extensions cannot currently be built or validated through Blender Development’s run configurations.

The legacy plugin registered a single-file project generatormain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/project/BlenderAddonFileProjectGenerator.kt for classic add-ons. It exposed legacy bl_info fields such as location, warning, documentation URL, category, Blender version tuple, and optional example code.

The current generatormain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/wizard/BlenderNewProjectGenerator.kt creates a src/__init__.py project and can optionally add an extension manifest. It does not offer a root-level single-file layout.

Legacy project generators created Start Blender, Build, and Validate configurations with the selected version, source path, module name, and sandbox preference. A project servicemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/project/BlenderProjectService.kt could recreate them later.

The current wizard stores project settings but requires the user to add a Blender configuration through Run > Edit Configurations.

The legacy project statemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/ui/settings/BlenderSettings.kt could mark several folders as Blender sources, and BlenderLinkermain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/blender/services/BlenderLinker.kt linked each source into Blender’s extension repository. The current project statemain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/state/ProjectConfig.kt has one extension source folder and one add-on or extension name.

The current Script directories list expands Blender’s script search path, but it is not equivalent to independently managing and reloading several extensions.

The legacy save listenermain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/listeners/BlenderFileSaveListener.kt could request a reload from ordinary launch workflows. The current reload-on-save listener is installed by BlenderDebugProgramRunnermain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/run/BlenderDebugProgramRunner.kt and is scoped to Debug sessions, where the full runtime command channel is available.

Reload on save during Debug is already supported and is not a gap.

The legacy project template generatormain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/project/BlenderProjectTemplateGenerator.kt could generate an auto_load.py helper that discovered and registered Blender classes automatically. The current example templatemain: src/main/resources/fileTemplates/internal/NewProjectMainScript.ft uses an explicit class tuple and register()/unregister() functions.

The legacy extension wizardmain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/project/BlenderProjectGenerators.kt accepted platform filters and build-path exclusion patterns for blender_manifest.toml. The current wizard statemain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/wizard/BlenderProjectSettings.kt covers extension identity, type, version range, license, website, tags, and permission reasons, but it does not expose these two build/distribution options.

The legacy settings statemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/ui/settings/BlenderSettings.kt stored multiple custom executable paths as reusable named entries. The current managermain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/ui/toolwindow/BlenderToolWindowContent.kt supports discovered installations or one custom path for the active project.

The legacy status-bar widgetmain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/ui/statusbar/BlenderStatusBarWidget.kt distinguished connected, running but disconnected, error, and not-running states. The current plugin communicates runtime state through action availability, notifications, and logs.

The legacy icon providermain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/icons/BlenderIconProvider.kt assigned Blender-specific icons to .blend files and marked extension source folders. The current plugin does not register an equivalent provider.

The legacy plugin included Python live templatesmain-legacy: src/main/resources/liveTemplates/Blender.xml for Blender operators and UI panels. The current Main Script and Component templatesmain: src/main/kotlin/com/sakurasedaia/blenderdevelopment/lib/TemplateGroupDescription.kt create complete files but do not provide in-editor snippet expansion.

The legacy New Blender Package actionmain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/actions/BlenderCreatePackageAction.kt could create a package directory and render __init__.py in one operation. The current Blender template group creates files but does not create a package structure as one action.

The legacy tool windowmain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/ui/toolwindow/BlenderToolWindowContent.kt could add or repair Git ignore rules, a GPL license, generated run configurations, and an optional local AI-agent guidance pack after project creation. The current wizard generates the main repository files initially but does not offer repair commands.

The legacy agent pack should be reconsidered against current IDE and Codex conventions before any reimplementation.

The legacy offline telemetry servicemain-legacy: src/main/kotlin/com/sakurasedaia/blenderextensions/telemetry/TelemetryService.kt recorded one diagnostic block containing the operating system, architecture, memory, Java version, sandbox state, Blender and Python versions, API-stub status, and launch options.

The current plugin has more focused scanner, launch, command, and Blender runtime logging, but it does not produce one consolidated environment snapshot.

The following legacy outcomes already exist or have been superseded:

Capability Current result
Cross-platform Blender discovery Current scanner provides the same outcome with richer diagnostics and cached application-level results
Launching and synchronizing project code Run and Debug both launch Blender and refresh or load the configured project
Blender Python debugging Dedicated Debug runner, session coordination, automatic PyCharm attachment, and Just my code support
Reload on save during Debug Lifecycle-scoped listener is installed for the Debug process
Manual add-on reload Session-aware runtime action resolves extension manifest IDs
Run a selected Python script Available from the Tools menu and Python editor context menu
Stop an active Blender process Available as a runtime command
Python environment creation and selection Delegated to PyCharm’s native Python project workflow
Version-matched Blender API stubs Installed into the selected interpreter and recorded in pyproject.toml
Core manifest and repository scaffolding Current wizard generates metadata, permissions, licensing, README, and Git ignore content
Launch customization Current project settings add arguments, environment variables, log level, repository name, and script directories

Historical claims of 11-language localization are also not counted as a gap. The audited legacy branch contains only its base message bundle and no locale-specific bundles.

  1. Decide whether Blender Development should own managed Blender downloads and project-local sandboxes. Both features create long-term security and maintenance responsibilities.
  2. Add Build and Validate workflows on top of the current run-configuration and project-state architecture.
  3. Generate the supported configurations from the project wizard.
  4. If Run-mode hot reload is desired, establish the runtime session in both Run and Debug while keeping debugger attachment conditional.
  5. Decide whether projects support one extension, several extension roots, classic single-file add-ons, or automatic registration before expanding project state.
  6. Add platform filters and build exclusions to the extension wizard.
  7. Treat status indicators, icons, snippets, package creation, diagnostics, and repair commands as independent follow-up improvements.