# Transformations v2


[Transformations]({{< ref "transformations/overview.md" >}}) is one of the most widely used features on the platform, and it just got a major upgrade. **Transformations v2** is now in public beta, with a completely revamped UI/UX plus two significant new capabilities: a more flexible testing suite and full versioning and deployment control — for both transformations and the libraries they import.

{{< announcement >}}
Transformations v2 is in **public beta**. 

See the following guides for more details:

- [Test Transformations]({{< ref "transformations/test.md" >}}) - [Version and Deploy Transformations]({{< ref "transformations/version-deploy.md" >}}) 
- [Version and Publish Libraries]({{< ref "transformations/libraries.md#version-and-publish-libraries" >}})
{{< /announcement >}}

## Why upgrade Transformations?

Transformations sits in the critical path of your event pipeline, so its popularity raised the bar for what this update needed to deliver — a visual refresh alone wouldn't be enough for a feature this central to your data flow. We focused the rebuild on the UI/UX, keeping the parts of the workflow you already know while redefining the areas that needed it most: testing and change management.

Two gaps stood out. First, testing only ever validated a transformation in isolation — a change to a shared library could silently break every transformation that imported it, and you wouldn't find out until events started failing downstream. Second, there was no real change history: publishing was final, with no version trail and no way to recover from a bad deploy without manually redeploying old code.

Transformations v2 closes both gaps — and not just for the people writing transformation code by hand. As more of your transformation logic gets written and maintained by AI agents, the same guardrails that protect a human's changes (draft before publish, tests validated before rollback, inferred library tests) are exactly what let an agent modify and deploy transformation logic safely on your behalf.

## Updates and improvements

- **Revamped UI/UX**: A redesigned editor experience that's familiar where it counts — writing and saving transformation code works the way you'd expect — and redefined where it matters most, with dedicated, purpose-built views for testing and version history.

## New functionality

- **A more flexible testing suite**: Import a live event or a saved payload, edit it inline, and run it against your transformation. Compare **Expected** against **Actual** output in a line-by-line **Diff** view, inspect **Logs** from your `log()` calls, and **Approve** a result to update the expected output, or **Reject** to keep the current expected payload.
- **Inferred testing for libraries**: Libraries don't need their own test cases. Running a test on a library automatically replays every test case from every transformation that imports it, so a breaking library change surfaces immediately — before you publish it — instead of silently breaking transformations downstream.
- **Transformation versioning and deployments**: Save work-in-progress as a **Draft** without touching production. **Publish** a tagged version when you're ready — it becomes **Active** immediately for connected destinations. Every publish is recorded in **Version history** with its code, tag, description, author, and timestamp.
- **Validated rollback**: Deploy an older transformation version back to **Active** status. Your test cases are validated against that version's code first, so you know before you roll back whether it's safe — and you can still deploy anyway if you choose to.
- **Library versioning**: Save drafts and publish tagged library versions the same way. One asymmetry to note: unlike transformations, you can't deploy an older library version directly — publishing a new version is the only way to change what's active.

## Get started

1. Go to **Collect** > **Transformations** in the [RudderStack dashboard](https://app.rudderstack.com/) and open (or create) a transformation.
2. In the **Editor** tab, write your code, then create a test case — import a live event or an existing payload — and click **Run** to validate it.
3. Click **Save draft** to store changes without affecting production, or **Publish** to tag and activate a new version.
4. Open the **Versions** tab to review version history, open an older version in the editor, or **Deploy** it back to **Active**.
5. Libraries follow the same **Editor** and **Versions** workflow. Publish a library version before importing it into a transformation — you can't import a draft.

## Resources

- [Test Transformations]({{< ref "transformations/test.md" >}}): Create test cases, import event payloads, and use the diff view
- [Version and Deploy Transformations]({{< ref "transformations/version-deploy.md" >}}): Save drafts, publish tagged versions, and roll back to an older version
- [Transformation Libraries]({{< ref "transformations/libraries.md" >}}): Add libraries and use them in transformations
- [Version and publish libraries]({{< ref "transformations/libraries.md#version-and-publish-libraries" >}}): Draft, publish, and view library version history
- [Test a library]({{< ref "transformations/libraries.md#test-a-library" >}}): How library tests are inferred from importing transformations

## Screenshots

**Diff view comparing expected and actual transformation output**

{{< image src="images/features/transformations/test-transformations/diff-view.webp" alt="Diff view comparing expected and actual transformation output" >}}

**Publishing a new transformation version**

{{< image src="images/features/transformations/deploy-transformations/publish-new-transformation-version.png" alt="Publish new transformation version modal" >}}

**Transformation version history with the Active badge**

{{< image src="images/features/transformations/deploy-transformations/transformation-version-history.png" alt="Transformation version history with Active version" >}}

**Library version history with the Active badge**

{{< image src="images/features/transformations/deploy-transformations/library-version-history.png" alt="Library version history with Active version" >}}

