# nuksee/ims architecture

> Architecture diagram of the GitHub repository nuksee/ims, 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/nuksee/ims
- Repository: https://github.com/nuksee/ims

## Overview

IMS is a Windows desktop client for connecting to Informix, browsing database objects, and writing SQL with a result grid. The runtime starts in the WPF app, whose view model coordinates connections and feature tabs; the Informix ODBC provider performs server access. Core modules supply catalogue, SQL, completion, history, export, and monitoring behavior. The README says the session monitor is not started, despite monitor-related source files being present; its intended workflow is shown as a planned capability. Relationships are limited to documented or indexed references.

Main entry points: [`src/Ims.App/ViewModels/MainViewModel.cs`](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/MainViewModel.cs) (Workspace coordinator), [`src/Ims.App/MainWindow.xaml.cs`](https://github.com/nuksee/ims/blob/main/src/Ims.App/MainWindow.xaml.cs) (Main window), [`src/Ims.App/ViewModels/EditorTabViewModel.cs`](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/EditorTabViewModel.cs) (SQL editor), [`src/Ims.Data.Informix/InformixOdbcSessionFactory.cs`](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/InformixOdbcSessionFactory.cs) (Session factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_appboot["App startup<br/>[App.xaml.cs]"]
  node_mainui["Main window<br/>[MainWindow.xaml.cs]"]
  node_mainvm["Workspace coordinator<br/>[MainViewModel.cs]"]
  node_connectui["Connection dialog"]
  node_treevm["Object browser"]
  node_editorvm["SQL editor"]
  node_results["Result grid"]
  node_detailvm["Object details"]
  node_monitorui["Session monitor UI"]
end

subgraph group_core["Core capabilities"]
  node_completion["SQL completion"]
  node_sqlparse["SQL parsing"]
  node_catalogapi["Catalogue contract<br/>[ICatalogReader.cs]"]
  node_export["Result export<br/>[ResultExporter.cs]"]
  node_monitorapi["Monitor contract<br/>[ISessionMonitor.cs]"]
end

subgraph group_provider["Informix provider"]
  node_catalogdata["Catalogue reader"]
  node_sessionfactory["Session factory"]
  node_odbc["ODBC session"]
  node_monitorprovider["Monitor queries"]
  node_credentials[("Credential store")]
end

subgraph group_state["Local state"]
  node_connections[("Saved connections<br/>[ConnectionStore.cs]")]
  node_history[("Query history<br/>[QueryHistory.cs]")]
end

node_user(("User"))
node_informix[("Informix server")]

node_user -->|"uses"| node_mainui
node_appboot -->|"composes"| node_mainvm
node_appboot -->|"creates"| node_sessionfactory
node_mainui -->|"coordinates"| node_mainvm
node_mainvm -->|"requests credentials"| node_connectui
node_mainvm -->|"loads and saves"| node_connections
node_mainvm -->|"retrieves secrets"| node_credentials
node_mainvm -->|"opens sessions"| node_sessionfactory
node_sessionfactory -->|"creates"| node_odbc
node_odbc -->|"executes SQL"| node_informix
node_mainvm -->|"builds browser"| node_treevm
node_mainvm -->|"loads catalogue"| node_catalogapi
node_catalogdata -->|"implements"| node_catalogapi
node_catalogdata -->|"queries catalogue"| node_informix
node_mainvm -->|"creates tabs"| node_editorvm
node_mainui -->|"requests suggestions"| node_completion
node_completion -->|"parses context"| node_sqlparse
node_editorvm -.->|"runs statements"| node_odbc
node_editorvm -.->|"records executions"| node_history
node_mainui -->|"displays results"| node_results
node_mainui -->|"exports results"| node_export
node_mainvm -->|"opens object details"| node_detailvm
node_mainvm -->|"creates monitor tab"| node_monitorui
node_monitorui -->|"requests snapshots"| node_monitorapi
node_monitorprovider -->|"implements"| node_monitorapi
node_monitorprovider -->|"reads session state"| node_informix

click node_appboot "https://github.com/nuksee/ims/blob/main/src/Ims.App/App.xaml.cs"
click node_mainui "https://github.com/nuksee/ims/blob/main/src/Ims.App/MainWindow.xaml.cs"
click node_mainvm "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/MainViewModel.cs"
click node_connectui "https://github.com/nuksee/ims/blob/main/src/Ims.App/Views/ConnectionDialog.xaml.cs"
click node_treevm "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ObjectTreeViewModel.cs"
click node_editorvm "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/EditorTabViewModel.cs"
click node_results "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ResultSetViewModel.cs"
click node_detailvm "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ObjectDetailTabViewModel.cs"
click node_completion "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Completion/CompletionEngine.cs"
click node_sqlparse "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Sql/SqlStatementSplitter.cs"
click node_catalogapi "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Catalog/ICatalogReader.cs"
click node_catalogdata "https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Catalog/InformixCatalogReader.cs"
click node_sessionfactory "https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/InformixOdbcSessionFactory.cs"
click node_odbc "https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/InformixOdbcSession.cs"
click node_connections "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Connections/ConnectionStore.cs"
click node_history "https://github.com/nuksee/ims/blob/main/src/Ims.Core/History/QueryHistory.cs"
click node_export "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Export/ResultExporter.cs"
click node_monitorui "https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/SessionMonitorTabViewModel.cs"
click node_monitorapi "https://github.com/nuksee/ims/blob/main/src/Ims.Core/Monitoring/ISessionMonitor.cs"
click node_monitorprovider "https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Catalog/InformixCatalogReader.Sessions.cs"
click node_credentials "https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Security/WindowsCredentialStore.cs"

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_appboot,node_mainui,node_mainvm,node_connectui,node_treevm,node_editorvm,node_results,node_detailvm,node_monitorui,node_user toneBlue
class node_completion,node_sqlparse,node_catalogapi,node_export,node_monitorapi,node_informix toneAmber
class node_catalogdata,node_sessionfactory,node_odbc,node_monitorprovider,node_credentials toneMint
class node_connections,node_history toneRose
```

## Components

### Desktop application

- [App startup](https://github.com/nuksee/ims/blob/main/src/Ims.App/App.xaml.cs): `src/Ims.App/App.xaml.cs`
- [Main window](https://github.com/nuksee/ims/blob/main/src/Ims.App/MainWindow.xaml.cs): `src/Ims.App/MainWindow.xaml.cs`
- [Workspace coordinator](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/MainViewModel.cs): `src/Ims.App/ViewModels/MainViewModel.cs`
- [Connection dialog](https://github.com/nuksee/ims/blob/main/src/Ims.App/Views/ConnectionDialog.xaml.cs): `src/Ims.App/Views/ConnectionDialog.xaml.cs`
- [Object browser](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ObjectTreeViewModel.cs): `src/Ims.App/ViewModels/ObjectTreeViewModel.cs`
- [SQL editor](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/EditorTabViewModel.cs): `src/Ims.App/ViewModels/EditorTabViewModel.cs`
- [Result grid](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ResultSetViewModel.cs): `src/Ims.App/ViewModels/ResultSetViewModel.cs`
- [Object details](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/ObjectDetailTabViewModel.cs): `src/Ims.App/ViewModels/ObjectDetailTabViewModel.cs`
- [Session monitor UI](https://github.com/nuksee/ims/blob/main/src/Ims.App/ViewModels/SessionMonitorTabViewModel.cs): `src/Ims.App/ViewModels/SessionMonitorTabViewModel.cs`

### Core capabilities

- [SQL completion](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Completion/CompletionEngine.cs): `src/Ims.Core/Completion/CompletionEngine.cs`
- [SQL parsing](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Sql/SqlStatementSplitter.cs): `src/Ims.Core/Sql/SqlStatementSplitter.cs`
- [Catalogue contract](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Catalog/ICatalogReader.cs): `src/Ims.Core/Catalog/ICatalogReader.cs`
- [Result export](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Export/ResultExporter.cs): `src/Ims.Core/Export/ResultExporter.cs`
- [Monitor contract](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Monitoring/ISessionMonitor.cs): `src/Ims.Core/Monitoring/ISessionMonitor.cs`

### Informix provider

- [Catalogue reader](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Catalog/InformixCatalogReader.cs): `src/Ims.Data.Informix/Catalog/InformixCatalogReader.cs`
- [Session factory](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/InformixOdbcSessionFactory.cs): `src/Ims.Data.Informix/InformixOdbcSessionFactory.cs`
- [ODBC session](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/InformixOdbcSession.cs): `src/Ims.Data.Informix/InformixOdbcSession.cs`
- [Monitor queries](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Catalog/InformixCatalogReader.Sessions.cs): `src/Ims.Data.Informix/Catalog/InformixCatalogReader.Sessions.cs`
- [Credential store](https://github.com/nuksee/ims/blob/main/src/Ims.Data.Informix/Security/WindowsCredentialStore.cs): `src/Ims.Data.Informix/Security/WindowsCredentialStore.cs`

### Local state

- [Saved connections](https://github.com/nuksee/ims/blob/main/src/Ims.Core/Connections/ConnectionStore.cs): `src/Ims.Core/Connections/ConnectionStore.cs`
- [Query history](https://github.com/nuksee/ims/blob/main/src/Ims.Core/History/QueryHistory.cs): `src/Ims.Core/History/QueryHistory.cs`

### Other components

- **User**
- **Informix server**

## Connections

- User → Main window: uses (evidence: `README.md`)
- App startup → Workspace coordinator: composes (evidence: `src/Ims.App/App.xaml.cs`)
- App startup → Session factory: creates (evidence: `src/Ims.App/App.xaml.cs`)
- Main window → Workspace coordinator: coordinates (evidence: `src/Ims.App/MainWindow.xaml.cs`)
- Workspace coordinator → Connection dialog: requests credentials (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Workspace coordinator → Saved connections: loads and saves (evidence: `src/Ims.App/App.xaml.cs`)
- Workspace coordinator → Credential store: retrieves secrets (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Workspace coordinator → Session factory: opens sessions (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Session factory → ODBC session: creates (evidence: `src/Ims.Data.Informix/InformixOdbcSessionFactory.cs`)
- ODBC session → Informix server: executes SQL (evidence: `README.md`)
- Workspace coordinator → Object browser: builds browser (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Workspace coordinator → Catalogue contract: loads catalogue (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Catalogue reader → Catalogue contract: implements (evidence: `src/Ims.Data.Informix/Catalog/InformixCatalogReader.cs`)
- Catalogue reader → Informix server: queries catalogue (evidence: `src/Ims.Data.Informix/Catalog/InformixCatalogReader.cs`)
- Workspace coordinator → SQL editor: creates tabs (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Main window → SQL completion: requests suggestions (evidence: `src/Ims.App/MainWindow.xaml.cs`)
- SQL completion → SQL parsing: parses context
- SQL editor → ODBC session: runs statements
- SQL editor → Query history: records executions
- Main window → Result grid: displays results (evidence: `src/Ims.App/MainWindow.xaml.cs`)
- Main window → Result export: exports results (evidence: `src/Ims.App/MainWindow.xaml.cs`)
- Workspace coordinator → Object details: opens object details (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Workspace coordinator → Session monitor UI: creates monitor tab (evidence: `src/Ims.App/ViewModels/MainViewModel.cs`)
- Session monitor UI → Monitor contract: requests snapshots (evidence: `src/Ims.App/ViewModels/SessionMonitorTabViewModel.cs`)
- Monitor queries → Monitor contract: implements
- Monitor queries → Informix server: reads session state (evidence: `src/Ims.Data.Informix/Catalog/InformixCatalogReader.Sessions.cs`)
