IntelliJ Platform Plugin SDK Help

Project Model

This topic considers the concept of projects based on the IntelliJ Platform and related subjects, such as modules, libraries, facets, and SDKs.

Project Model Hierarchy

The project model organizes files into a four-level hierarchy:

  1. Project — the top-level container for all project content.

  2. Module — a discrete unit of functionality within a project. Each module's root configuration is available through ModuleRootManager.

  3. Content Root (ContentEntry) — a directory on disk owned by a module, defining the filesystem boundary for that module's files. A module may have multiple content roots.

  4. Source Root and Exclude Root — designated subdirectories within a content root. Represented by SourceFolder and ExcludeFolder, both extending ContentFolder. See Module for details.

Key entry points for querying the project model:

Project

A project encapsulates all of a project's source code, libraries, and build instructions into a single organizational unit.

A project defines collections referred to as Modules and Libraries. Depending on the project's logical and functional requirements, a single-module or a multi-module project can be created.

Module

A module is a discrete unit of functionality that can be run, tested, and debugged independently. Modules include such things as source code, build scripts, unit tests, deployment descriptors, etc.

In a project, each module can use a specific Software Development Kit (SDK) or inherit the SDK defined at the project level. A module can depend on other modules of the project.

Library

A library is an archive of compiled code (such as JAR files) on which modules depend. The IntelliJ Platform supports three types of libraries: Module, Project, and Global Libraries.

SDK

Every project uses a Software Development Kit (SDK). For Java projects, SDK is referred to as JDK (Java Development Kit).

The SDK determines which API library is used to build the project. For a multi-module project, the project SDK is common for all modules within the project by default. Optionally, a project can configure an individual SDK for each module.

Facet

A facet represents a certain configuration, specific for a particular framework or technology associated with a module. A module can have multiple facets.

Configuration

The user can configure all entities listed above in the Project Structure dialog.

Use ProjectSettingsService to open related entries programmatically.

20 March 2026