# Transformations Overview


RudderStack's **Transformations** feature lets you write custom functions to implement specific use-cases on your event data, like:

- Filtering or sampling events
- Cleaning or aggregating data
- Data masking or removing sensitive PII to ensure data privacy
- Enriching events by implementing static logic or leveraging an external API
- Using an API to implement specific actions on the events

{{< info >}}
You can create up to:

- 5 JavaScript transformations in the RudderStack [Free](https://www.rudderstack.com/pricing/) plan
- 25 transformations (JavaScript and Python) in the [Growth](https://www.rudderstack.com/pricing/) plan
- Unlimited transformations in the [Enterprise](https://www.rudderstack.com/enterprise-quote/) plan
- Unlimited [transformation libraries]({{< ref "transformations/libraries.md" >}}) on all plans

See the [RudderStack Plan Comparison]({{< ref "dashboard-guides/billings-plans/plan-comparison.md" >}}) guide for the full list of plan-specific limits.
{{< /info >}}

Learn more about transformations in this self-paced product tour:

<div style="position: relative; padding-bottom: calc(50.15197568389058% + 41px); height: 0; width: 100%;"><iframe src="https://demo.arcade.software/DG1JCpSwC2WpNBixXoYp?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true" title="RudderStack Transformations" frameborder="0" loading="lazy" webkitallowfullscreen mozallowfullscreen allowfullscreen allow="clipboard-write" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; color-scheme: light;" ></iframe></div>

## Key features

- Transformations are easy to build, manage, debug, and reuse.
- Enrich your events in-flight with custom logic before sending them to your destinations.
- Use prebuilt templates to create transformations for specific use-cases by leveraging [Templates]({{< ref "transformations/templates.md" >}}).
- Write transformations in JavaScript and Python. 

{{< info >}}
RudderStack's Python transformations feature lets you use custom Python code to transform your source events on the fly. It is especially useful for the data teams that generally deal with Python.

Note that:

- Python transformations are available only for:

  - RudderStack [Growth](https://www.rudderstack.com/pricing/) and [Enterprise](https://www.rudderstack.com/enterprise-quote/) plan.
  - Destinations that support sending events via [cloud mode]({{< ref "destinations/rudderstack-connection-modes.md#cloud-mode" >}}).
- RudderStack supports Python version 3.11 for writing transformations.
- RudderStack supports only some of the built-in Python packages to write transformations. These are [datetime](https://docs.python.org/3.10/library/datetime.html), [json](https://docs.python.org/3.10/library/json.html), [math](https://docs.python.org/3.10/library/math.html), [random](https://docs.python.org/3.10/library/random.html), [requests](https://pypi.org/project/requests/), [time](https://docs.python.org/3.10/library/time.html), and [urllib](https://docs.python.org/3.10/library/urllib.html), along with the external package [python-dateutil](https://pypi.org/project/python-dateutil/2.8.2/).
{{< /info >}}

- Use transformations across your [Event Streams]({{< ref "sources/event-streams/_index.md" >}}) and [Reverse ETL]({{< ref "sources/reverse-etl/_index.md" >}}) pipelines in [cloud mode]({{< ref "transformations/usage.md#cloud-mode" >}}). 

{{< announcement >}}
[Device mode]({{< ref "transformations/usage.md#device-mode" >}}) transformations are available only in the [Enterprise](https://www.rudderstack.com/enterprise-quote/) plan.
{{< /announcement >}}

- Version control your transformations.
- Create an organization-wide sandbox where your team can store all transformations before publishing them in production.
- Leverage the [Transformations API]({{< ref "api/transformation-api.md" >}}) to programmatically manage your transformations.

## In this section

See the following guides to learn more about the different Transformations features and their usage:

| Guide | <div style="width:350px">Description</div> |
| :---| :---|
| [Create Transformations]({{< ref "transformations/create.md" >}}) | Add and test new transformations in RudderStack |
| [Use Transformations]({{< ref "transformations/usage.md" >}}) | Use transformations in different [RudderStack connection modes]({{< ref "destinations/rudderstack-connection-modes.md" >}}) |
| [Runtime Functions]({{< ref "transformations/runtime-functions.md" >}}) | Reference for various runtime functions available in transformations |
| [Manage Transformations]({{< ref "transformations/manage.md" >}}) | Perform different operations on your transformations like connecting them to destinations, managing notifications, etc |
| [Transformation Libraries]({{< ref "transformations/libraries.md" >}}) | Reuse transformation code with transformation libraries |
| [Transformation Templates]({{< ref "transformations/templates.md" >}}) | Use prebuilt transformations to implement specific use cases on your event data |
| [Manage Transformations using Rudder CLI]({{< ref "transformations/manage-transformations-using-rudder-cli.md" >}}) | Define transformations and libraries as YAML, then validate, test, and apply them through Rudder CLI |
| [Geolocation Service]({{< ref "transformations/geolocation-enrichment.md" >}}) | Leverage transformations to fetch geolocation information from IP address using RudderStack’s geolocation service |
| [Transformation Action]({{< ref "transformations/transformation-action/" >}}) | Create, test, and publish your JavaScript/Python transformations and libraries directly from your development repository |
| [Observability]({{< ref "transformations/observability.md" >}}) | Get full visibility into the transformation-specific metrics including errors |
| [Debugging Errors]({{< ref "transformations/debugging-errors.md" >}}) | Debug various transformation and library errors |
| [FAQ]({{< ref "transformations/faq.md" >}}) | Answers to some of the commonly asked questions on transformations |

