1. Paste your __init__.py
2. Your blender_manifest.toml
Save this next to your __init__.py, at the root of the add-on folder.
3. Build it
blender --command extension build blender --command extension validate your_addon.zip
This page reads your source text. Only Blender itself can confirm the
result actually installs — always run validate before uploading. If it rejects
something, every message it prints is listed with its fix in
Blender extension manifest errors.
One question, if you have ten seconds
Which repetitive Blender chore would you pay to never do again? One sentence is plenty.
Answer on GitHub → (no newsletter, no follow-up)
What changed in 4.2, briefly
| Legacy add-on | Extension (4.2+) |
|---|---|
bl_info dict in __init__.py | blender_manifest.toml file |
version as a tuple | version as a "1.4.2" string |
category, one string | tags, a list from a fixed vocabulary |
| Licence unstated | license required, SPDX identifiers |
Plain import my_module | Relative from . import my_module |
| Any Blender version | blender_version_min ≥ 4.2.0 |
| Network access unannounced | Declared under [permissions] |
Official reference: Blender Manual — Extensions. Tags come from a fixed vocabulary and add-ons must be GPL-3.0-or-later; the full tag list and every validation message are on one page.
What this does and doesn’t do
It reads your bl_info and writes the manifest fields it can honestly derive.
Where the manifest needs something bl_info never carried — a licence, a contact
email, a tagline under 64 characters — it fills in a marked placeholder and tells you, rather
than guessing and leaving you with a file that looks finished but is wrong. It does not
rewrite your Python, and it does not build the zip.