Compare commits
9 Commits
docs/mdboo
...
fix/docs-c
| Author | SHA1 | Date | |
|---|---|---|---|
| c25f1b62b8 | |||
| 10ae616f08 | |||
| d6ad0fb43d | |||
| bbee39431d | |||
| 3c0b14b862 | |||
| 1f793a6b71 | |||
| 65a2bb98db | |||
| c47eb26312 | |||
| 769072fb9d |
@@ -4,14 +4,22 @@ on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- "docs/**"
|
||||
- ".gitea/workflows/docs.yml"
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: docs
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
run: |
|
||||
REPO_URL="http://localhost:3000/kindred/create.git"
|
||||
if [ -d .git ]; then
|
||||
git fetch "$REPO_URL" main
|
||||
git checkout -f FETCH_HEAD
|
||||
else
|
||||
git clone --depth 1 --branch main "$REPO_URL" .
|
||||
fi
|
||||
|
||||
- name: Build mdBook
|
||||
run: mdbook build docs/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Silo
|
||||
|
||||
Silo is an item database and part management system for Kindred Create. It provides revision-controlled storage for CAD files, part number generation, BOM management, and team collaboration.
|
||||
Silo is an item database and part management system for Kindred Create. It provides revision-controlled storage for CAD files, configurable part number generation, BOM management, and team collaboration.
|
||||
|
||||
- **Submodule path:** `mods/silo/`
|
||||
- **Source:** `git.kindred-systems.com/kindred/silo-mod`
|
||||
@@ -9,59 +9,196 @@ Silo is an item database and part management system for Kindred Create. It provi
|
||||
|
||||
Silo has three components:
|
||||
|
||||
```
|
||||
┌──────────────────────┐ ┌──────────────┐
|
||||
│ FreeCAD Workbench │────▶│ Go REST API │
|
||||
│ (Python commands) │ │ (silod) │
|
||||
└──────────────────────┘ └──────┬───────┘
|
||||
│ │
|
||||
│ silo-client │
|
||||
│ (shared API lib) │
|
||||
│ ┌─────┴─────┐
|
||||
│ │ │
|
||||
│ PostgreSQL MinIO
|
||||
│ (metadata) (files)
|
||||
│
|
||||
Local .FCStd files
|
||||
```
|
||||
|
||||
- **Go REST API server** (`cmd/silod/`) — 38+ routes, backed by PostgreSQL and MinIO
|
||||
- **FreeCAD workbench** (`freecad/`) — Python commands integrated into Kindred Create
|
||||
- **Shared API client** (`silo-client/`) — Python library used by the workbench (nested submodule)
|
||||
|
||||
The silo-mod repository was split from a monorepo into three repos: `silo-client` (shared Python API client), `silo-mod` (FreeCAD workbench, used as Create's submodule), and `silo-calc` (LibreOffice Calc extension).
|
||||
The silo-mod repository was split from a monorepo into three repos: `silo-client` (shared Python API client), `silo-mod` (FreeCAD workbench), and `silo-calc` (LibreOffice Calc extension).
|
||||
|
||||
## Workbench commands
|
||||
|
||||
### Document lifecycle
|
||||
|
||||
| Command | Shortcut | Description |
|
||||
|---------|----------|-------------|
|
||||
| `Silo_New` | Ctrl+N | Register a new part — select category, generate part number from schema, optional project tagging |
|
||||
| `Silo_Open` | Ctrl+O | Search and open items — combined dialog querying both the database and local files |
|
||||
| `Silo_Save` | Ctrl+S | Save locally to canonical path, collect document properties, upload to MinIO as auto-revision |
|
||||
| `Silo_Commit` | Ctrl+Shift+S | Save as a new revision with a user-provided comment |
|
||||
| `Silo_Pull` | — | Download from MinIO with revision selection, conflict detection, and progress tracking |
|
||||
| `Silo_Push` | — | Batch upload — finds local files not yet synced to the server, compares timestamps |
|
||||
|
||||
### Information and management
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| New | Create a new item in the database |
|
||||
| Open | Open an item by part number |
|
||||
| Save | Save the current document locally |
|
||||
| Commit | Save current state as a new revision with comment |
|
||||
| Pull | Download an item by part number |
|
||||
| Push | Batch upload modified files |
|
||||
| Info | View revision history and metadata |
|
||||
| BOM | View or edit the bill of materials |
|
||||
| TagProjects | Tag items with project identifiers |
|
||||
| Rollback | Revert to a previous revision |
|
||||
| SetStatus | Change item lifecycle status |
|
||||
| Settings | Configure Silo server connection |
|
||||
| Auth | Authenticate with the Silo server |
|
||||
| `Silo_Info` | Show item metadata, project tags, and revision history table with status and labels |
|
||||
| `Silo_BOM` | Two-tab view: BOM (children) and Where Used (parents). Add, edit, remove entries with quantity and unit tracking |
|
||||
| `Silo_TagProjects` | Multi-select dialog for assigning project tags to items |
|
||||
| `Silo_Rollback` | Select a previous revision and create a new revision from that point with optional comment |
|
||||
| `Silo_SetStatus` | Change revision lifecycle status: draft → review → released → obsolete |
|
||||
|
||||
### Administration
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `Silo_Settings` | Full settings UI — API URL, SSL verify, custom CA cert, API token management, authentication status |
|
||||
| `Silo_Auth` | Session-based login: `/login` → `/api/auth/me` → `/api/auth/tokens`; stores API token in preferences |
|
||||
| `Silo_ToggleMode` | Switch between Silo workbench and other workbenches (menu only) |
|
||||
|
||||
## Origin integration
|
||||
|
||||
Silo registers as a **file origin** via the `FileOrigin` interface in `src/Gui/`. This makes Silo commands (Commit, Pull, Push, Info, BOM) available in the File menu and Origin Tools toolbar across all workbenches.
|
||||
Silo registers as a **file origin** via the `FileOrigin` interface in `src/Gui/`. The `SiloOrigin` class in `silo_origin.py` implements:
|
||||
|
||||
The registration happens via a deferred QTimer (1500ms after startup) in `src/Mod/Create/InitGui.py`.
|
||||
| Capability | Value |
|
||||
|------------|-------|
|
||||
| `id` | `"silo"` |
|
||||
| `name` | `"Kindred Silo"` |
|
||||
| `type` | PLM (1) |
|
||||
| `tracksExternally` | true |
|
||||
| `requiresAuthentication` | true |
|
||||
| `supportsRevisions` | true |
|
||||
| `supportsBOM` | true |
|
||||
| `supportsPartNumbers` | true |
|
||||
| `supportsAssemblies` | true |
|
||||
|
||||
The origin delegates to the workbench commands for all operations (new, open, save, commit, pull, push, info, BOM). Registration happens via a deferred QTimer (1500ms after startup) in `src/Mod/Create/InitGui.py`.
|
||||
|
||||
## Configuration
|
||||
|
||||
The FreeCAD workbench reads configuration from:
|
||||
### FreeCAD parameters
|
||||
|
||||
- `SILO_API_URL` — Server API endpoint (default: `http://localhost:8080/api`)
|
||||
- `SILO_PROJECTS_DIR` — Local projects directory (default: `~/projects`)
|
||||
Stored in `User parameter:BaseApp/Preferences/Mod/KindredSilo`:
|
||||
|
||||
On first launch, Kindred Create prompts for Silo server configuration via the Settings command.
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `ApiUrl` | String | (empty) | Silo server URL |
|
||||
| `SslVerify` | Bool | true | Verify SSL certificates |
|
||||
| `CaCertPath` | String | (empty) | Path to custom CA certificate |
|
||||
| `ApiToken` | String | (empty) | Stored authentication token |
|
||||
| `FirstStartChecked` | Bool | false | Whether first-start prompt has been shown |
|
||||
| `ProjectsDir` | String | `~/projects` | Local directory for checked-out files |
|
||||
|
||||
### Environment variables
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `SILO_API_URL` | `http://localhost:8080/api` | Override for server API endpoint |
|
||||
| `SILO_PROJECTS_DIR` | `~/projects` | Override for local projects directory |
|
||||
|
||||
## Server setup
|
||||
|
||||
See `mods/silo/README.md` for full server deployment instructions. Quick start:
|
||||
### Quick start
|
||||
|
||||
```bash
|
||||
# Database setup
|
||||
# Database setup (apply migrations sequentially)
|
||||
psql -h psql.kindred.internal -U silo -d silo -f migrations/001_initial.sql
|
||||
# ... through 010_item_extended_fields.sql
|
||||
|
||||
# Configure
|
||||
cp config.example.yaml config.yaml
|
||||
# Edit config.yaml with your settings
|
||||
# Edit config.yaml with your database, MinIO, and auth settings
|
||||
|
||||
# Run server
|
||||
go run ./cmd/silod
|
||||
```
|
||||
|
||||
The server supports LDAP and OIDC authentication, and provides a real-time activity feed via Server-Sent Events (SSE).
|
||||
### Production deployment
|
||||
|
||||
Production configs live in `mods/silo/deployments/`:
|
||||
|
||||
```
|
||||
deployments/
|
||||
├── config.prod.yaml # Database, MinIO, auth settings
|
||||
├── docker-compose.prod.yaml # Production container orchestration
|
||||
├── docker-compose.yaml # Development Docker Compose
|
||||
└── systemd/
|
||||
├── silod.env.example # Service environment template
|
||||
└── silod.service # systemd unit file
|
||||
```
|
||||
|
||||
The systemd service runs as user `silo` with security hardening (`ProtectSystem=strict`, `NoNewPrivileges`, `PrivateTmp`). Config at `/etc/silo/config.yaml`, binary at `/opt/silo/bin/silod`.
|
||||
|
||||
### Server stack
|
||||
|
||||
- **Go** REST API with 38+ routes
|
||||
- **PostgreSQL** for metadata, revisions, BOM relationships
|
||||
- **MinIO** (S3-compatible) for binary `.FCStd` file storage
|
||||
- **LDAP / OIDC** for authentication
|
||||
- **SSE** (Server-Sent Events) for real-time activity feed
|
||||
|
||||
## Database migrations
|
||||
|
||||
Migrations live in `mods/silo/migrations/` as numbered SQL scripts:
|
||||
|
||||
| Migration | Purpose |
|
||||
|-----------|---------|
|
||||
| `001_initial.sql` | Core schema — items, revisions, properties |
|
||||
| `002_sequence_by_name.sql` | Part number sequence generation |
|
||||
| `003_remove_material.sql` | Property cleanup |
|
||||
| `004_cad_sync_state.sql` | CAD file sync tracking |
|
||||
| `005_property_schema_version.sql` | Schema versioning for properties |
|
||||
| `006_project_tags.sql` | Project-to-item relationships |
|
||||
| `007_revision_status.sql` | Revision lifecycle status tracking |
|
||||
| `008_odoo_integration.sql` | ERP integration preparation |
|
||||
| `009_auth.sql` | User authentication tables |
|
||||
| `010_item_extended_fields.sql` | Extended item metadata |
|
||||
|
||||
Apply sequentially: `psql -f migrations/001_initial.sql`, then `002`, etc. There is no automated migration runner — apply manually against the database.
|
||||
|
||||
## Part numbering schemas
|
||||
|
||||
Part number generation is configured via YAML schemas in `mods/silo/schemas/`:
|
||||
|
||||
- `kindred-rd.yaml` — Primary R&D part numbering schema with category codes, sequence segments, and validation rules
|
||||
- `kindred-locations.yaml` — Location hierarchy schema for physical inventory tracking
|
||||
|
||||
## Directory structure
|
||||
|
||||
```
|
||||
mods/silo/
|
||||
├── cmd/
|
||||
│ ├── silo/ # CLI tool
|
||||
│ └── silod/ # API server
|
||||
├── internal/
|
||||
│ ├── api/ # HTTP handlers, routes, templates
|
||||
│ ├── config/ # Configuration loading
|
||||
│ ├── db/ # PostgreSQL access
|
||||
│ ├── migration/ # Property migration utilities
|
||||
│ ├── partnum/ # Part number generation
|
||||
│ ├── schema/ # YAML schema parsing
|
||||
│ └── storage/ # MinIO file storage
|
||||
├── freecad/
|
||||
│ ├── InitGui.py # SiloWorkbench registration
|
||||
│ ├── silo_commands.py # 14 commands + dock widgets
|
||||
│ ├── silo_origin.py # FileOrigin backend
|
||||
│ └── resources/icons/ # 10 silo-*.svg icons
|
||||
├── silo-client/ # Shared Python API client (nested submodule)
|
||||
│ └── silo_client/
|
||||
│ ├── client.py # SiloClient HTTP wrapper
|
||||
│ └── settings.py # SiloSettings config management
|
||||
├── migrations/ # 10 numbered SQL scripts
|
||||
├── schemas/ # Part numbering YAML schemas
|
||||
└── deployments/ # Docker Compose + systemd configs
|
||||
```
|
||||
|
||||
## Further reading
|
||||
|
||||
- `mods/silo/README.md` — server quickstart and CLI usage
|
||||
- `mods/silo/ROADMAP.md` — strategic roadmap (6 phases, Q2 2026 → Q4 2027)
|
||||
|
||||
@@ -1,48 +1,133 @@
|
||||
# ztools
|
||||
|
||||
ztools is a pure-Python FreeCAD workbench that consolidates part design, assembly, and sketcher tools into a single unified interface.
|
||||
ztools is a pure-Python FreeCAD workbench that consolidates part design, assembly, and sketcher tools into a single unified interface. It is the **default workbench** when Kindred Create launches.
|
||||
|
||||
- **Submodule path:** `mods/ztools/`
|
||||
- **Source:** `git.kindred-systems.com/forbes/ztools`
|
||||
- **Stats:** 6,400+ lines of code, 24+ command classes, 33 custom icons, 17 toolbars
|
||||
|
||||
## Features
|
||||
## Commands
|
||||
|
||||
### Datum Creator
|
||||
### Datum Creator (`ZTools_DatumCreator`)
|
||||
|
||||
Nine commands for creating datum geometry (planes, axes, points) with 16 creation modes. Modes include offset from face, through three points, normal to edge, and more. These are accessed from the ztools toolbar and are also injected into the PartDesign workbench.
|
||||
Creates datum geometry (planes, axes, points) with 16 creation modes. The task panel auto-detects the geometry type from your selection and offers appropriate modes. Supports custom naming, spreadsheet linking, and body- or document-level creation.
|
||||
|
||||
### Enhanced Pocket
|
||||
### Datum Manager (`ZTools_DatumManager`)
|
||||
|
||||
Extends FreeCAD's Pocket feature with flip-side cutting — the ability to cut outside the sketch profile rather than inside.
|
||||
Manages existing datums. (Stub — planned for Phase 1, Q1 2026.)
|
||||
|
||||
### Assembly Patterns
|
||||
### Enhanced Pocket (`ZTools_EnhancedPocket`)
|
||||
|
||||
Linear and polar patterning tools for assemblies. Create regular arrangements of components without manually placing each one.
|
||||
Extends FreeCAD's Pocket feature with **Flip Side to Cut** — a SOLIDWORKS-style feature that removes material *outside* the sketch profile rather than inside. Uses a Boolean Common operation internally. Supports all standard pocket types: Dimension, Through All, To First, Up To Face, Two Dimensions. Taper angle is supported for standard pockets (disabled for flipped).
|
||||
|
||||
### Spreadsheet Formatting
|
||||
### Rotated Linear Pattern (`ZTools_RotatedLinearPattern`)
|
||||
|
||||
Commands for formatting spreadsheet cells: bold, italic, underline, text alignment, and cell colors. Accessible from the ztools toolbar when a spreadsheet is active.
|
||||
Creates a linear pattern with incremental rotation per instance. Configure direction, spacing, number of occurrences, and cumulative or per-instance rotation. Source components are automatically hidden.
|
||||
|
||||
### Assembly Linear Pattern (`ZTools_AssemblyLinearPattern`)
|
||||
|
||||
Creates linear patterns of assembly components. Supports multi-component selection, direction vectors, total length or spacing modes, and creation as Links (recommended) or copies. Auto-detects the parent assembly.
|
||||
|
||||
### Assembly Polar Pattern (`ZTools_AssemblyPolarPattern`)
|
||||
|
||||
Creates polar (circular) patterns of assembly components. Supports custom or preset axes (X/Y/Z), full circle or custom angle, center point definition, and creation as Links or copies.
|
||||
|
||||
### Spreadsheet Formatting (9 commands)
|
||||
|
||||
| Command | Action |
|
||||
|---------|--------|
|
||||
| `ZTools_SpreadsheetStyleBold` | Toggle bold |
|
||||
| `ZTools_SpreadsheetStyleItalic` | Toggle italic |
|
||||
| `ZTools_SpreadsheetStyleUnderline` | Toggle underline |
|
||||
| `ZTools_SpreadsheetAlignLeft` | Left align |
|
||||
| `ZTools_SpreadsheetAlignCenter` | Center align |
|
||||
| `ZTools_SpreadsheetAlignRight` | Right align |
|
||||
| `ZTools_SpreadsheetBgColor` | Background color picker |
|
||||
| `ZTools_SpreadsheetTextColor` | Text color picker |
|
||||
| `ZTools_SpreadsheetQuickAlias` | Auto-create aliases from row/column labels |
|
||||
|
||||
## Datum creation modes
|
||||
|
||||
### Planes (7 modes)
|
||||
|
||||
| Mode | Description | Input |
|
||||
|------|-------------|-------|
|
||||
| Offset from Face | Offsets a planar face along its normal | Face + distance (mm) |
|
||||
| Offset from Plane | Offsets an existing datum plane | Datum plane + distance (mm) |
|
||||
| Midplane | Plane halfway between two parallel faces | Two parallel faces |
|
||||
| 3 Points | Plane through three non-collinear points | Three vertices |
|
||||
| Normal to Edge | Plane perpendicular to an edge at a parameter location | Edge + parameter (0.0–1.0) |
|
||||
| Angled | Rotates a plane about an edge by a specified angle | Face + edge + angle (degrees) |
|
||||
| Tangent to Cylinder | Plane tangent to a cylindrical face at an angular position | Cylindrical face + angle (degrees) |
|
||||
|
||||
### Axes (4 modes)
|
||||
|
||||
| Mode | Description | Input |
|
||||
|------|-------------|-------|
|
||||
| 2 Points | Axis through two points | Two vertices |
|
||||
| From Edge | Axis along a linear edge | Linear edge |
|
||||
| Cylinder Center | Axis along the centerline of a cylinder | Cylindrical face |
|
||||
| Plane Intersection | Axis at the intersection of two planes | Two non-parallel planes |
|
||||
|
||||
### Points (5 modes)
|
||||
|
||||
| Mode | Description | Input |
|
||||
|------|-------------|-------|
|
||||
| At Vertex | Point at a vertex location | Vertex |
|
||||
| XYZ Coordinates | Point at explicit coordinates | x, y, z (mm) |
|
||||
| On Edge | Point at a location along an edge | Edge + parameter (0.0–1.0) |
|
||||
| Face Center | Point at the center of mass of a face | Face |
|
||||
| Circle Center | Point at the center of a circular or arc edge | Circular edge |
|
||||
|
||||
## PartDesign injection
|
||||
|
||||
ztools registers a `_ZToolsPartDesignManipulator` that hooks into the PartDesign workbench at startup. This injects ztools commands into PartDesign's menus and toolbars so they are available without switching workbenches.
|
||||
ztools registers a `_ZToolsPartDesignManipulator` that hooks into the PartDesign workbench at startup. This injects the following commands into PartDesign's toolbars and menus:
|
||||
|
||||
The registration happens in `mods/ztools/ztools/ztools/InitGui.py` when the Create bootstrap module loads addon workbenches.
|
||||
| PartDesign toolbar | Injected command |
|
||||
|--------------------|-----------------|
|
||||
| Part Design Helper Features | `ZTools_DatumCreator`, `ZTools_DatumManager` |
|
||||
| Part Design Modeling Features | `ZTools_EnhancedPocket` |
|
||||
| Part Design Transformation Features | `ZTools_RotatedLinearPattern` |
|
||||
|
||||
The manipulator is registered in `InitGui.py` when the Create bootstrap module loads addon workbenches.
|
||||
|
||||
## Directory structure
|
||||
|
||||
```
|
||||
mods/ztools/
|
||||
├── ztools/ztools/
|
||||
│ ├── InitGui.py # Workbench registration + manipulator
|
||||
│ ├── Init.py # Console initialization
|
||||
│ ├── commands/ # 9 command implementations
|
||||
│ ├── datums/core.py # Datum creation (16 modes)
|
||||
│ └── resources/ # Icons and theme
|
||||
└── CatppuccinMocha/ # Theme preference pack
|
||||
│ ├── InitGui.py # Workbench registration + manipulator
|
||||
│ ├── Init.py # Console initialization
|
||||
│ ├── commands/
|
||||
│ │ ├── datum_commands.py # DatumCreator + DatumManager
|
||||
│ │ ├── datum_viewprovider.py # ViewProvider + edit panel
|
||||
│ │ ├── pocket_commands.py # EnhancedPocket + FlippedPocket
|
||||
│ │ ├── pattern_commands.py # RotatedLinearPattern
|
||||
│ │ ├── assembly_pattern_commands.py # Linear + Polar assembly patterns
|
||||
│ │ └── spreadsheet_commands.py # 9 formatting commands
|
||||
│ ├── datums/
|
||||
│ │ └── core.py # 16 datum creation functions
|
||||
│ └── resources/ # Icons and theme
|
||||
└── CatppuccinMocha/ # Theme preference pack
|
||||
```
|
||||
|
||||
## Internal properties
|
||||
|
||||
ztools stores metadata on feature objects using these properties (preserved for backward compatibility):
|
||||
|
||||
| Property | Purpose |
|
||||
|----------|---------|
|
||||
| `ZTools_Type` | Feature type identifier |
|
||||
| `ZTools_Params` | JSON creation parameters |
|
||||
| `ZTools_SourceRefs` | JSON source geometry references |
|
||||
|
||||
## Known gaps
|
||||
|
||||
- Datum Manager is a stub — full implementation planned for Q1 2026
|
||||
- Datum parameter changes don't recalculate from source geometry yet
|
||||
- Enhanced Pocket taper angle is disabled for flipped pockets
|
||||
|
||||
## Further reading
|
||||
|
||||
- `mods/ztools/KINDRED_INTEGRATION.md` — integration architecture notes
|
||||
- `mods/ztools/ROADMAP.md` — planned features
|
||||
- `mods/ztools/KINDRED_INTEGRATION.md` — integration architecture and migration options
|
||||
- `mods/ztools/ROADMAP.md` — phased development plan (Q1–Q4 2026)
|
||||
|
||||
@@ -13,9 +13,21 @@ Kindred Create is a fork of [FreeCAD](https://www.freecad.org) 1.0+ that adds in
|
||||
|
||||
**[Silo](./guide/silo.md)** — A parts database system for managing CAD files, part numbers, revisions, and bills of materials across teams. Includes a Go REST API server backed by PostgreSQL and MinIO, with FreeCAD commands for opening, saving, and syncing files directly from the application.
|
||||
|
||||
**Catppuccin Mocha theme** — A dark theme applied across the entire application, including the 3D viewport, sketch editor, spreadsheet view, and tree view.
|
||||
**Catppuccin Mocha theme** — A dark theme applied across the entire application, including the 3D viewport, sketch editor, spreadsheet view, and tree view. Uses spanning-line branch indicators instead of disclosure arrows, with tuned preference defaults for document handling, selection behavior, and notifications.
|
||||
|
||||
**Update checker** — On startup, Kindred Create checks the Gitea releases API for newer versions and logs the result.
|
||||
**Origin system** — A pluggable file backend abstraction. The origin selector in the File toolbar lets you switch between local filesystem operations and Silo database operations. Silo commands (Commit, Pull, Push, Info, BOM) are available across all workbenches when Silo is the active origin.
|
||||
|
||||
**Update checker** — On startup, Kindred Create checks the Gitea releases API for newer versions and logs the result. Configurable check interval and skip-version preferences.
|
||||
|
||||
## How it relates to FreeCAD
|
||||
|
||||
Kindred Create is a fork/distribution of FreeCAD 1.0+. The design minimizes core modifications — custom functionality is delivered through submodule addons (ztools, Silo) that follow FreeCAD's standard workbench pattern. If the addon submodules are missing, Kindred Create still functions as a themed FreeCAD.
|
||||
|
||||
The primary additions to FreeCAD's core are:
|
||||
- The **origin system** (`FileOrigin` interface in `src/Gui/`) for pluggable file backends
|
||||
- The **Create bootstrap module** (`src/Mod/Create/`) that loads addons at startup
|
||||
- The **Catppuccin Mocha theme** (`KindredCreate.qss`) and preference pack
|
||||
- Patches to **Assembly** (`findPlacement()` datum/origin handling)
|
||||
|
||||
## Links
|
||||
|
||||
|
||||
@@ -2,44 +2,116 @@
|
||||
|
||||
## Silo workbench
|
||||
|
||||
The Silo workbench stores its configuration in FreeCAD's parameter system under `User parameter:BaseApp/Preferences/Mod/KindredSilo`.
|
||||
### FreeCAD parameters
|
||||
|
||||
Stored in `User parameter:BaseApp/Preferences/Mod/KindredSilo`:
|
||||
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `ApiUrl` | String | (empty) | Silo server API endpoint URL |
|
||||
| `SslVerify` | Bool | true | Verify SSL certificates when connecting to server |
|
||||
| `CaCertPath` | String | (empty) | Path to custom CA certificate for self-signed certs |
|
||||
| `ApiToken` | String | (empty) | Stored authentication token (set by `Silo_Auth`) |
|
||||
| `FirstStartChecked` | Bool | false | Whether the first-start settings prompt has been shown |
|
||||
| `ProjectsDir` | String | `~/projects` | Local directory for checked-out CAD files |
|
||||
|
||||
### Environment variables
|
||||
|
||||
These override the FreeCAD parameter values when set:
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `SILO_API_URL` | `http://localhost:8080/api` | Silo server API endpoint |
|
||||
| `SILO_PROJECTS_DIR` | `~/projects` | Local directory for checked-out files |
|
||||
|
||||
### FreeCAD parameters
|
||||
### Keyboard shortcuts
|
||||
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `ApiUrl` | String | (empty) | Silo server URL |
|
||||
| `FirstStartChecked` | Bool | false | Whether the first-start prompt has been shown |
|
||||
Recommended shortcuts (prompted on first workbench activation):
|
||||
|
||||
| Shortcut | Command |
|
||||
|----------|---------|
|
||||
| Ctrl+O | `Silo_Open` — Search and open items |
|
||||
| Ctrl+N | `Silo_New` — Create new item |
|
||||
| Ctrl+S | `Silo_Save` — Save locally and upload |
|
||||
| Ctrl+Shift+S | `Silo_Commit` — Save with revision comment |
|
||||
|
||||
## Update checker
|
||||
|
||||
Configuration lives in `User parameter:BaseApp/Preferences/Mod/KindredCreate/Update`.
|
||||
Stored in `User parameter:BaseApp/Preferences/Mod/KindredCreate/Update`:
|
||||
|
||||
| Parameter | Type | Default | Description |
|
||||
|-----------|------|---------|-------------|
|
||||
| `CheckEnabled` | Bool | true | Enable/disable update checks |
|
||||
| `CheckEnabled` | Bool | true | Enable or disable update checks |
|
||||
| `CheckIntervalDays` | Int | 1 | Minimum days between checks |
|
||||
| `LastCheckTimestamp` | String | (empty) | ISO 8601 timestamp of last check |
|
||||
| `LastCheckTimestamp` | String | (empty) | ISO 8601 timestamp of last successful check |
|
||||
| `SkippedVersion` | String | (empty) | Version the user chose to skip |
|
||||
|
||||
The update checker queries the Gitea releases API at:
|
||||
The checker queries:
|
||||
```
|
||||
https://git.kindred-systems.com/api/v1/repos/kindred/create/releases
|
||||
https://git.kindred-systems.com/api/v1/repos/kindred/create/releases?limit=10
|
||||
```
|
||||
|
||||
It compares the current version (injected at build time via `version.py.in`) against the latest non-draft, non-prerelease tag. The `latest` rolling tag is ignored. Checks run 10 seconds after GUI startup.
|
||||
|
||||
To disable: set `CheckEnabled` to `false` in FreeCAD preferences, or set `CheckIntervalDays` to `0` for on-demand only.
|
||||
|
||||
## Theme
|
||||
|
||||
The default theme is **Catppuccin Mocha** (`KindredCreate.qss`). It is applied via the KindredCreate preference pack at startup.
|
||||
The default theme is **Catppuccin Mocha** applied via `KindredCreate.qss`.
|
||||
|
||||
To switch themes, go to **Edit > Preferences > General > Stylesheet** and select a different QSS file.
|
||||
| Setting | Location |
|
||||
|---------|----------|
|
||||
| Canonical stylesheet | `src/Gui/Stylesheets/KindredCreate.qss` |
|
||||
| Preference pack | `src/Gui/PreferencePacks/KindredCreate/` |
|
||||
| Default theme name | `coal` (in mdBook docs) / `KindredCreate` (in app) |
|
||||
|
||||
## Build presets
|
||||
To switch themes: **Edit > Preferences > General > Stylesheet** and select a different `.qss` file.
|
||||
|
||||
See `CMakePresets.json` for available build configurations. The pixi tasks (`configure`, `build`, etc.) use these presets automatically.
|
||||
The preference pack is synced from the canonical stylesheet at build time via CMake's `configure_file()`. Edits should be made to the canonical file, not the preference pack copy.
|
||||
|
||||
## Build configuration
|
||||
|
||||
### Version constants
|
||||
|
||||
Defined in the root `CMakeLists.txt`:
|
||||
|
||||
| Constant | Value | Description |
|
||||
|----------|-------|-------------|
|
||||
| `KINDRED_CREATE_VERSION` | `0.1.0` | Kindred Create version |
|
||||
| `FREECAD_VERSION` | `1.0.0` | FreeCAD base version |
|
||||
|
||||
These are injected into `src/Mod/Create/version.py` at build time via `version.py.in`.
|
||||
|
||||
### CMake presets
|
||||
|
||||
Defined in `CMakePresets.json`:
|
||||
|
||||
| Preset | Platform | Build type |
|
||||
|--------|----------|------------|
|
||||
| `conda-linux-debug` | Linux | Debug |
|
||||
| `conda-linux-release` | Linux | Release |
|
||||
| `conda-macos-debug` | macOS | Debug |
|
||||
| `conda-macos-release` | macOS | Release |
|
||||
| `conda-windows-debug` | Windows | Debug |
|
||||
| `conda-windows-release` | Windows | Release |
|
||||
|
||||
### ccache
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Max size | 4 GB |
|
||||
| Compression | zlib level 6 |
|
||||
| Sloppiness | `include_file_ctime,include_file_mtime,pch_defines,time_macros` |
|
||||
|
||||
ccache is auto-detected by CMake at configure time. Clear with `ccache -C`.
|
||||
|
||||
## Silo server
|
||||
|
||||
Server configuration is defined in YAML. See `mods/silo/deployments/config.prod.yaml` for production settings and `mods/silo/config.example.yaml` for all available options.
|
||||
|
||||
Key sections:
|
||||
- **database** — PostgreSQL connection string
|
||||
- **storage** — MinIO endpoint, bucket, access keys
|
||||
- **auth** — LDAP/OIDC provider settings
|
||||
- **server** — Listen address, TLS, CORS
|
||||
- **schemas** — Path to part numbering YAML schemas
|
||||
|
||||
Reference in New Issue
Block a user