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
1.5 KiB
1.5 KiB
Python as Source of Truth
In Kindred Create's architecture, FreeCAD documents (.FCStd files) are the authoritative representation of all CAD data. The Silo database and MinIO storage are caches and metadata indexes — they do not define the model.
How it works
An .FCStd file is a ZIP archive containing:
- XML documents describing the parametric model tree
- BREP geometry files for each shape
- Thumbnail images
- Embedded spreadsheets and metadata
When a user runs Commit, the workbench uploads the entire .FCStd file to MinIO and records metadata (part number, revision, timestamp, commit message) in PostgreSQL. When a user runs Pull, the workbench downloads the .FCStd from MinIO and opens it locally.
Why this design
- No data loss — the complete model is always in the
.FCStdfile, never split across systems - Offline capability — engineers can work without a server connection
- FreeCAD compatibility — files are standard FreeCAD documents, openable in stock FreeCAD
- Simple sync model — the unit of transfer is always a whole file, avoiding merge conflicts in binary geometry
Trade-offs
- Large files —
.FCStdfiles can grow large with complex assemblies; every commit stores the full file - No partial sync — you cannot pull a single feature or component; it is all or nothing
- Conflict resolution — two users editing the same file must resolve conflicts manually (last-commit-wins by default)