Scripting Module | MuleSoft Documentation
# Scripting Module
Scripting Module v1.1
The Scripting module executes custom logic written in a scripting language. In some cases, you might need to create custom code to perform all or part of a complex task, or to reuse modules that you have already written. Supported scripting languages:
  * Groovy 2.4.16
  * Jython 2.7.2 (Java implementation of Python)
  * JRuby 9.2.11.1 (Java implementation of Ruby)
  * Nashorn (JavaScript engine)


## Installation
The Scripting module is included in Anypoint Studio. If you do not see this module in the Mule Palette, add it using **Add Module**. Alternatively, you can search in Exchange for the latest version of this module, and add this module to your project’s dependencies.
## Basic Usage
To configure a Scripting operation in Studio:
  1. Click the Scripting module from the Mule Palette.
  2. Drag the **Execute** operation of the Scripting module into your flow, for example:
  3. Double-click the **Execute** element to open the Execute configuration tab.
  4. From the **General** tab, provide your code in the **Code** text window, as shown in the next example.
  5. Choose the **Engine** for the execute component:
     * Groovy
     * Nashorn (JavaScript)
     * Jython (Python)
     * JRuby (Ruby)


In the **Configuration XML** editor, the XML looks similar to the following:
Example: Basic Usage
```
<scripting:execute engine="jython" doc:name="Script">
  <scripting:code>
   def factorial(n):
     if n == 0: return 1
	 return n * factorial(n-1)
   result = factorial(10)
  </scripting:code>
</scripting:execute>
```

You can also load code from an external file by using a File configuration property, for example:
In the **Configuration XML** editor, the XML looks similar to the following:
Example: Using a file configuration property to set a script’s code
```
<scripting:execute engine="jython" doc:name="Script">
  <scripting:code >${file::script.py}</scripting:code>
</scripting:execute>
```

### Setting Parameters
You can define input parameter values for the script to use through DataWeave, for example:
Parameters should be a map where keys are strings and the values are any object. The DataWeave expression must produce this type of output to work correctly.
You can use the parameters as binding variables by referencing them by their name, for example: `factorial(initialValue + int(payload))`
In the **Configuration XML** editor, the XML looks something like this:
Example: Setting Parameters
```
<scripting:execute engine="jython" doc:name="Script">
	<scripting:code >def factorial(n):
	if n == 0: return 1
	return n * factorial(n-1)
result = factorial(initialValue + int(payload))</scripting:code>
	<scripting:parameters ><![CDATA[#[{
    initialValue: 10
  }]]]></scripting:parameters>
</scripting:execute>
```

## Advanced Configuration
Use the **Advanced** tab to modify the target value and to set a variable as the target of the scripting execution.
In the **Configuration XML** editor, the XML looks similar to the following:
Example: Advanced Settings
```
<scripting:execute engine="jython" doc:name="Script" target="variableName">
  <scripting:code >${file::script.py}</scripting:code>
</scripting:execute
```

## See Also
  * Scripting Module Release Notes
  *   * Scripting Module Reference
  * MuleSoft Help Center