- COMPONENTS.md: describe schema-driven form with runtime API fetching - silo.md: update command description with domain/subcategory picker, dynamic properties, live PN preview; add schema_form.py and silo_start.py to directory structure - configuration.md: update keyboard shortcut description
7.0 KiB
Silo
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
Architecture
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), and silo-calc (LibreOffice Calc extension).
Workbench commands
Document lifecycle
| Command | Shortcut | Description |
|---|---|---|
Silo_New |
Ctrl+N | Schema-driven item creation form — domain/subcategory picker, dynamic property fields loaded from the schema API, live part number preview, sourcing fields, and 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 |
|---|---|
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/. The SiloOrigin class in silo_origin.py implements:
| 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
FreeCAD parameters
Stored in User parameter:BaseApp/Preferences/Mod/KindredSilo:
| 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
The Silo server is documented in detail in the Silo Server section:
- Configuration — YAML config, database, MinIO, auth settings
- Deployment — Docker Compose, systemd, production setup
- Specification — Full API specification with 38+ routes
- Authentication — LDAP, OIDC, and local auth backends
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
│ ├── schema_form.py # Schema-driven item creation dialog (SchemaFormDialog)
│ ├── silo_commands.py # 14 commands + dock widgets
│ ├── silo_origin.py # FileOrigin backend
│ ├── silo_start.py # Native start panel (database items, activity feed)
│ └── 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 usagemods/silo/ROADMAP.md— strategic roadmap (6 phases, Q2 2026 → Q4 2027)