# kmm-studio/doors architecture

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

- Interactive diagram: https://gitdiagram.com/kmm-studio/doors
- Repository: https://github.com/kmm-studio/doors

## Overview

This Unity package integrates JetBrains Rider as a script editor. The main workflow is selecting or discovering a Rider installation, initializing integration, generating Unity-aware project and solution files, and opening assets in Rider. It also exposes Rider-driven Unity test runs and callbacks, and coordinates with Rider’s editor plugin. Project generation and test execution are distinct product stages. The README contains no architectural detail; broader capabilities are supported by package metadata and the listed source paths, while some subsystem wiring is not shown in the excerpts.

Main entry points: [`Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditor.cs`](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditor.cs) (Rider script editor), [`Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/ProjectGeneration.cs`](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/ProjectGeneration.cs) (Project generation), [`Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/RiderTestRunner.cs`](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/RiderTestRunner.cs) (Rider test runner), [`Packages/com.unity.ide.rider/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs`](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs) (Generation postprocessor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editor["Editor integration"]
  node_script_editor["Rider script editor"]
  node_discovery["Installation discovery<br/>[Discovery.cs]"]
  node_initializer["Plugin initializer"]
  node_editor_data["Editor state"]
  node_plugin_settings["Plugin settings<br/>[PluginSettings.cs]"]
end

subgraph group_projects["Project generation"]
  node_project_gen["Project generation"]
  node_assembly_provider["Assembly metadata"]
  node_file_io["Project file I/O<br/>[FileIOProvider.cs]"]
  node_guid_provider["GUID generation"]
  node_postprocessor["Generation postprocessor"]
end

subgraph group_testing["Test execution"]
  node_test_runner["Rider test runner<br/>[RiderTestRunner.cs]"]
  node_test_callbacks["Test callbacks<br/>[TestsCallback.cs]"]
  node_sync_handler["Sync callback handler"]
end

subgraph group_interop["Rider interop"]
  node_interop["Editor plugin interop"]
end

node_user(("Unity user"))
node_unity["Unity Editor"]
node_rider["Rider IDE"]
node_unity_test_api["Unity Test API"]

node_user -->|"selects editor"| node_script_editor
node_script_editor -->|"discovers installs"| node_discovery
node_script_editor -->|"updates state"| node_editor_data
node_script_editor -->|"initializes plugin"| node_initializer
node_script_editor -->|"syncs projects"| node_project_gen
node_script_editor -->|"opens assets"| node_interop
node_script_editor -->|"launches editor"| node_rider
node_unity -->|"provides editor APIs"| node_script_editor
node_project_gen -->|"reads assemblies"| node_assembly_provider
node_project_gen -->|"writes project files"| node_file_io
node_project_gen -->|"creates identifiers"| node_guid_provider
node_unity -->|"requests generation"| node_postprocessor
node_postprocessor -->|"checks installation"| node_script_editor
node_rider -->|"starts test run"| node_test_runner
node_test_runner -->|"initializes callbacks"| node_sync_handler
node_test_runner -->|"runs tests"| node_unity_test_api
node_test_runner -->|"registers callbacks"| node_test_callbacks
node_unity_test_api -->|"dispatches events"| node_test_callbacks
node_sync_handler -->|"forwards callbacks"| node_rider
node_interop -->|"invokes plugin"| node_rider

click node_script_editor "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditor.cs"
click node_discovery "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/Discovery.cs"
click node_initializer "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderInitializer.cs"
click node_editor_data "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditorData.cs"
click node_plugin_settings "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/PluginSettings.cs"
click node_project_gen "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/ProjectGeneration.cs"
click node_assembly_provider "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/AssemblyNameProvider.cs"
click node_file_io "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/FileIOProvider.cs"
click node_guid_provider "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/SolutionGuidGenerator.cs"
click node_postprocessor "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs"
click node_test_runner "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/RiderTestRunner.cs"
click node_test_callbacks "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/TestsCallback.cs"
click node_sync_handler "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/SyncTestRunEventsHandler.cs"
click node_interop "https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/EditorPluginInterop.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_script_editor,node_discovery,node_initializer,node_editor_data,node_plugin_settings,node_user toneBlue
class node_project_gen,node_assembly_provider,node_file_io,node_guid_provider,node_postprocessor toneAmber
class node_test_runner,node_test_callbacks,node_sync_handler,node_unity_test_api toneMint
class node_interop toneRose
class node_unity,node_rider toneIndigo
```

## Components

### Editor integration

- [Rider script editor](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditor.cs): `Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditor.cs`
- [Installation discovery](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/Discovery.cs): `Packages/com.unity.ide.rider/Rider/Editor/Discovery.cs`
- [Plugin initializer](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderInitializer.cs): `Packages/com.unity.ide.rider/Rider/Editor/RiderInitializer.cs`
- [Editor state](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditorData.cs): `Packages/com.unity.ide.rider/Rider/Editor/RiderScriptEditorData.cs`
- [Plugin settings](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/PluginSettings.cs): `Packages/com.unity.ide.rider/Rider/Editor/PluginSettings.cs`

### Project generation

- [Project generation](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/ProjectGeneration.cs): `Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/ProjectGeneration.cs`
- [Assembly metadata](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/AssemblyNameProvider.cs): `Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/AssemblyNameProvider.cs`
- [Project file I/O](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/FileIOProvider.cs): `Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/FileIOProvider.cs`
- [GUID generation](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/SolutionGuidGenerator.cs): `Packages/com.unity.ide.rider/Rider/Editor/ProjectGeneration/SolutionGuidGenerator.cs`
- [Generation postprocessor](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs): `Packages/com.unity.ide.rider/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs`

### Test execution

- [Rider test runner](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/RiderTestRunner.cs): `Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/RiderTestRunner.cs`
- [Test callbacks](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/TestsCallback.cs): `Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/TestsCallback.cs`
- [Sync callback handler](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/SyncTestRunEventsHandler.cs): `Packages/com.unity.ide.rider/Rider/Editor/UnitTesting/SyncTestRunEventsHandler.cs`

### Rider interop

- [Editor plugin interop](https://github.com/kmm-studio/doors/blob/main/Packages/com.unity.ide.rider/Rider/Editor/EditorPluginInterop.cs): `Packages/com.unity.ide.rider/Rider/Editor/EditorPluginInterop.cs`

### Other components

- **Unity user**
- **Unity Editor**
- **Rider IDE**
- **Unity Test API**

## Connections

- Unity user → Rider script editor: selects editor
- Rider script editor → Installation discovery: discovers installs
- Rider script editor → Editor state: updates state
- Rider script editor → Plugin initializer: initializes plugin
- Rider script editor → Project generation: syncs projects
- Rider script editor → Editor plugin interop: opens assets
- Rider script editor → Rider IDE: launches editor
- Unity Editor → Rider script editor: provides editor APIs
- Project generation → Assembly metadata: reads assemblies
- Project generation → Project file I/O: writes project files
- Project generation → GUID generation: creates identifiers
- Unity Editor → Generation postprocessor: requests generation
- Generation postprocessor → Rider script editor: checks installation
- Rider IDE → Rider test runner: starts test run
- Rider test runner → Sync callback handler: initializes callbacks
- Rider test runner → Unity Test API: runs tests
- Rider test runner → Test callbacks: registers callbacks
- Unity Test API → Test callbacks: dispatches events
- Sync callback handler → Rider IDE: forwards callbacks
- Editor plugin interop → Rider IDE: invokes plugin
