// Copyright (C) 2025 Gradle, Inc.
//
// Licensed under the Creative Commons Attribution-Noncommercial-ShareAlike 4.0 International License.;
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

[[public_gradle_apis]]
= Public Gradle APIs
:keywords: public api

Gradle provides many public APIs that allow developers to interact with various build system components.

Any class name containing `Internal`, or that is located in a package containing the segment `.internal.` is by definition not part of the public Gradle API and should not be relied upon for stable usage.

The following table summarizes public Gradle APIs and their common use cases.
This is *not* an exhaustive list:

[cols="1,1,2"]
|===
| API Package | Description | Common Use Cases

| *`org.gradle.api`*
| Core Gradle API
| - Defines key interfaces like `Project`, `Task`, and `Plugin` +
- Used for configuring projects and tasks

| *`org.gradle.authentication`*
| Authentication API
| - Handles authentication for repositories and services +
- Supports username/password, OAuth, and other mechanisms

| *`org.gradle.build`*
| Build Lifecycle API
| - Manages build phases and execution +
- Useful for controlling the order of tasks

| *`org.gradle.buildinit`*
| Build Init API
| - Used to generate new Gradle projects +
- Supports bootstrapping various project types

| *`org.gradle.caching`*
| Build Cache API
| - Provides mechanisms for storing and reusing build outputs +
- Used for incremental builds and CI optimization

| *`org.gradle.concurrent`*
| Concurrent Execution API
| - Manages parallel task execution +
- Helps optimize Gradle build performance

| *`org.gradle.deployment`*
| Deployment API
| - Supports managing and automating application deployments +
- Useful for CI/CD pipelines

| *`org.gradle.env`*
| Environment Configuration API
| - Provides access to environment variables and settings +
- Used to configure builds based on external conditions

| *`org.gradle.external.javadoc`*
| Javadoc API
| - Generates Javadoc for external dependencies +
- Used in Java documentation workflows

| *`org.gradle.ide`*
| IDE Integration API
| - Manages Gradle support for IDEs like IntelliJ and Eclipse +
- Configures IDE project settings

| *`org.gradle.includedbuild`*
| Composite Builds API
| - Enables dependency management across multiple Gradle builds +
- Supports modular development

| *`org.gradle.ivy`*
| Ivy Dependency Management API
| - Supports Ivy repositories and dependency resolution +
- Alternative to Maven for dependency management

| *`org.gradle.jvm`*
| Java Virtual Machine API
| - Manages JVM-based builds +
- Includes toolchains and JDK selection

| *`org.gradle.language`*
| Language Plugins API
| - Defines Gradle support for multiple languages (Java, Kotlin, etc.) +
- Used in multi-language projects

| *`org.gradle.maven`*
| Maven Dependency Management API
| - Supports Maven repositories and dependency resolution +
- Commonly used for Java projects

| *`org.gradle.nativeplatform`*
| Native Platform API
| - Provides support for C, C++, and other native builds +
- Used in cross-platform development

| *`org.gradle.normalization`*
| Input Normalization API
| - Helps optimize caching by defining input normalization rules +
- Useful for improving incremental builds

| *`org.gradle.platform`*
| Platform Dependency Management API
| - Defines and manages dependency constraints for platforms +
- Useful in multi-module projects

| *`org.gradle.play`*
| Play Framework Support API
| - Provides support for Play Framework projects +
- Used for web application development

| *`org.gradle.plugin.devel`*
| Plugin Development API
| - Supports writing and publishing custom Gradle plugins +
- Used by plugin authors

| *`org.gradle.plugin.repository`*
| Plugin Repository API
| - Defines repositories for Gradle plugins +
- Used to fetch plugins from the Gradle Plugin Portal

| *`org.gradle.plugin.use`*
| Plugin Application API
| - Handles plugin application in build scripts +
- Simplifies plugin usage with `plugins {}` block

| *`org.gradle.plugin.management`*
| Plugin Management API
| - Provides centralized management for Gradle plugins +
- Helps configure plugin versions and repositories

| *`org.gradle.plugins`*
| Built-in Plugins API
| - Includes Gradle’s built-in plugins (Java, Kotlin, etc.) +
- Used for applying standard build logic

| *`org.gradle.process`*
| Process Management API
| - Allows running external processes from Gradle tasks +
- Useful for automation and script execution

| *`org.gradle.testfixtures`*
| Test Fixtures API
| - Provides test utilities for Gradle plugin developers +
- Helps with testing Gradle tasks and plugins

| *`org.gradle.testing.jacoco`*
| JaCoCo Test Coverage API
| - Integrates with JaCoCo for code coverage reports +
- Used for tracking test coverage in Java projects

| *`org.gradle.tooling`*
| Tooling API (`TAPI`)
| - Allows external applications to interact with Gradle +
- Used by IDEs and CI systems to run Gradle builds

| *`org.gradle.swiftpm`*
| Swift Package Manager API
| - Provides Gradle integration with Swift Package Manager +
- Used for managing Swift dependencies

| *`org.gradle.model`*
| Model Rule-based API
| - Legacy API for configuring Gradle builds using models +
- Replaced by modern Gradle DSLs

| *`org.gradle.testkit`*
| Gradle TestKit API
| - Provides utilities for testing Gradle plugins +
- Used to write functional tests for Gradle plugins

| *`org.gradle.testing`*
| Testing Framework API
| - Defines testing frameworks for Gradle builds +
- Supports JUnit, TestNG, and Spock

| *`org.gradle.vcs`*
| Version Control System API
| - Allows dependencies to be fetched from VCS (Git, SVN) +
- Used for managing source-based dependencies

| *`org.gradle.work`*
| Work Execution API
| - Provides utilities for parallel and incremental task execution +
- Helps optimize long-running Gradle tasks

| *`org.gradle.workers`*
| Worker API
| - Enables parallel execution of Gradle tasks +
- Used for running tasks in worker threads

| *`org.gradle.util`*
| Utility API
| - Provides various utility functions used internally by Gradle +
- Used for Gradle build logic and plugin development
|===
