Unified History Architecture (CQRS/Event Sourcing) for Branching & Automation

The problem that this feature will solve:

Currently, managing design iterations and product variants (e.g., a “2025 version” vs. a “2026 version”) is a workflow nightmare involving “Save As” file duplication and manual parameter tracking.

In my current workflow, I often need to explore multiple design paths simultaneously. Without native branching, I end up with a folder full of binary files (project_v1.shapr, project_v1_optionB.shapr, etc.). These files are “black boxes”—I cannot see what changed between them (no diff), and I cannot merge improvements from “Option B” back into the main design without recreating the work from scratch.

Brief description of the outcomes that you expect from this feature:

  1. Native Branching & Snapshots: I expect to be able to create “Snapshots” (milestones) and “Branches” within a single project. I should be able to switch between design paths instantly without reloading files, effectively having a “Git-like” experience inside Shapr3D.

  2. Deterministic Merging: If I change a dimension in one branch and a color in another, I expect to be able to “Merge” these changes automatically, because the software understands the history as a sequence of unique commands rather than just a final shape.

  3. Localhost API for Scripting (OpenAPI): By decoupling the “commands” from the “rendering,” Shapr3D should allow me to interact with the model via a local REST API. I expect to be able to send commands (POST/PATCH) to localhost to update variables or inject geometry from external scripts (Python/JS), enabling true data-driven design.

  4. Time-Travel Debugging: Using the event-log, I want to be able to “scrub” through my design history and see exactly when and where a specific constraint or change was introduced.

What can’t you achieve without this feature?

  • Scalable Version Control: I cannot use Shapr3D for complex, multi-user or multi-generational projects because there is no way to manage “diffs” and “merges” between design iterations.

  • Automated Variants: I am blocked from automating my workflow. I cannot link external data sources (like an Excel sheet or a database) to my model’s history to generate 100 variants of a part automatically.

  • Workflow Efficiency: This is a major speed-bump. Every time I want to try a new idea, I risk breaking my “master” model. This fear of breaking things slows down the creative process. Without a command-based history, I am stuck in an old-fashioned “linear” CAD workflow.