> ## Documentation Index
> Fetch the complete documentation index at: https://docs.release0.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Use the Run Script element

> Learn how to execute JavaScript code within your project using the Run Script element in Release0. This guide covers key features, limitations, and examples for effective usage.

The **Run Script** element allows you to execute JavaScript code within your project. Below are its functionalities, limitations, and examples to guide proper usage.

## Key Features

* The **Script** element enables you to execute JavaScript code, but it **does not allow you to create custom visual elements**.
* Variables in the script are **evaluated**, not parsed, so they must be treated as real JavaScript variables.

> **Note**: Use `console.log({{My variable}})` instead of `console.log("{{My variable}}")`.

## `setVariable` Function

### Purpose

If you want to set a variable value with Javascript, the [Set Variable](/editor/elements/logic/set-variable) is more appropriate for most cases. However `setVariable` function allows you to set values within a **Script** element.

### Example

```javascript theme={null}
if ({{My variable}} === 'foo') {
  setVariable('My variable', 'bar');
} else {
  setVariable('My variable', 'other');
}
```

> **Important**:
>
> * The `setVariable` function is **only available in scripts executed on the server**.
> * It **will not work** if the **Execute on client?** option is checked.

## Server-Side Script Limitations

When scripts are executed on the server, they run in a secure, isolated environment. As a result, some JavaScript functionalities are restricted:

### Restricted Functions

* Global functions like `console.log`, `setTimeout`, and `setInterval` are **not available**.
* Importing external libraries using `import` or `require` is **not supported**.
* Browser APIs like `window`, `document`, and `localStorage` are **not accessible**.

### Fetch Behavior

The behavior of the `fetch` function differs from the native implementation:

* The `response` will always be a string, even if the server returns a JSON object.
* You need to manually parse the response using `JSON.parse()`.

#### Examples:

```javascript theme={null}
// ❌ This throws an error
const response = await fetch('https://jsonplaceholder.mycode.com/todos/1');
const data = await response.text();

// ✅ Correct usage
const response = await fetch('https://jsonplaceholder.mycode.com/todos/1');
const data = JSON.parse(response);
```

> **Note**: Avoid using `await response.text()` or `await response.json()`.

## Client-Side Script Execution

If you need access to browser APIs, ensure the **Execute on client?** option is checked. This allows the script to run in the user's browser.

### Examples:

#### Reload Page

```javascript theme={null}
window.location.reload();
```

#### Redirect Based on Variable Value

```javascript theme={null}
if ({{Category}} === 'qualified') {
  window.location.href = 'https://my-site.com';
}
```
