# Javascript Code Execution

Run custom JavaScript scripts directly inside your workflow. Use it for fast data formatting, string manipulation, date operations, or lightweight logic between nodes.

### 1. Add the Module

Add the **JavaScript Code** module to your workflow as an action node.

<figure><img src="/files/03L5BVw6i8mJO72Yul2m" alt=""><figcaption></figcaption></figure>

### 2. Pass Data In Context

In the module configuration panel, add context variables under the **Context** section. Each entry takes a **Name** and a **Value** use the variable picker to map values from upstream nodes.

<figure><img src="/files/yi4fwa3YmAYpre7fh0Rd" alt=""><figcaption></figcaption></figure>

Each context entry becomes a key on `WORKFLOW_CONTEXT` inside your script:

```javascript
function main(WORKFLOW_CONTEXT) {
    const amount = WORKFLOW_CONTEXT.amount;
    const currency = WORKFLOW_CONTEXT.currency;
}
```

### 3. Write Your Script

Your script must define a `main` function. Stacksync automatically injects `WORKFLOW_CONTEXT` as the argument containing all your context values.

```javascript
function main(WORKFLOW_CONTEXT) {
    const amount = WORKFLOW_CONTEXT.amount;
    const currency = WORKFLOW_CONTEXT.currency;
    return {
        amount: amount,
        currency: currency
    };
}
```

### 4. Return Data

Whatever `main` returns becomes the node's output, available to downstream nodes via standard node referencing.

<figure><img src="/files/ug6VHiSysdCj6RgnoBjp" alt=""><figcaption></figcaption></figure>

Reference in downstream nodes:

```
{{ your_module_id.amount }}
{{ your_module_id.currency }}
```

> **Debugging:** `console.log()` output is captured and surfaced under `metadata.stdout` in the execution logs. Use it for debugging, it does not pass data downstream.

### Available Libraries

| Library                     | Use case                    |
| --------------------------- | --------------------------- |
| `dayjs`                     | Date parsing and formatting |
| `moment`                    | Date manipulation           |
| `live-plugin-manager`       | Dynamic module loading      |
| Node.js 23 standard library | All built-in modules        |

> **Note:** You cannot install additional packages at runtime with `npm install`.&#x20;

### Limits

| Limit            | Value                |
| ---------------- | -------------------- |
| Timeout          | 6s                   |
| Memory           | 8 GB                 |
| Filesystem       | Read-only, no writes |
| Runtime packages | Pre-installed only   |

> **Watch out:** Avoid using JavaScript for slow HTTP calls, heavy loops, or large dataset operations as the timeout is 6 seconds, use the Python Code module instead.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.stacksync.com/agentic-workflows/features/code-execution/javascript-code-execution.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
