# islam-dj/nour-osemosys-studio-standard architecture

> Architecture diagram of the GitHub repository islam-dj/nour-osemosys-studio-standard, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/islam-dj/nour-osemosys-studio-standard
- Repository: https://github.com/islam-dj/nour-osemosys-studio-standard

## Overview

Nour OSeMOSYS Studio is a local application for building, checking, solving and analysing OSeMOSYS/CLEWs energy models. The main workflow runs from model editing and validation through solver runs to results and uncertainty analysis; cases and MUIO provide persistence and exchange. The server exposes the browser interface and routes API requests to backend services. Frontend feature modules are identified from the tree and README capabilities, but their internal calls were not sampled, so those links are omitted.

Main entry points: [`web/js/main.js`](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/main.js) (Studio UI), [`server/web.py`](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/web.py) (HTTP API), [`server/solvers.py`](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/solvers.py) (Solver Service), [`server/muio.py`](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/muio.py) (MUIO Exchange)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_modeling["Modeling"]
  node_diagram["Energy Diagram<br/>[diagram.js]"]
  node_model_edit["Model Editing<br/>[entities.js]"]
  node_model_setup["Model Setup<br/>[setup.js]"]
  node_checks["Model Checks<br/>[checks.js]"]
end

subgraph group_runtime["Run and Results"]
  node_solver_service["Solver Service<br/>[solvers.py]"]
  node_solve_engine["Solve Engine<br/>[solve_check.py]"]
  node_solver_adapters["Solver Adapters<br/>[highs_run.py]"]
  node_results["Results Viewer<br/>[results.js]"]
  node_ask["Ask Results<br/>[ask.js]"]
  node_derived["Derived Results<br/>[derived.py]"]
end

subgraph group_analysis["Uncertainty Analysis"]
  node_mc_ui["Monte Carlo UI<br/>[montecarlo.js]"]
  node_mc_service["Monte Carlo Service<br/>[montecarlo.py]"]
  node_mc_engine["Monte Carlo Engine<br/>[mc.py]"]
  node_rdm_ui["Robust Decisions UI<br/>[rdm.js]"]
  node_rdm_service["RDM Service<br/>[rdm.py]"]
  node_rdm_engine["RDM Engine<br/>[rdm.py]"]
end

subgraph group_cases["Cases and Exchange"]
  node_case_store[("Case Management<br/>[cases.py]")]
  node_muio_service["MUIO Exchange<br/>[muio.py]"]
  node_muio_bridge["MUIO Bridge<br/>[muio_bridge.py]"]
end

subgraph group_platform["Local Application"]
  node_studio["Studio UI<br/>[main.js]"]
  node_http["HTTP API<br/>[web.py]"]
  node_local_server["Local Server<br/>[app.py]"]
end

node_user(("Modeler"))

node_user -->|"uses"| node_studio
node_studio -->|"opens"| node_diagram
node_studio -->|"edits"| node_model_edit
node_studio -->|"configures"| node_model_setup
node_studio -->|"checks"| node_checks
node_studio -->|"requests"| node_http
node_local_server -->|"serves"| node_http
node_http -->|"routes to"| node_solver_service
node_http -->|"routes to"| node_case_store
node_http -->|"routes to"| node_mc_service
node_http -->|"routes to"| node_rdm_service
node_http -->|"routes to"| node_muio_service
node_solver_service -->|"runs"| node_solve_engine
node_solve_engine -->|"invokes"| node_solver_adapters
node_solver_service -->|"computes"| node_derived
node_studio -->|"views"| node_results
node_studio -->|"asks about"| node_ask
node_studio -->|"configures"| node_mc_ui
node_mc_service -->|"runs"| node_mc_engine
node_studio -->|"configures"| node_rdm_ui
node_rdm_service -->|"runs"| node_rdm_engine
node_muio_service -->|"delegates to"| node_muio_bridge
node_studio -->|"manages cases"| node_case_store
node_studio -->|"imports and exports"| node_muio_service

click node_studio "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/main.js"
click node_diagram "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/diagram.js"
click node_model_edit "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/entities.js"
click node_model_setup "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/setup.js"
click node_checks "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/checks.js"
click node_http "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/web.py"
click node_local_server "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/app.py"
click node_case_store "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/cases.py"
click node_solver_service "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/solvers.py"
click node_solve_engine "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/solve_check.py"
click node_solver_adapters "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/highs_run.py"
click node_results "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/results.js"
click node_ask "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/ask.js"
click node_mc_ui "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/montecarlo.js"
click node_mc_service "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/montecarlo.py"
click node_mc_engine "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/mc.py"
click node_rdm_ui "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/rdm.js"
click node_rdm_service "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/rdm.py"
click node_rdm_engine "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/rdm.py"
click node_muio_service "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/muio.py"
click node_muio_bridge "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/muio_bridge.py"
click node_derived "https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/derived.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_diagram,node_model_edit,node_model_setup,node_checks toneBlue
class node_solver_service,node_solve_engine,node_solver_adapters,node_results,node_ask,node_derived toneAmber
class node_mc_ui,node_mc_service,node_mc_engine,node_rdm_ui,node_rdm_service,node_rdm_engine toneMint
class node_case_store,node_muio_service,node_muio_bridge toneRose
class node_studio,node_http,node_local_server,node_user toneIndigo
```

## Components

### Modeling

- [Energy Diagram](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/diagram.js): `web/js/diagram.js`
- [Model Editing](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/entities.js): `web/js/entities.js`
- [Model Setup](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/setup.js): `web/js/setup.js`
- [Model Checks](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/checks.js): `web/js/checks.js`

### Run and Results

- [Solver Service](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/solvers.py): `server/solvers.py`
- [Solve Engine](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/solve_check.py): `engine/solve_check.py`
- [Solver Adapters](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/highs_run.py): `engine/highs_run.py`
- [Results Viewer](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/results.js): `web/js/results.js`
- [Ask Results](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/ask.js): `web/js/ask.js`
- [Derived Results](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/derived.py): `engine/derived.py`

### Uncertainty Analysis

- [Monte Carlo UI](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/montecarlo.js): `web/js/montecarlo.js`
- [Monte Carlo Service](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/montecarlo.py): `server/montecarlo.py`
- [Monte Carlo Engine](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/mc.py): `engine/mc.py`
- [Robust Decisions UI](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/rdm.js): `web/js/rdm.js`
- [RDM Service](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/rdm.py): `server/rdm.py`
- [RDM Engine](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/rdm.py): `engine/rdm.py`

### Cases and Exchange

- [Case Management](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/cases.py): `server/cases.py`
- [MUIO Exchange](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/muio.py): `server/muio.py`
- [MUIO Bridge](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/engine/muio_bridge.py): `engine/muio_bridge.py`

### Local Application

- [Studio UI](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/web/js/main.js): `web/js/main.js`
- [HTTP API](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/web.py): `server/web.py`
- [Local Server](https://github.com/islam-dj/nour-osemosys-studio-standard/blob/main/server/app.py): `server/app.py`

### Other components

- **Modeler**

## Connections

- Modeler → Studio UI: uses
- Studio UI → Energy Diagram: opens
- Studio UI → Model Editing: edits
- Studio UI → Model Setup: configures
- Studio UI → Model Checks: checks
- Studio UI → HTTP API: requests
- Local Server → HTTP API: serves (evidence: `server/app.py`)
- HTTP API → Solver Service: routes to (evidence: `server/web.py`)
- HTTP API → Case Management: routes to (evidence: `server/web.py`)
- HTTP API → Monte Carlo Service: routes to (evidence: `server/web.py`)
- HTTP API → RDM Service: routes to (evidence: `server/web.py`)
- HTTP API → MUIO Exchange: routes to (evidence: `server/web.py`)
- Solver Service → Solve Engine: runs (evidence: `server/solvers.py`)
- Solve Engine → Solver Adapters: invokes
- Solver Service → Derived Results: computes (evidence: `engine/derived.py`)
- Studio UI → Results Viewer: views
- Studio UI → Ask Results: asks about
- Studio UI → Monte Carlo UI: configures
- Monte Carlo Service → Monte Carlo Engine: runs (evidence: `server/montecarlo.py`)
- Studio UI → Robust Decisions UI: configures
- RDM Service → RDM Engine: runs (evidence: `server/rdm.py`)
- MUIO Exchange → MUIO Bridge: delegates to (evidence: `server/muio.py`)
- Studio UI → Case Management: manages cases
- Studio UI → MUIO Exchange: imports and exports
