Define package.xml schema extensions for Kindred addons #252

Closed
opened 2026-02-16 17:13:16 +00:00 by forbes · 0 comments
Owner

Summary

Define and document the <kindred> extension element within FreeCAD's existing package.xml format. This provides the metadata the manifest-driven loader needs without breaking FreeCAD's addon tooling.

Proposed schema

<?xml version="1.0" encoding="UTF-8"?>
<package format="1" xmlns="https://wiki.freecad.org/Package_Metadata">
  <name>ztools</name>
  <version>0.3.0</version>
  <description>Velocity-focused tools for PartDesign, Assembly, and Spreadsheet</description>
  <maintainer email="forbes@kindred-systems.com">Joseph Forbes</maintainer>
  <license>LGPL-2.1-or-later</license>
  <url type="repository">https://git.kindred-systems.com/kindred/ztools</url>

  <content>
    <workbench>
      <classname>ZToolsWorkbench</classname>
    </workbench>
  </content>

  <!-- Kindred Create extensions -->
  <kindred>
    <min_create_version>0.1.0</min_create_version>
    <sdk_version>0.1.0</sdk_version>
    <load_priority>100</load_priority>
    <pure_python>true</pure_python>
    <dependencies>
      <dependency>sdk</dependency>
    </dependencies>
    <contexts>
      <context id="partdesign.body" action="inject"/>
      <context id="partdesign.feature" action="inject"/>
      <context id="assembly.edit" action="inject"/>
      <context id="spreadsheet" action="inject"/>
    </contexts>
  </kindred>
</package>

Field definitions

Field Required Description
min_create_version Yes Minimum Kindred Create version this addon supports
sdk_version Yes Required kindred-addon-sdk version
load_priority No Integer, lower loads first. Default 100. SDK uses 0.
pure_python No If false, addon requires compiled C++ components. Default true.
dependencies No List of addon names that must load before this one
contexts No Editing contexts this addon registers or injects into

Deliverables

  • Schema documentation in docs/ (mdBook page)
  • Example package.xml for SDK, ztools, and Silo
  • Validation function in kindred_sdk.manifest that parses the <kindred> element
  • Updated package.xml in each addon repo

Dependencies

  • Depended on by: #1 (loader needs to know what to parse), #2 (SDK manifest parser)

Notes

FreeCAD's package.xml spec is at https://wiki.freecad.org/Package_Metadata. The <kindred> element is ignored by FreeCAD's AddonManager, so this is backward compatible. If an addon is installed in stock FreeCAD, the Kindred extensions are simply unused.

## Summary Define and document the `<kindred>` extension element within FreeCAD's existing `package.xml` format. This provides the metadata the manifest-driven loader needs without breaking FreeCAD's addon tooling. ## Proposed schema ```xml <?xml version="1.0" encoding="UTF-8"?> <package format="1" xmlns="https://wiki.freecad.org/Package_Metadata"> <name>ztools</name> <version>0.3.0</version> <description>Velocity-focused tools for PartDesign, Assembly, and Spreadsheet</description> <maintainer email="forbes@kindred-systems.com">Joseph Forbes</maintainer> <license>LGPL-2.1-or-later</license> <url type="repository">https://git.kindred-systems.com/kindred/ztools</url> <content> <workbench> <classname>ZToolsWorkbench</classname> </workbench> </content> <!-- Kindred Create extensions --> <kindred> <min_create_version>0.1.0</min_create_version> <sdk_version>0.1.0</sdk_version> <load_priority>100</load_priority> <pure_python>true</pure_python> <dependencies> <dependency>sdk</dependency> </dependencies> <contexts> <context id="partdesign.body" action="inject"/> <context id="partdesign.feature" action="inject"/> <context id="assembly.edit" action="inject"/> <context id="spreadsheet" action="inject"/> </contexts> </kindred> </package> ``` ## Field definitions | Field | Required | Description | |-------|----------|-------------| | `min_create_version` | Yes | Minimum Kindred Create version this addon supports | | `sdk_version` | Yes | Required kindred-addon-sdk version | | `load_priority` | No | Integer, lower loads first. Default 100. SDK uses 0. | | `pure_python` | No | If `false`, addon requires compiled C++ components. Default `true`. | | `dependencies` | No | List of addon names that must load before this one | | `contexts` | No | Editing contexts this addon registers or injects into | ## Deliverables - [ ] Schema documentation in `docs/` (mdBook page) - [ ] Example `package.xml` for SDK, ztools, and Silo - [ ] Validation function in `kindred_sdk.manifest` that parses the `<kindred>` element - [ ] Updated `package.xml` in each addon repo ## Dependencies - **Depended on by:** #1 (loader needs to know what to parse), #2 (SDK manifest parser) ## Notes FreeCAD's `package.xml` spec is at https://wiki.freecad.org/Package_Metadata. The `<kindred>` element is ignored by FreeCAD's AddonManager, so this is backward compatible. If an addon is installed in stock FreeCAD, the Kindred extensions are simply unused.
forbes added the documentationenhancement labels 2026-02-16 17:13:16 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kindred/create#252