Wholesale copy of all Kindred Create additions that don't conflict with upstream FreeCAD code: - kindred-icons/ (1444 Catppuccin Mocha SVG icon overrides) - src/Mod/Create/ (Kindred Create workbench) - src/Gui/ Kindred source files (FileOrigin, OriginManager, OriginSelectorWidget, CommandOrigin, BreadcrumbToolBar, EditingContext) - src/Gui/Icons/ (Kindred branding and silo icons) - src/Gui/PreferencePacks/KindredCreate/ - src/Gui/Stylesheets/ (KindredCreate.qss, images_dark-light/) - package/ (rattler-build recipe) - docs/ (architecture, guides, specifications) - .gitea/ (CI workflows, issue templates) - mods/silo, mods/ztools submodules - .gitmodules (Kindred submodule URLs) - resources/ (kindred-create.desktop, kindred-create.xml) - banner-logo-light.png, CONTRIBUTING.md
4.1 KiB
4.1 KiB
Architecture Overview
Kindred Create is structured as a thin integration layer on top of FreeCAD. The design follows three principles:
- Minimal core modifications — prefer submodule addons over patching FreeCAD internals
- Graceful degradation — Create runs without ztools or Silo if submodules are missing
- Pure Python addons — workbenches follow FreeCAD's standard addon pattern
Three-layer model
┌─────────────────────────────────┐
│ FreeCAD Documents (.FCStd) │ Python source of truth
│ Workbench logic (Python) │
├─────────────────────────────────┤
│ PostgreSQL │ Silo metadata, revisions, BOM
├─────────────────────────────────┤
│ MinIO (S3-compatible) │ Binary file storage cache
└─────────────────────────────────┘
FreeCAD documents are the authoritative representation of CAD data. Silo's PostgreSQL database stores metadata (part numbers, revisions, BOM relationships) and MinIO stores the binary .FCStd files. The FreeCAD workbench synchronizes between local files and the server.
Source layout
create/
├── src/App/ # Core application (C++)
├── src/Base/ # Foundation classes (C++)
├── src/Gui/ # GUI framework (C++ + Qt6 + QSS)
│ ├── Stylesheets/ # KindredCreate.qss theme
│ ├── PreferencePacks/ # Theme preference pack
│ ├── Icons/ # silo-*.svg origin icons
│ ├── FileOrigin.* # Abstract file origin interface
│ └── OriginManager.* # Origin lifecycle management
├── src/Mod/ # ~37 FreeCAD modules
│ ├── Create/ # Kindred bootstrap module
│ ├── Assembly/ # Assembly workbench (Kindred patches)
│ ├── PartDesign/ # Part Design (stock + ztools injection)
│ └── ... # Other stock FreeCAD modules
├── mods/
│ ├── ztools/ # Datum/pattern/pocket workbench (submodule)
│ └── silo/ # Parts database workbench (submodule)
└── src/3rdParty/
├── OndselSolver/ # Assembly solver (submodule)
└── GSL/ # Guidelines Support Library (submodule)
Bootstrap sequence
- FreeCAD core initializes, discovers
src/Mod/Create/ Init.pyrunssetup_kindred_addons()— addsmods/ztools/ztoolsandmods/silo/freecadtosys.path, executes theirInit.py- GUI phase:
InitGui.pyrunssetup_kindred_workbenches()— executes addonInitGui.pyfiles to register workbenches - Deferred QTimer cascade:
- 1500ms — Register Silo as a file origin
- 2000ms — Dock the Silo auth panel
- 3000ms — Check for Silo first-start configuration
- 4000ms — Dock the Silo activity panel
- 10000ms — Check for application updates
The QTimer cascade exists because FreeCAD's startup is not fully synchronous — Silo registration must wait for the GUI framework to be ready.
Origin system
The origin system is Kindred's primary addition to FreeCAD's GUI layer:
FileOrigin— abstract C++ interface for file backendsLocalFileOrigin— default implementation (local filesystem)SiloOrigin— Silo database backend (registered by the Python addon)OriginManager— manages origin lifecycle, switching, capability queriesOriginSelectorWidget— dropdown in the File toolbarCommandOrigin.cpp— Commit / Pull / Push / Info / BOM commands that delegate to the active origin
Module interaction
- ztools injects commands into PartDesign via
_ZToolsPartDesignManipulator - Silo registers as a
FileOriginbackend viasilo_origin.register_silo_origin() - Create module is glue only — no feature code, just bootstrap and version management