> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cognite.com/llms.txt
> Use this file to discover all available pages before exploring further.

# modules/

> The modules directory contains the modules with the configuration that the Cognite Toolkit reads, including resource directories for different CDF resource types.

**Expected location:** `modules/` or `<your organization>/modules/`

The `modules` directory contains the modules with the configuration that the Cognite Toolkit reads. This directory
must be named `modules` and located either in the directory you run the toolkit from or one level
below. If you have it one level below, you must specify the parent directory with the `--organization-dir`/`-o` flag. You can also set the `default_organization_dir` key in the `cdf.toml` file.

The Cognite Toolkit searches the `modules` directory for modules. A **module** is a directory that contains a **resource directory**. A **resource directory** is a set of reserved names such as `auth`, `data_models`, `files`, `functions`, `workflows`, etc. See the [**official modules**](/cdf/deploy/cdf_toolkit/references/resource_library) for a complete list.

In the example below, `cdf_search` is a module that contains the `auth`, `data_models`, and `locations` resource directories. Similarly, `cdf_ingestion, `cdf\_pi`, and `cdf\_sap\_assets\` are modules that contain their respective resource directories.

```shell theme={"languages":{"custom":["/_languages/kuiper.json","../_languages/kuiper.json"]}}
modules/
  cdf_ingestion/
    auth/
    data_models/
    workflow/
  
  industrial_tools/
    cdf_search/
      auth/
      data_models/
      locations/
  
  sourcesystem/
    cdf_pi/
      auth/
      extraction_pipeline/
      transformations/
      workflows/
    
    cdf_sap_assets/
      auth/
      data_models/
      transformations/
```

You can have an arbitrary directory structure within the `module` directory if you only use the resource directories to define modules. In the example above, the `cdf_ingestion` module is a top-level module. `cdf_search`, `cdf_pi`, and `cdf_sap_assets` are organized in subdirectories.

## Resource directories

The resource directories contain the **configuration files** that define the **resources**. The configuration files are in YAML format with the `.yaml` extension. The toolkit expects the configuration files to be in matching directories. For example, you must define resources related to data models in the `data_models` directory. This makes it predictable where to find the configuration files for a specific resource type.

```shell theme={"languages":{"custom":["/_languages/kuiper.json","../_languages/kuiper.json"]}}
data_models/
  containers/
    asset.Container.yaml
    equipment.Container.yaml
  
  views/
    asset.View.yaml
    equipment.View.yaml
  
  schema.Space.yaml
  model.Datamodel.yaml
```

You can have an arbitrary directory structure within the resource directories. The toolkit searches for all `.yaml` files and parses them based on their filename and the resource directory they're in.

To name the resource configuration files, use the format `filename.ResourceType.yaml`.

Where:

* `filename` is a unique name to identify the resource.
* `ResourceType` specifies what type of resource the file defines and is used by the toolkit to determine how to parse the file. `ResourceType` is case-insensitive.

The toolkit uses this naming standard for resource directories and resource types:

* Resource directories: **plural** nouns, for example, `data_models`, `files`, `functions`, `workflows`, etc.
* Resource types: **singular** nouns, for example, `Container`, `View`, `Datamodel`, `File`, `Function`, `Workflow`, etc.
