finos / finos/architecture-as-code
Unify CALM authoring and visualisation tooling (Hub, VS Code, Studio)
- Dominant language
- TypeScript
- Stars
- 399
- Forks
- 138
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 38
Description
## Feature Proposal
> [!IMPORTANT]
> **This issue supersedes #2600 (Consolidate the CALM platform) and #2857 (CalmStudio roadmap H2 2026).** Both are closed in favour of this one. The direction agreed on 2026-07-28 ([#2857 comment](https://github.com/finos/architecture-as-code/issues/2857#issuecomment-5103561004), [WG 2026-07-28](https://github.com/finos/architecture-as-code/issues/2904)) is the starting point here, not the desktop-Studio target state in #2600.
### Target Project:
Cross-cutting: `calm-hub`, `calm-hub-ui`, `calm-plugins/vscode`, `calm-widgets`, `shared`, `calm-models`, `calm-studio`. Led by @byrash, with @jpgough-ms and @initcron contributing.
### Description of Feature:
Unify the CALM authoring and visualisation tooling onto one stack:
| Layer | Target |
|---|---|
| Visualisation | One React Flow visualisation package, used by CALM Hub UI and the VS Code extension |
| Layout | One layout model (`x, y, w, h` per node), persisted identically by Hub and VS Code |
| Editing | Hub gains a studio mode (edit node/relationship properties, save through the Hub API); VS Code extension edits the same documents |
| Backend | CALM Hub API decoupled from Hub UI; OIDC and Git/SCM backing stores |
| CalmStudio | Useful pieces (node packs, palette, validation panel, nested containers) move into Hub; the SvelteKit app retires at parity |
Enterprises that must stay read-only get Hub in standalone mode; studio mode is opt-in.
### User Stories:
- As an architect, I want the same diagram in Hub and VS Code so that a layout I save in one renders identically in the other.
- As an architect, I want to edit an architecture visually in Hub or VS Code so that I do not need a third tool.
- As a platform owner, I want one visualisation stack so that a rendering fix is made in one place.
- As an enterprise admin, I want Hub to run read-only so that governed content cannot be edited in place.
### Current Limitations:
- Three renderers (Hub UI, VS Code extension, CalmStudio) with divergent layout formats.
- CalmStudio duplicates validation, MCP, and node packs the platform already owns.
- Hub UI and Hub API are coupled; Hub has no edit surface.
### Proposed Implementation:
Tracked as sub-issues of this issue. Existing issues are attached as-is; new ones are opened as phases start.
| Phase | Scope | Issue |
|---|---|---|
| 1 | VS Code extension on React Flow, with editing | #2869 |
| 1 | Layout persistence parity Hub ↔ VS Code | #2953 |
| 1 | Controls at interface level | #2868 |
| 1 | SVG import in VS Code | #3025 |
| 2 | Extract shared React Flow visualisation package | _new_ |
| 2 | Hub API independent of Hub UI | #2943 |
| 2 | Multi-IDP developer experience | #2944 |
| 2 | OIDC + Git/SCM backing store | #2867, PR #3001 |
| 3 | Studio mode MVP in Hub | _new_ |
| 3 | Modes design note (standalone vs studio) | _new_ |
| 4 | Migrate node packs, palette, validation panel, nested containers from CalmStudio | _new_ |
| 4 | Retire the SvelteKit app | _new_ |
Disposition of the #2600 track issues:
| Issue | Disposition |
|---|---|
| #2649 Track A structural cleanup | Stays open; still valid |
| #2650 Track B capability convergence | Stays open; validator/MCP convergence still applies |
| #2651 Track C Studio as desktop editor | Close; superseded by phases 3–4 |
| #2652 Track D docs consolidation | Stays open |
| #2690 RFC shared semantics layer | Folds into the phase 2 visualisation package |
### Testing Strategy:
Per sub-issue. The shared visualisation package needs a render-parity test between Hub UI and the VS Code extension.
### Documentation Requirements:
- Hub docs: standalone vs studio mode.
- VS Code extension docs (PR #2937 in flight).
- Migration note for CalmStudio users at retirement.
### Implementation Checklist:
- [ ] Design reviewed and approved
- [ ] Implementation completed
- [ ] Tests written and passing
- [ ] Documentation updated
- [ ] Relevant workflows updated (if needed)
- [ ] Performance impact assessed
### Additional Context:
The static render path (`calm-widgets`, docs embed, SVG export) stays separate from the interactive React Flow canvas: one set of view semantics, two render targets. Views (#2344) are the common contract.
The #2857 thread proposed @jpgough-ms as lead. I would like input from the other maintainers here on whether @byrash leads overall with Jim owning the Hub pieces, or the reverse.
Contributor guide
Assessment
This issue has not been assessed yet.