Gradle is arranged into coarse-grained components called “architecture modules” and “platforms”. See ADR4 for a definition of these terms.
The diagram below shows the current set of architecture modules and platforms:
graph TD subgraph core["core platform"] core_runtime["core-runtime module"] style core_runtime stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000; core_configuration["core-configuration module"] style core_configuration stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000; core_execution["core-execution module"] style core_execution stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000; end style core fill:#c2e0f4,stroke:#3498db,stroke-width:2px,color:#000; documentation["documentation module"] style documentation stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000; ide["ide module"] style ide stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000; subgraph software["software platform"] end style software fill:#c2e0f4,stroke:#3498db,stroke-width:2px,color:#000; software --> core subgraph jvm["jvm platform"] end style jvm fill:#c2e0f4,stroke:#3498db,stroke-width:2px,color:#000; jvm --> core jvm --> software subgraph extensibility["extensibility platform"] end style extensibility fill:#c2e0f4,stroke:#3498db,stroke-width:2px,color:#000; extensibility --> core extensibility --> jvm subgraph native["native platform"] end style native fill:#c2e0f4,stroke:#3498db,stroke-width:2px,color:#000; native --> core native --> software enterprise["enterprise module"] style enterprise stroke:#1abc9c,fill:#b1f4e7,stroke-width:2px,color:#000;
This is a general-purpose automation platform which takes care of the efficient definition and execution of work, such as tasks. This platform is agnostic to what exactly the purpose of the work is. It might be creating an application, setting up development environments, orchestrating deployments, running simulations, etc.
This platform does not provide special support for a particular kind of automation. This is the responsibility of other platforms.
It is made up of 3 architecture modules:
This is a general purpose platform that builds on the core automation platform to add support for the automation of software development. This includes work such as compiling, testing and documenting software, plus sharing that software via publishing and dependency management. This platform is agnostic to what kind of software is being developed. It might be Java or Kotlin libraries running on the JVM, Gradle plugins, Android or iOS applications, C++ libraries, and so on.
This platform does not provide special support for a particular language or ecosystem.
This is a platform that builds on the core and software platforms to add support for developing software that runs on the JVM. This includes software that is implemented using Java, Kotlin or some other JVM language.
This platform provides specific support for Java, Groovy and Scala, and includes the foojay toolchain plugin.
This is a platform that builds on the core, software and JVM platforms to add support for extending Gradle by implementing and applying plugins.
This platform includes the plugin publishing plugin and the plugin portal.
This is a platform that builds on the core and software platforms to add support for developing native software.
This platform provides specific support for Swift, C++ and C.
There are some additional cross-cutting architecture modules that aren't platforms:
Provides cross-cutting integration with Gradle's commercial product.
Provides cross-cutting integration with IDEs and other tooling.
Provides build logic, libraries, test suites and infrastructure to support developing and releasing Gradle.
Provides cross-cutting Gradle documentation and samples, along with the infrastructure to write, test, publish and host the documentation.
Each platform and module has its own source directory under platforms/. In these source directories, you will find the Gradle projects that make up the platform or module.
The platforms and modules are defined using a DSL in settings.gradle.kts
Each platform and module can contribute code to the Gradle runtimes and Build state model.