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
3.8 KiB
Contributing to Kindred Create
Kindred Create is maintained at git.kindred-systems.com/kindred/create. Contributions are submitted as pull requests against the main branch.
Getting started
git clone --recursive ssh://git@git.kindred-systems.com:2222/kindred/create.git
cd create
pixi run configure
pixi run build
pixi run freecad
See the README for full build instructions.
Branch and PR workflow
- Create a feature branch from
main:git checkout -b feat/my-feature main - Make your changes, commit with conventional commit messages (see below).
- Push and open a pull request against
main. - CI builds and tests run automatically on all PRs.
Commit messages
Use Conventional Commits:
| Prefix | Purpose |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
chore: |
Maintenance, dependencies |
docs: |
Documentation only |
art: |
Icons, theme, visual assets |
Examples:
feat: add datum point creation modefix(gui): correct menu icon size on Waylandchore: update silo submodule
Code style
C/C++
Formatted with clang-format (config in .clang-format). Static analysis via clang-tidy (config in .clang-tidy).
Python
Formatted with black (100-character line length). Linted with pylint (config in .pylintrc).
Pre-commit hooks
pip install pre-commit
pre-commit install
This runs clang-format, black, and pylint automatically on staged files.
Submodules
Kindred Create uses git submodules for addon workbenches:
| Submodule | Path | Repository |
|---|---|---|
| ztools | mods/ztools |
git.kindred-systems.com/forbes/ztools |
| silo-mod | mods/silo |
git.kindred-systems.com/kindred/silo-mod |
To update a submodule:
cd mods/silo
git checkout main && git pull
cd ../..
git add mods/silo
git commit -m "chore: update silo submodule"
If you cloned without --recursive, initialize submodules with:
git submodule update --init --recursive
Theme and QSS changes
The Catppuccin Mocha theme has three QSS copies that must be kept in sync:
resources/preferences/KindredCreate/KindredCreate.qss(canonical)src/Gui/Stylesheets/KindredCreate.qsssrc/Gui/PreferencePacks/KindredCreate/KindredCreate.qss
When modifying the theme, apply changes to all three files. Note that the copies have intentional differences (e.g., tree branch rendering style), so do not blindly copy between them -- apply edits individually.
See KNOWN_ISSUES.md for the planned QSS consolidation.
Preference pack
Default preferences are defined in resources/preferences/KindredCreate/KindredCreate.cfg. This XML file uses FreeCAD's parameter format:
<FCParamGroup Name="GroupName">
<FCBool Name="Setting" Value="1"/>
<FCInt Name="Setting" Value="42"/>
<FCText Name="Setting">value</FCText>
</FCParamGroup>
Changes here affect the out-of-box experience for all users.
CI/CD
- Build workflow (
build.yml): Runs on every push tomainand on PRs. Builds in Ubuntu 24.04 container, runs C++ and Python tests. - Release workflow (
release.yml): Triggered byv*tags. Builds AppImage and .deb packages.
See docs/CI_CD.md for full details.
Architecture
For an overview of the codebase structure, bootstrap flow, and design decisions, see:
- docs/ARCHITECTURE.md -- Bootstrap flow and source layout
- docs/COMPONENTS.md -- Feature inventory
- docs/INTEGRATION_PLAN.md -- Architecture layers and roadmap
License
All contributions must be compatible with LGPL-2.1-or-later.