Mule ESB provides a great deal of default functionality that you can use in your implementation. If you need different functionality, you can extend Mule as described on this page.
You can create five basic types of extensions to Mule: projects, modules, transports, examples, and enterprise patterns.
A project is a stand-alone Mule application.
A module is a package of related functionality in Mule, such as the XML module, which provides XML-based utilities like filters and routers. For a list of the available modules you can use, see Modules Reference.
An example is a sample application that you create to help users get up and running more quickly. Several examples are provided with Mule.
A catalog is a Mule-created Maven archetype created to help Mule users create custom configuration patterns.
Mule provides Maven archetypes that create the templates for each of these types of functionality in seconds, including the configuration files, unit tests, and packages.
An archetype acts as a wizard, prompting you to provide input, and then creates template configuration, source, and unit test files. Furthermore, if you run an archetype on an existing project or module you created, Maven will update it for you.
After using the Maven archetype to get started, the recommended practice is to use an integrated development environment (IDE) such as Eclipse or IntelliJ to develop your Mule project, transport, module, or example. The Mule IDE allows you to quickly get up and running developing with Mule in Eclipse.
After you have created a new extension, you can create it as a project on GitHub. This allows you to share it with the Mule community so you can get feedback on the quality and design of the module before putting it into production.
If you will use Mule in countries where English is not spoken, you can extend Mule by internationalizing the strings in the messages and exceptions. Additionally, there are guidelines you should take into consideration to make sure your code handles different locales. For more information, see Internationalizing Strings.