---
schema_version: "1"
id: 8a1872586324e98a039c14245ece08a87ece20d5ebd7a13a315aa808231c06ec
title: Learning the Module Model
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/mule-sdk/latest/module-structure.md
canonical_url: https://docs.mulesoft.com/mule-sdk/latest/module-structure
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 5ede8a99389ca5a71a27bc4c361ea6c1e4b166ec32c3ddfb427fa09146b2eab3
description: MuleSoft Documentation Site
release: "1.13"
latest: true
---
---
product: Mule SDK
version: 1.13
is-latest-version: true
keywords: mule, sdk, module, extension, components, structure
---

# Learning the Module Model

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

The entry point for building a Mule module is the `@Extension` annotated class. This class is used
to export all the module functionality and all the elements associated with it.

> [!WARNING] This class **must** be a public, non-abstract class. The `@Extension` annotation cannot
> be used on interfaces, abstract classes, private/protected classes, or typed classes (with
> generics).

```java
@Extension(name = "basic")
public class BasicModule {
}
```

When using the `@Extension` annotation, you need to provide a descriptive and concise name for your
module. You should not use `extension`, `module`, or `connector` in the module name. If you do, the
SDK will trim them. Optionally, you can specify the attribute `vendor` and the attribute `category`
(See [Licensing](https://docs.mulesoft.com/mule-sdk/latest/license)).

Once you have created an empty module, you can start adding elements to it.

![Model of a basic module](/mulesoft/current/en-us/mule-sdk/latest/_images/model.png)

Figure 1. Basic Module Structure

At a high level, the elements are:

- [Components](#components-2)

  - [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations)

  - [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources)

  - [Functions](https://docs.mulesoft.com/mule-sdk/latest/functions)

  - [Routers](https://docs.mulesoft.com/mule-sdk/latest/routers)

  - [Scopes](https://docs.mulesoft.com/mule-sdk/latest/scopes)

- [Connection Providers](https://docs.mulesoft.com/mule-sdk/latest/connections)

- [Configurations](https://docs.mulesoft.com/mule-sdk/latest/configs)

- [Parameters](https://docs.mulesoft.com/mule-sdk/latest/parameters)

## Components

Components are the key to the functionality of a module. Given a set of parameters, they can be
executed to produce or alter messages in a flow.

Sources and Operations are the most common components in a module:

- [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations) are components that process an incoming message and generate a result.

- [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources) are components that receive or generate new messages to be processed by the
  Mule Runtime.

## Configuration

Configurations are a set of configurable parameters that affect the behavior of the Module.
[Sources](https://docs.mulesoft.com/mule-sdk/latest/sources) and [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations) typically depend on a Configuration for parameters
that determine their behavior. However, some can work on their own without a Configuration.

There is no requirement to declare a Configuration for a Module, but you can declare as many as you
need. Different configurations might provide a different set of parameters and specify a set of
[Operations](https://docs.mulesoft.com/mule-sdk/latest/operations) and [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources) that are only available when using that
configuration.

## Connection Providers

A [Connection Provider](https://docs.mulesoft.com/mule-sdk/latest/connections) is the Module element in charge of handling connections, which
are created from a [Configuration](https://docs.mulesoft.com/mule-sdk/latest/configs). They centralize the logic and parameterization to
provision and release connections of some specific type.

Like the [Configurations](https://docs.mulesoft.com/mule-sdk/latest/configs), [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources), and [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations), Connection
Providers typically depend on a connection in order to be executed. A connection is not required but
is common. Connections used by [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations) and [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources) are provided by the
[Connection Provider](https://docs.mulesoft.com/mule-sdk/latest/connections).

[Connection Providers](https://docs.mulesoft.com/mule-sdk/latest/connections) are bound to [Configurations](https://docs.mulesoft.com/mule-sdk/latest/configs).
[Configurations](https://docs.mulesoft.com/mule-sdk/latest/configs) can have none, one, or many [Connection Providers](https://docs.mulesoft.com/mule-sdk/latest/connections) that
create different types of connections, for example, one `ConnectionProvider` for HTTPS and another
for (non-secured) HTTP connections.

## Parameters

`Parameters` are the most granular elements on the module model, and they are used in all these
elements: [Operations](https://docs.mulesoft.com/mule-sdk/latest/operations), [Sources](https://docs.mulesoft.com/mule-sdk/latest/sources), [Configurations](https://docs.mulesoft.com/mule-sdk/latest/configs), and
[Connection Providers](https://docs.mulesoft.com/mule-sdk/latest/connections).

They represent configurable elements that accept the values for elements to execute, or they hold
the configured values.

## Other Elements

A module can have other element types, for example, [Routers](https://docs.mulesoft.com/mule-sdk/latest/routers), [Scopes](https://docs.mulesoft.com/mule-sdk/latest/scopes),
[Functions](https://docs.mulesoft.com/mule-sdk/latest/functions), or [Errors](https://docs.mulesoft.com/mule-sdk/latest/errors). The ones described here are the core elements that most
modules are likely going to have.
