Extension Project
Attendees:
- Campbell Barton
- Dalai Felinto
- Francesco Siddi
Recent changes
Updates since the previous meeting:
- Blender 4.1-alpha uses Python 3.11.
- Better error handling when trying to install packages.
- All unittests are working again.
- New schema supported.
- Semantic versioning implemented server-wide.
- All fake genreated data on the server is complying to the new schema.
- Kitsu (valid) example add-on updated.
Road to Beta
This meeting was focused on defining the steps required for the Beta launch of the extensions platform.
The idea is to open the extensions.blender.org website for early beta-testers:
- Moderation will be close to non-existent for the beta.
- Full package validation will be implemented during the beta.
- Packages will be wiped once the platform rolls out of beta.
Main upcoming changes:
- New user interface.
- Simplify required steps for testing.
- Support other extensions types (themes at first).
- Differentiate local from remote repositories.
- Remove bl_info requirement.
- Beta mode changes on extensions.blender.org.
- User documentation.
Pending topics:
- Moderation strategy.
- Package specifications (json, manifest, formats).
For a compreensive list of all the planned tasks for this initial version check the Version 1 issue on the tracker.
No-targets for now:
To allow for an early release, a few topics won’t be tackled. Part of the intended feedback from the beta is to assess their importance and priority.
- There is no way to roll back to a previous version.
- There are no tracks for versions of extension (e.g., for LTS updates while a main version goes on).
- Support for ‘icons’ for the extensions.
- New fancy UI with rich-text and a dedicated editor.
- Disable/enable themes.
Design topics
Command-line
These are examples of the initial commands we expect during Beta. The system will still be developed using Python, but internally it will be wrapped via Blender command-line arguments.
./blender.exe --extension validate-manifest <manifest.toml>
./blender.exe --extension create <folder-name-with-manifest/>
./blender.exe --extension install-from-disk <package.txz>
./blender.exe --extension uninstall <name>
./blender.exe --extension add-repository-remote <https://blender.extension.org> <?name>
./blender.exe --extension add-repository-local <~/src/my-extensions-no-json/> <?name>
Local vs remote repositories
- Local repositories are managed by the user, treated as read-only by the users.
- Their extensions cannot be updated or removed.
- They can still be enabled and disabled.
- Local repositories don’t have an index Json file.
- Proposal: when clicking on + show separate operators (Add Remote Repository; Add Local Repository).
- Editing the URL of a repository should be an advanced feature (or not exposed).
Extension schema / package specifications
For this discussion, the extension schema is considered to be a combination of the manifest file (its content and its file name), as well as the expected content of the entire package and the package format itself.
There is still an open topic about what should be the extension schema. At the core of this is whether some choices may limit the possibilities in the future, or at the present. This topic is divisive and will tackled next week. Some of the agreed on points are:
- Packages should be creatable via command-line and easy-to-use tools.
- The extension schema is to be treated as an API version. Any change on its specifications should be indicated by a version bump following semantic versioning.
- The server should be aware of which versions it support.
- Future: Tools to upgrade (or downgrade) an extension version.
The divisive point is whether the initial version of the extension schema should support hand-crafted extension. A hand-craftable extension implies:
- Manifest name: manifest.toml.
- Compression format: .zip.
- Generated: nothing (manifest.toml inside the .zip).
For reference, the current format is:
- Manifest name: bl_ext_pkg.toml.
- Compress format: .txz.
- Generated: bl_ext_pkg_manifest.json (original toml not included in the txz).
A related discussion is whether future versions would need to be hand-craftable, and the constraints this brings. These discussions can be treated separately depending on the merits of making v1.0.0 future-proof versus treating it as an initial version that could change.
Francesco will collect the opinion of other developers to present next week and get to a final decision.