# devonfw/ideasy architecture

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

- Interactive diagram: https://gitdiagram.com/devonfw/ideasy
- Repository: https://github.com/devonfw/ideasy

## Overview

IDEasy is a project-centric development-environment manager: a developer creates or selects a project, then IDEasy applies project settings and installs or manages the configured tools. The CLI commandlet registry routes operations, while tool commandlets handle installation, versions, and execution; configuration can involve Git repositories and expressions. The GUI provides project/workspace selection and runs CLI commandlets with console and task feedback. The graph reflects documented product capabilities and the sampled sources; some CLI and tool-internal wiring is not shown where its caller was not sampled.

Main entry points: [`cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java`](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java) (Commandlet registry), [`cli/src/main/java/com/devonfw/tools/ide/commandlet/CreateCommandlet.java`](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CreateCommandlet.java) (Project creation), [`cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java`](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java) (Tool commandlets), [`cli/src/main/java/com/devonfw/tools/ide/tool/NativePackageManager.java`](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/NativePackageManager.java) (Native packages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI orchestration"]
  node_cli_entry["IDEasy CLI<br/>[Ideasy.java]"]
  node_commandlets["Commandlet registry"]
end

subgraph group_project["Project setup"]
  node_create["Project creation"]
  node_git["Git operations"]
  node_repository["Repository settings"]
  node_expressions["Config expressions"]
end

subgraph group_tools["Tool management"]
  node_install["Tool installation"]
  node_tool_base["Tool commandlets"]
  node_native_packages["Native packages"]
  node_versions["Version management"]
  node_updates["Environment updates"]
  node_rewrite["Code rewriting"]
end

subgraph group_runtime["Runtime services"]
  node_environment["Environment resolution"]
  node_process["Process execution"]
end

subgraph group_gui["Desktop GUI"]
  node_gui_app["GUI application<br/>[App.java]"]
  node_gui_state["Project/workspace state"]
  node_gui_commands["GUI command runner"]
  node_console["Task console"]
  node_locales["Localization<br/>[NlsService.java]"]
end

node_developer(("Developer"))
node_package_registry{{"Package sources"}}
node_os{{"Operating system"}}

node_developer -->|"invokes"| node_cli_entry
node_cli_entry -->|"dispatches"| node_commandlets
node_commandlets -->|"resolves command"| node_create
node_create -->|"uses Git"| node_git
node_create -->|"applies settings"| node_repository
node_repository -->|"resolves expressions"| node_expressions
node_commandlets -->|"resolves command"| node_install
node_install -->|"installs tools"| node_tool_base
node_tool_base -->|"uses package manager"| node_native_packages
node_native_packages -->|"runs package commands"| node_os
node_native_packages -.->|"fetches packages"| node_package_registry
node_commandlets -->|"resolves command"| node_versions
node_commandlets -->|"resolves command"| node_updates
node_commandlets -->|"resolves command"| node_rewrite
node_tool_base -->|"runs processes"| node_process
node_process -->|"uses variables"| node_environment
node_developer -->|"opens"| node_gui_app
node_gui_app -->|"creates state"| node_gui_state
node_gui_state -->|"provides context"| node_gui_commands
node_gui_commands -->|"resolves and runs"| node_commandlets
node_gui_commands -->|"sends output"| node_console
node_gui_state -->|"creates service"| node_locales

click node_cli_entry "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/cli/Ideasy.java"
click node_commandlets "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java"
click node_create "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CreateCommandlet.java"
click node_git "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/git/GitContextImpl.java"
click node_repository "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/git/repository/RepositoryCommandlet.java"
click node_expressions "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/expression/ExpressionFunctionManager.java"
click node_install "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/InstallCommandlet.java"
click node_tool_base "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java"
click node_native_packages "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/NativePackageManager.java"
click node_versions "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/VersionCommandlet.java"
click node_updates "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/update/UpdateCommandlet.java"
click node_rewrite "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/RewriteCommandlet.java"
click node_environment "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/environment/EnvironmentVariablesResolved.java"
click node_process "https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/process/ProcessContextImpl.java"
click node_gui_app "https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/App.java"
click node_gui_state "https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/context/GuiStateManager.java"
click node_gui_commands "https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/service/CommandletService.java"
click node_console "https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/mainwindow/console/ConsoleController.java"
click node_locales "https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/service/NlsService.java"

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_cli_entry,node_commandlets toneBlue
class node_create,node_git,node_repository,node_expressions toneAmber
class node_install,node_tool_base,node_native_packages,node_versions,node_updates,node_rewrite toneMint
class node_environment,node_process toneRose
class node_gui_app,node_gui_state,node_gui_commands,node_console,node_locales,node_developer,node_package_registry,node_os toneIndigo
```

## Components

### CLI orchestration

- [IDEasy CLI](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/cli/Ideasy.java): `cli/src/main/java/com/devonfw/tools/ide/cli/Ideasy.java`
- [Commandlet registry](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/CommandletManagerImpl.java`

### Project setup

- [Project creation](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/CreateCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/CreateCommandlet.java`
- [Git operations](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/git/GitContextImpl.java): `cli/src/main/java/com/devonfw/tools/ide/git/GitContextImpl.java`
- [Repository settings](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/git/repository/RepositoryCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/git/repository/RepositoryCommandlet.java`
- [Config expressions](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/expression/ExpressionFunctionManager.java): `cli/src/main/java/com/devonfw/tools/ide/expression/ExpressionFunctionManager.java`

### Tool management

- [Tool installation](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/InstallCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/InstallCommandlet.java`
- [Tool commandlets](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/tool/ToolCommandlet.java`
- [Native packages](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/tool/NativePackageManager.java): `cli/src/main/java/com/devonfw/tools/ide/tool/NativePackageManager.java`
- [Version management](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/VersionCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/VersionCommandlet.java`
- [Environment updates](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/update/UpdateCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/update/UpdateCommandlet.java`
- [Code rewriting](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/commandlet/RewriteCommandlet.java): `cli/src/main/java/com/devonfw/tools/ide/commandlet/RewriteCommandlet.java`

### Runtime services

- [Environment resolution](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/environment/EnvironmentVariablesResolved.java): `cli/src/main/java/com/devonfw/tools/ide/environment/EnvironmentVariablesResolved.java`
- [Process execution](https://github.com/devonfw/ideasy/blob/main/cli/src/main/java/com/devonfw/tools/ide/process/ProcessContextImpl.java): `cli/src/main/java/com/devonfw/tools/ide/process/ProcessContextImpl.java`

### Desktop GUI

- [GUI application](https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/App.java): `gui/src/main/java/com/devonfw/ide/gui/App.java`
- [Project/workspace state](https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/context/GuiStateManager.java): `gui/src/main/java/com/devonfw/ide/gui/core/context/GuiStateManager.java`
- [GUI command runner](https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/service/CommandletService.java): `gui/src/main/java/com/devonfw/ide/gui/core/service/CommandletService.java`
- [Task console](https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/mainwindow/console/ConsoleController.java): `gui/src/main/java/com/devonfw/ide/gui/core/mainwindow/console/ConsoleController.java`
- [Localization](https://github.com/devonfw/ideasy/blob/main/gui/src/main/java/com/devonfw/ide/gui/core/service/NlsService.java): `gui/src/main/java/com/devonfw/ide/gui/core/service/NlsService.java`

### Other components

- **Developer**
- **Package sources**
- **Operating system**

## Connections

- Developer → IDEasy CLI: invokes
- IDEasy CLI → Commandlet registry: dispatches
- Commandlet registry → Project creation: resolves command
- Project creation → Git operations: uses Git
- Project creation → Repository settings: applies settings
- Repository settings → Config expressions: resolves expressions
- Commandlet registry → Tool installation: resolves command
- Tool installation → Tool commandlets: installs tools
- Tool commandlets → Native packages: uses package manager
- Native packages → Operating system: runs package commands
- Native packages → Package sources: fetches packages
- Commandlet registry → Version management: resolves command
- Commandlet registry → Environment updates: resolves command
- Commandlet registry → Code rewriting: resolves command
- Tool commandlets → Process execution: runs processes
- Process execution → Environment resolution: uses variables
- Developer → GUI application: opens
- GUI application → Project/workspace state: creates state
- Project/workspace state → GUI command runner: provides context
- GUI command runner → Commandlet registry: resolves and runs
- GUI command runner → Task console: sends output
- Project/workspace state → Localization: creates service
