# Installation and Locations

A module is nothing more than a folder that contains a `ModuleConfig.cfc` file. The only requirement for that CFC is that it contains a method called `configure()`. Modules can also contain models, interceptors, commands, and pretty much anything else you want to stick in them. As long as they contain a `box.json` in their root, they are also a package, which means they are self-describing, can install dependencies, and can be installed via the `install` command.

## Locations

CommandBox has two default `modules` directories.

* `~/.CommandBox/cfml/system/modules`
* `~/.CommandBox/cfml/modules`

The first is for system modules so you shouldn't need to touch it. All the built-in commands are in those modules, so feel free to check out how they work. All user-installed modules are in the second folder. The `cfml` folder is the "root" of the CommandBox installation, so there will also be a `box.json` created in that folder once you start installing modules via the `install` command.

## Installation

The first way to create a module is to manually create a folder in the `~/.CommandBox/cfml/modules` directory and place your `ModuleConfig.cfc` inside of it. This is the process described in the guide on [creating your first module](/developing-for-commandbox/modules.md).

If you have a package of type `commandbox-modules` locally, in a Git repo, or in Forgebox, you can install from any working directory. When CommandBox sees the package type, it will change the installation directory to be the user modules folder.

```bash
install /path/to/module
install githubuser/modulerepo
install forgebox-module-slug
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://commandbox.ortusbooks.com/developing-for-commandbox/modules/installation-and-locations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
