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

**URL:** https://discourse.shapr3d.com/t/unified-history-architecture-cqrs-event-sourcing-for-branching-automation/40190
**Category:** Feature requests
**Created:** [January 23, 2026, 9:49pm UTC](https://discourse.shapr3d.com/t/unified-history-architecture-cqrs-event-sourcing-for-branching-automation/40190 "2026-01-23T21:49:17Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![nikolajbrinch](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.shapr3d.com/nikolajbrinch/32/30225_2.png) [@nikolajbrinch](https://discourse.shapr3d.com/u/nikolajbrinch)
#### Post date: [January 23, 2026, 9:49pm UTC](https://discourse.shapr3d.com/t/unified-history-architecture-cqrs-event-sourcing-for-branching-automation/40190/1 "2026-01-23T21:49:17Z")

</div>

**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.
