> This page is for Agent Studio.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.moveworks.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.moveworks.com/_mcp/server.

# DSL and Mapper Playground [New]

> **Note**
>
> This page replaces the previous DSL & Mapper Playground documentation. The playground is now built directly into **Moveworks Setup** — no API key or external tooling is required.

## Overview

The **DSL Playground** is an interactive tool in Moveworks Setup for testing **Moveworks DSL expressions** and **Moveworks Data Mappers (Bender)** against a sample payload. Use it to validate rules and mappings before applying them in launch rules, plugin configurations, connectors, or anywhere else Moveworks configuration languages are used.

With the playground you can:

* Evaluate a DSL expression or a Bender data mapper against any JSON payload and see the result instantly.
* Load realistic **sample payloads** (User, Ticket, Catalog Item, Group, and skill contexts) with one click.
* Build DSL rules visually with the **Rule Builder**, or describe a rule in plain English and let AI generate it with **Generate Rule**.
* Browse a built-in, searchable **Function Reference** for both DSL and Mapper functions without leaving the page.

## Accessing the Playground

1. Open **Moveworks Setup**.
2. In the navigation, go to **Troubleshooting & Tools**.
3. Select **DSL Playground**.

## Interface at a Glance

The playground is split into three areas (the top/bottom split is resizable):

| Area                            | What it's for                                                                                                 |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Input Payload** (top left)    | The JSON object your expression or mapper is evaluated against.                                               |
| **Editor** (top right)          | Where you write your DSL expression or Bender mapper. A toggle switches between **DSL** and **Mapper** modes. |
| **Result & Debugging** (bottom) | Shows the evaluated output after you click **Process**, plus any debugging details or error messages.         |

![DSL Playground interface showing the Input Payload, Editor, and Result & Debugging panels](/_fern-img/73dcc5463b66820df9fa4803f1dcfb1a9e0884a2719fb0e2f6a5c98d2319fb68.webp)

A **Reference** button on the top-right header opens the built-in Function Reference drawer.

![Reference button in the DSL Playground header](/_fern-img/2859e219410b5c50414cd3887f4699c01cb592ed3da3578587d17e8ea56bbfd2.webp)

## How To Use

### Step 1: Provide an Input Payload

Every evaluation runs against the JSON in the **Input Payload** panel. You can:

* **Paste your own JSON** — for example, a real payload from an API response or a connector.
* **Load a sample** — click **Insert sample** to choose from built-in objects:
  * **Core:** User, Ticket, Catalog Item, Group
  * **Skill Context:** System Context, Concierge Context, Access DL Context

If you've edited the payload, the playground asks for confirmation before replacing it with a sample.

> **Tip:** The DSL editor's autocomplete is payload-aware — it suggests field paths from your Input Payload. Keep the payload valid JSON to get suggestions.

### Step 2: Write Your Expression

Use the toggle at the top right of the Editor panel to pick a mode:

#### DSL mode

Write a single Moveworks DSL expression, for example:

```javascript
user.email_addr IN ["person@company.com"]
```

The DSL editor provides syntax highlighting, inline validation, and autocomplete based on your Input Payload.

#### Mapper mode

Write a Bender data mapper in YAML or JSON, for example:

```yaml
ticketNumber: ticket.number
```

Or a full mapping structure:

```yaml
requester:
  name: ticket.requested_for.full_name
  email: ticket.requested_for.email_addr
isHighPriority:
  EVAL():
    expression: ticket.priority IN ["P1", "P2"]
```

Switching modes keeps both your expression and your Input Payload intact.

### Step 3: Process and Review Results

Click **Process**. The **Result & Debugging** panel shows:

* **Success:** the evaluated result, formatted for readability.
* **Debugging details:** when available, additional context appears below the result.
* **Errors:** the full error message in red, so you can pinpoint syntax issues or fields that don't resolve.

Iterate freely — adjust the payload or expression and click **Process** again.

## Example

**Goal:** verify a launch-rule-style condition against a sample user.

1. Click **Insert sample** → **Core** → **User**.

2. In DSL mode, enter:

   ```javascript
   user.department == "Engineering" AND user.country_code == "US"
   ```

3. Click **Process**.

4. The Result panel shows `true` or `false` based on the sample user's fields. Edit the payload's `department` value and re-run to see the result change.

## Building Rules Faster (DSL Mode)

### Generate Rule (AI)

Click **Generate Rule** and describe the rule in plain English — for example:

> department is Engineering and priority is P1 or P2

AI generates the DSL expression and inserts it into your editor.

### Rule Builder

Click **Rule Builder** to construct a rule visually without writing DSL by hand:

1. Pick the **Data** to check (autocomplete suggests paths from your payload, e.g. `ticket.status`).
2. Choose an **Operator**.
3. Enter a **Value**. Value handling is smart: numbers, `true`/`false`/`null` stay raw; other text is quoted; lists accept comma-separated values or a list literal like `["a", "b"]`.
4. Click **Add condition** to chain more conditions with **AND**/**OR**.
5. Review the live **Preview**, then click **Insert into editor**. If the editor already has content, you can choose how to combine the new rule with it (AND/OR).

If a data path isn't present in your current Input Payload, the builder flags it with a warning — the rule may not resolve at runtime.

## FAQ

* **Do I need an API key?**
  * No. Unlike the previous playground, the in-product DSL Playground requires no API key or credentials — it uses your existing Moveworks Setup session.
* **Can I test both DSL and Data Mappers?**
  * Yes. Use the **DSL / Mapper** toggle in the Editor panel. Generate Rule and Rule Builder are available in DSL mode only.
* **Why doesn't autocomplete suggest my fields?**
  * Autocomplete reads field paths from the Input Payload. Make sure the payload is valid JSON.
* **Is my work saved?**
  * No. The playground does not currently save evaluation history or expressions — copy anything you want to keep into your configuration.

## Function Reference

Click **Reference** in the header to open a searchable, in-product catalog of functions. Toggle between **DSL** and **Mapper**, and search by function name, signature, description, or example.

**DSL categories:** Stream Operators, String Analysis, String Formatting, String Manipulation, Datetime Manipulation, Type Casting, Approximation Comparators — including functions like `MAP`, `FILTER`, `ANY`, `ALL`, `MATCH`, `LOWERCASE`, `CONCAT`, `SPLIT`, `PARSE_TIME`, `FORMAT_TIME`, `TEXT`, `INTEGER`, `PARSE_JSON`, and more.

**Mapper categories:** Field-Level, Structural, List Manipulation, Branching, String Manipulation — including `OBJECT`, `ARRAY`, `FLATTEN`, `MERGE`, `MAP`, `SORT`, `COALESCE`, `FILTER`, `CONDITIONAL`, `LOOKUP`, `CONCAT`, `RENDER`, `STRIP_HTML`, and more.

Each entry shows the function's description, signature, and a copyable example. Footer links open the full language references in the Moveworks documentation:

* [Moveworks DSL Reference](https://docs.moveworks.com/agent-studio/core-platform/configuration-languages/moveworks-dsl-reference)
* [Moveworks Bender (Data Mapper) Language Reference](https://docs.moveworks.com/agent-studio/core-platform/configuration-languages/moveworks-bender-language-reference)