# Arcweave JSON

Source: https://docs.arcweave.com/integrations/json
Section: Integrations
Description: Structure of Arcweave JSON exports, with single- and multi-language formats, rich text, Arcscript, every object type, and an example

The Arcweave JSON is shallow and fairly easy to understand.

When you [export an Arcweave project as JSON](https://docs.arcweave.com/project-tools/export#export-as-json), the resulting file contains a complete representation of your project's structure and content.

> ✅ You can use the Arcweave JSON when integrating with game engines or import it back into an Arcweave workspace.

> ℹ️ You can [import Arcweave JSON](https://docs.arcweave.com/workspaces/projects#import-a-project) (`.json`) into a Basic, Pro, or Team workspace if you have the **Import projects** permission and the import fits the workspace's project and item limits. Team workspaces can also use the [Import project endpoint of the REST API](https://docs.arcweave.com/rest-api/projects#import-project). Importing [native backup files](https://docs.arcweave.com/workspaces/projects#arcweave-file) (`.arcw`) requires a Pro or Team workspace.

> ⚠️ An import creates a new project without media. Assets, element and component covers, element audio, and Asset List attribute values are not imported; upload and attach them again in the new project. Every item ID (object key) in an imported JSON file must be a UUID (version 4).

When an imported file includes [`exportVersion`](https://docs.arcweave.com/integrations/json#project-level), it must be the number `1`; any other value, including the string `"1"`, makes the import fail. Files without `exportVersion`, such as older exports, are imported as before.

The [REST API JSON export](https://docs.arcweave.com/rest-api/exports#json-export) returns the same format: [single-language JSON](https://docs.arcweave.com/integrations/json#single-language-json) by default, or [multi-language JSON](https://docs.arcweave.com/integrations/json#multi-language-json) with `allLocales=true`. It never includes coordinates.

## Two JSON formats

Context: Arcweave docs > Integrations > Arcweave JSON > Two JSON formats

Arcweave JSON comes in **two possible versions**, depending on whether the export includes **multiple languages** or not (see [Localization](https://docs.arcweave.com/project-tools/localization)). Specifically:

### Single-language JSON

Context: Arcweave docs > Integrations > Arcweave JSON > Two JSON formats > Single-language JSON

The exported JSON file is of the **single-language JSON** format when _either_ of the following is true:

- The [workspace](https://docs.arcweave.com/workspaces/overview) doesn't have **Localization** features. The export contains the project's main language.
- The workspace has **Localization** features, but **Current language** or **Select language** is chosen [during JSON export](https://docs.arcweave.com/project-tools/export#export-languages).

In the single-language JSON:

- **Element title** and **element content** data are nested in the `elements` object at the following paths:
  - `/elements/{elementId}/title`
  - `/elements/{elementId}/content`
- **Label content** data are nested in the `connections` object at `/connections/{connectionId}/label`
- **Component name** data are nested in the `components` object at `/components/{componentId}/name`. The root of the components folder tree is named `Root`.
- The [`contents`](https://docs.arcweave.com/integrations/json#contents) object and the [`locales`](https://docs.arcweave.com/integrations/json#locales) array are omitted.
- Text that has no translation in the exported language is `null`.

**Extract of single-language JSON example**

```json
{
  "elements": {
    "188e6385-85e2-496b-82ac-a81696e7bcab": {
      "content": "<p>You reach a wooden door. In front of you stands a strange man dressed as a medieval crusader.<\/p>",
      "title": "<p>The <span class=\"mention-component mention\" data-id=\"647349ca-9ebb-4d5f-b81e-500761ec1c5a\" data-label=\"Crusader\" data-type=\"component\">Crusader<\/span><\/p>"
    }
  }
}
```

### Multi-language JSON

Context: Arcweave docs > Integrations > Arcweave JSON > Two JSON formats > Multi-language JSON

The exported JSON file is of the **multi-language JSON** format when _both_ of the following are true:

- The [workspace](https://docs.arcweave.com/workspaces/overview) has **Localization** features.
- **All languages** is chosen [during JSON export](https://docs.arcweave.com/project-tools/export#export-languages).

> ℹ️ Selecting **All languages** during export will produce a multi-language JSON file, even if the project has no more than one language.

In the multi-language JSON, a `contents` object is included, nesting the contents of all translatable items in all languages. Specifically:

- **Element title** and **element content** data are nested in the `contents` object, at the following paths:
  - `/contents/{itemId}/title/{languageIsoCode}/text`
  - `/contents/{itemId}/content/{languageIsoCode}/text`
- **Label content** data are nested in the `contents` object at `/contents/{itemId}/label/{languageIsoCode}/text`
- **Component name** data are nested in the `contents` object at `/contents/{itemId}/name/{languageIsoCode}/text`
- Items in the `elements`, `connections`, and `components` objects don't include their title, content, label, or name. To find an item's text, look up the item's ID in `contents`.
- A [`locales`](https://docs.arcweave.com/integrations/json#locales) array lists the project's languages.

## Rich text and Arcscript

Context: Arcweave docs > Integrations > Arcweave JSON > Rich text and Arcscript

Element titles and content, connection labels, note content, and Rich Text Field attribute values are HTML strings:

- [Mentions](https://docs.arcweave.com/project-tools/mentions) appear as `<span>` tags with the `mention` class. Their `data-id` and `data-type` attributes identify the mentioned item.
- [Arcscript segments](https://docs.arcweave.com/project-items/arcscript#arcscript-segments) in element content and labels appear as `<pre><code>…</code></pre>` blocks. The [Arcscript interpreters](https://docs.arcweave.com/integrations/arcscript-interpreters) accept this HTML as input.
- Branch [conditions](https://docs.arcweave.com/integrations/json#conditions) store their Arcscript expression without the `<pre><code>` wrapper.

In single-language JSON, element content and connection labels are simplified: Arcweave removes `style` attributes (such as indentation) from paragraphs, block quotes, and code blocks, and the `data-id`, `spellcheck`, and `class` attributes from code blocks. Element titles and the texts in the multi-language `contents` object keep these attributes, as in the [complete example](https://docs.arcweave.com/integrations/json#complete-example) below.

## JSON structure reference

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference

This section explains how each major part and its properties are organized within the JSON file.

All JSON extracts used from here on are of the **multi-language format**.

Properties marked as optional below are omitted when they don't apply to an item.

### Project-level

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Project-level

At the root level, the JSON includes several top-level properties:

- `exportVersion`: The version of the Arcweave JSON format, currently `1`. [Game engine exports](https://docs.arcweave.com/project-tools/export#export-for-game-engines) don't include it.
- `name`: The project's title
- `startingElement`: The ID of [the element where your story begins](https://docs.arcweave.com/project-tools/play-mode/using-play-mode#set-play-mode-start); `null` if none
- `cover`: An object containing the [project's cover](https://docs.arcweave.com/workspaces/projects#project-cover) info; `null` if the project has no cover
  - `file`: The cover image's file name, including its extension. For an uploaded cover, Arcweave generates this name. When you export with [Include assets](https://docs.arcweave.com/project-tools/export#include-assets), the `.zip` file's `cover` folder contains the image under this name.
  - `type`: `cover-image` for a cover you uploaded, or `template-image` for a cover provided by a [project template](https://docs.arcweave.com/workspaces/projects#project-templates)

**Extract of JSON example**

```json
{
  "exportVersion": 1,
  "name": "Game Engine Example",
  "startingElement": null,
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}
```

### Boards

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Boards

The `boards` object contains references to all [boards](https://docs.arcweave.com/project-items/boards) and [board folders](https://docs.arcweave.com/project-items/boards#board-folders) of the project by their ID and it includes the following properties:

- A **folder** (including the Root): Identified by having a `children` array that references other board and folder IDs. The Root folder is distinguished by a `root: true` property and is named `Root`.
- A **board**: Has a custom ID and arrays referencing the IDs of items owned by or placed on that board:
  - `customId`: The stable, editable ID used as an Arcscript variable scope
  - `attributes`: Array of [attribute](https://docs.arcweave.com/integrations/json#attributes) IDs owned by the board (optional)
  - `notes`: Array of [note](https://docs.arcweave.com/project-items/notes) IDs
  - `elements`: Array of [element](https://docs.arcweave.com/project-items/elements) IDs
  - `branches`: Array of [branch](https://docs.arcweave.com/project-items/branches) IDs
  - `jumpers`: Array of [jumper](https://docs.arcweave.com/project-items/jumpers) IDs
  - `connections`: Array of [connection](https://docs.arcweave.com/project-items/connections) IDs

All boards and folders have a `name` property identifying them.

**Extract of JSON example**

```json
"boards": {
    "733b1cc4-6d51-4ad6-9fba-444b4f2d98f3": {
      "name": "Dialogues",
      "children": ["ef8116b9-c38d-473d-9c0a-600bc37a010d"]
    },
    "2ad15ff6-f2ba-4f1d-9d9d-68938c683d7e": {
      "name": "Root",
      "root": true,
      "children": ["733b1cc4-6d51-4ad6-9fba-444b4f2d98f3"]
    },
    "ef8116b9-c38d-473d-9c0a-600bc37a010d": {
      "name": "Wanda Dialogue",
      "customId": "wanda_dialogue",
      "attributes": ["6b00c0d0-2e3e-4c70-8629-825faac22be3"],
      "notes": ["d974242a-a65d-4bd6-8670-24c6b02a487f"],
      "jumpers": ["28e3009a-e164-4679-92c3-977615b1eb4b"],
      "branches": ["0d845415-33d5-4486-9514-32b88e17e6b2"],
      "elements": ["5265ceac-f13f-47fc-a02c-6eda7eea6b90"],
      "connections": [
        "8a89cabd-7542-48db-b501-3c0019145989",
        "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd"
      ]
    }
  },
```

### Notes

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Notes

The `notes` object contains references to all [notes](https://docs.arcweave.com/project-items/notes) of the project by their ID and it includes the following properties:

- `theme`: The note's [color theme](https://docs.arcweave.com/project-items/notes#change-color-theme) (e.g., `cyan`, `moss`; see [Color themes](https://docs.arcweave.com/rest-api/overview#color-themes) for all values)
- `content`: HTML-formatted text content
- `x` and `y`: The board coordinates of the note (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)
- `width` and `height`: The dimensions of the note (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)
- `autoHeight`: Boolean indicating whether the note [automatically adjusts its height](https://docs.arcweave.com/project-items/notes#resize-notes) to the size of its content (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)

**Extract of JSON example**

```json
"notes": {
    "d974242a-a65d-4bd6-8670-24c6b02a487f": {
      "theme": "cyan",
      "content": "<p>We've given dialogue starting elements a custom element attribute.<\/p>"
    }
  },
```

### Elements

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Elements

The `elements` object stores references to all [elements](https://docs.arcweave.com/project-items/elements) of the project by their ID and it includes the following properties:

- `theme`: The element's [color theme](https://docs.arcweave.com/project-items/elements#change-element-theme) (e.g., `cyan`, `moss`)
- `outputs`: Array of [connection](https://docs.arcweave.com/project-items/connections) IDs originating from this element
- `attributes`: Array of custom [attribute](https://docs.arcweave.com/project-items/attributes) IDs attached to this element (optional)
- `components`: Array of [component](https://docs.arcweave.com/project-items/components) IDs attached to this element
- `assets`: The element's [cover](https://docs.arcweave.com/project-items/elements#element-covers) and [audio attachments](https://docs.arcweave.com/project-items/elements#audio-attachments) (optional):
  - `cover`: An object whose `type` is one of the following:
    - `image` or `template-image`: An image asset, referenced by its `id`
    - `video` or `template-video`: A video asset, referenced by its `id`, with optional playback settings `mode` (`once`, `loop`, or `stop`), `autoplay`, `showOptions`, and `showControls`
    - `icon`: An icon from the [icon library](https://docs.arcweave.com/project-tools/icon-library), identified by `file`
    - `youtube`: A YouTube embed, with its `url` and optional `autoplay` and `showControls` settings
  - `audio`: Array of attached [audio references](https://docs.arcweave.com/project-items/assets/audio#audio-reference-settings). Each entry has its own `id`, the audio asset's ID in `asset`, the playback `mode` (`once`, `loop`, or `stop`), and a `delay` in milliseconds. Optional `volume` (`0` to `1`), `fadeIn`, and `fadeOut` (milliseconds) override the asset's values; when omitted, the asset's values apply. `autoStopOnExit` is `true` when the audio stops as Play Mode leaves the element.
- `linkedBoard`: The ID of a board linked to this element (optional)
- `x` and `y`: The board coordinates of the element (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)
- `width` and `height`: The dimensions of the element (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)
- `autoHeight`: Boolean indicating whether the element [automatically adjusts its height](https://docs.arcweave.com/project-items/elements#resize-elements) to the size of its content (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)

The `components` and `outputs` properties are optional. When there are no attached components or outgoing connections, the corresponding property can be an empty array (`[]`) or absent. Treat either as an empty list.

> ⚠️ The properties `x`, `y`, `width`, `height`, and `autoHeight` are included in the JSON only if [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during JSON export.

Regarding **element title** and **element content** data, they are stored in the following ways:

- In [single-language JSON](https://docs.arcweave.com/integrations/json#single-language-json) files, they are nested in the `elements` object.
- In [multi-language JSON](https://docs.arcweave.com/integrations/json#multi-language-json) files, they are nested in the [`contents` object](https://docs.arcweave.com/integrations/json#contents), under the element's ID.

**Extract of multi-language JSON example**

```json
  "elements": {
    "5265ceac-f13f-47fc-a02c-6eda7eea6b90": {
      "theme": "cyan",
      "outputs": ["8a89cabd-7542-48db-b501-3c0019145989"],
      "attributes": ["11006864-6f66-4c2c-a3b7-d3fae8febc42"],
      "components": ["647349ca-9ebb-4d5f-b81e-500761ec1c5a"]
    }
  },
```

### Jumpers

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Jumpers

The `jumpers` object contains references to all [jumpers](https://docs.arcweave.com/project-items/jumpers) of the project by their ID and it includes the following properties:

- `elementId`: The ID of the target element this jumper points to
- `x` and `y`: The board coordinates of the jumper (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)

**Extract of JSON example**

```json
"jumpers": {
    "28e3009a-e164-4679-92c3-977615b1eb4b": {
      "elementId": "5265ceac-f13f-47fc-a02c-6eda7eea6b90"
    }
  },
```

### Connections

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Connections

The `connections` object contains references to all [connections](https://docs.arcweave.com/project-items/connections) of the project by their ID and it includes the following properties:

- `type`: The visual style of the connection: `Straight`, `Bezier`, or `Flowchart`
- `theme`: Color theme
- `sourceid`: ID of the originating item
- `targetid`: ID of the destination item
- `sourceType`: Type of source item: `elements` or `conditions`
- `targetType`: Type of target item: `elements`, `branches`, or `jumpers`
- `sourceFace` and `targetFace`: The side of the source or target item that the connection attaches to: `left`, `right`, `top`, or `bottom` (optional)
- `labelLocation`: The label's relative position along the connection, from `0` to `1` (optional)
- `labelWidth`: The label's width (optional)
- `waypoints`: For a `Flowchart` connection with a [customized path](https://docs.arcweave.com/project-items/connections#edit-connection-paths), an ordered array of `x` and `y` points in board coordinates (optional; present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)
- `controlPoints`: For a customized `Bezier` connection, an object with `source` and `target` points, each an `x` and `y` offset from the point where the connection attaches to that item (optional; present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)

Regarding **label content** data, they are stored in the following way:

- In [single-language JSON](https://docs.arcweave.com/integrations/json#single-language-json) files, they are nested in the `connections` object.
- In [multi-language JSON](https://docs.arcweave.com/integrations/json#multi-language-json) files, they are nested in the [`contents` object](https://docs.arcweave.com/integrations/json#contents), under the connection's ID.

**Extract of multi-language JSON example**

```json
"connections": {
    "8a89cabd-7542-48db-b501-3c0019145989": {
      "type": "Straight",
      "theme": "moss",
      "sourceid": "5265ceac-f13f-47fc-a02c-6eda7eea6b90",
      "targetid": "0d845415-33d5-4486-9514-32b88e17e6b2",
      "sourceType": "elements",
      "targetFace": "left",
      "targetType": "branches"
    },
    "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd": {
      "targetType": "jumpers",
      "type": "Straight",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "f8e12e95-43b7-4d42-9844-5402665b24ef",
      "theme": "moss",
      "sourceType": "conditions"
    }
  },
```

### Branches

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Branches

The `branches` object contains references to all [branches](https://docs.arcweave.com/project-items/branches) of the project by their ID and it includes the following properties:

- `theme`: Color theme
- `conditions`: An object defining conditional expressions:
  - `ifCondition`: The ID of the branch's `if` condition
  - `elseIfConditions`: An array of the branch's `elseif` condition IDs, in order (optional)
  - `elseCondition`: The ID of the branch's `else` condition (optional)
- `x` and `y`: The board coordinates of the branch (present only when [Include coordinates](https://docs.arcweave.com/project-tools/export#include-coordinates) is selected during export)

**Extract of JSON example**

```json
"branches": {
    "0d845415-33d5-4486-9514-32b88e17e6b2": {
      "theme": "moss",
      "conditions": {
        "ifCondition": "f8e12e95-43b7-4d42-9844-5402665b24ef",
        "elseIfConditions": ["e3234e1e-74f9-45d5-be30-994bf5b3bc7c"],
        "elseCondition": "0d91c8a3-7704-423e-b3f6-046973eb15a7"
      }
    }
  },
```

### Conditions

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Conditions

The `conditions` object contains references to all branch conditions of the project (see [Branches](https://docs.arcweave.com/project-items/branches)) by their ID and it includes the following properties:

- `output`: The ID of the condition's output [connection](https://docs.arcweave.com/project-items/connections)
- `script`: The Arcscript [expression](https://docs.arcweave.com/project-items/arcscript#expressions) being evaluated to determine if the condition is met (`null` for `else` conditions). The script isn't wrapped in `<pre><code>` tags, and [mentions](https://docs.arcweave.com/project-tools/mentions), such as an element passed to `visits()`, appear as HTML `<span>` tags. To evaluate a script with an [Arcscript interpreter](https://docs.arcweave.com/integrations/arcscript-interpreters), wrap it in `<pre><code>` and `</code></pre>` first.

**Extract of JSON example**

```json
"conditions": {
    "f8e12e95-43b7-4d42-9844-5402665b24ef": {
      "output": "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd",
      "script": "have_potion"
    }
  },
```

### Contents

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Contents

The `contents` object is central to Arcweave's [localization](https://docs.arcweave.com/project-tools/localization) system. It contains the content of all translatable project items:

- [Elements](https://docs.arcweave.com/project-items/elements): Title and content, referenced by the element ID
- [Components](https://docs.arcweave.com/project-items/components) and component folders: Name, referenced by the component or folder ID. The Root of the components folder tree has no entry.
- [Labels](https://docs.arcweave.com/project-items/labels): Content (property `label`), referenced by the label's [connection](https://docs.arcweave.com/project-items/connections) ID.

> ⚠️ The single-language JSON format _does not_ include the `contents` object. See [Two JSON formats](https://docs.arcweave.com/integrations/json#two-json-formats) above, for the distinction between single-language and multi-language JSON.

Each entry of the `contents` object can include the following properties:

- `title`: For element title only, organized by locale (e.g., `en`, `es`)
- `content`: For element content only, organized by locale
- `name`: For component name only, organized by locale
- `label`: For connection label content only, organized by locale
- `_status`: [Translation status](https://docs.arcweave.com/project-tools/localization#translation-status) for each translated locale: `untranslated`, `progress` (**In progress**), `review` (**For review**), or `final`. The main language has no status. Component folders have no `_status`.

Each localized field contains a `text` property with the actual content. A missing locale or a `null` text means the item has no text in that language.

**Extract of JSON example**

```json
"contents": {
    "5265ceac-f13f-47fc-a02c-6eda7eea6b90": {
      "title": {
        "en": {
          "text": "<p>Starting loop<\/p>"
        }
      },
      "content": {
        "en": {
          "text": "<p style=\"margin-left: 20px\">Help me, Stranger.... I am wounded...<\/p>"
        },
        "es": {
          "text": "<p style=\"margin-left: 20px\">\u00a1Ay\u00fadame, por favor! \u00a1Estoy herido!<\/p>"
        }
      },
      "_status": {
        "es": "review",
        "elf": "untranslated"
      }
    },
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "name": {
        "en": {
          "text": "Characters"
        }
      }
    },
    "647349ca-9ebb-4d5f-b81e-500761ec1c5a": {
      "name": {
        "en": {
          "text": "Wanda Elandor"
        }
      },
      "_status": {
        "es": "review",
        "elf": "untranslated"
      }
    },
    "8a89cabd-7542-48db-b501-3c0019145989": {
      "label": {
        "en": {
          "text": "<p>Give potion<\/p>"
        },
        "es": {
          "text": "<p>Dar poci\u00f3n<\/p>"
        }
      },
      "_status": {
        "es": "final",
        "elf": "untranslated"
      }
    }
  },
```

### Components

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Components

The `components` object contains references to all [components](https://docs.arcweave.com/project-items/components) and [component folders](https://docs.arcweave.com/project-items/components#component-folders) of the project by their ID and it includes the following properties:

- `root`: Boolean indicating if this is the root of the components folder tree
- `children`: Array of child component and folder IDs (applies to component folders only)
- `customId`: Stable, editable ID used as an Arcscript variable scope (applies to components only)
- `assets`: The component's [cover](https://docs.arcweave.com/project-items/components#cover) (optional). Its `cover` object references an image asset by `id` (with an optional `type` of `image` or `template-image`), or an icon from the [icon library](https://docs.arcweave.com/project-tools/icon-library) by `file` (with `type` set to `icon`).
- `attributes`: Array of custom attribute IDs (applies to components only)

Regarding **component name** data, they are stored in the following way:

- In [single-language JSON](https://docs.arcweave.com/integrations/json#single-language-json) files, they are nested in the `components` object.
- In [multi-language JSON](https://docs.arcweave.com/integrations/json#multi-language-json) files, they are nested in the [`contents` object](https://docs.arcweave.com/integrations/json#contents), under the component's ID.

**Extract of JSON example**

```json
"components": {
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "children": [
        "3846c37c-07a1-4c04-98e2-26cd026295d1",
        "647349ca-9ebb-4d5f-b81e-500761ec1c5a"
      ]
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "customId": "drake_miles",
      "assets": {
        "cover": {
          "id": "190e9e72-32e9-4c51-adbb-dbad343134fc"
        }
      },
      "attributes": ["22780ff3-64a2-40e8-a2e4-e753809c020a"]
    },
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "root": true,
      "children": ["036db898-0cb9-4a29-b19d-3e8f3288d9a2"]
    }
  },
```

### Attributes

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Attributes

The `attributes` object contains references to all [attributes](https://docs.arcweave.com/project-items/attributes) of the project by their ID and it includes the following properties:

- `cId`: The ID of the parent [board](https://docs.arcweave.com/project-items/boards), [component](https://docs.arcweave.com/project-items/components), or [element](https://docs.arcweave.com/project-items/elements)
- `name`: The attribute's name
- `customId`: The Arcscript variable name for eligible board/component attributes (optional)
- `cType`: The type of parent (`boards`, `components`, or `elements`)
- `value`: An object containing:
  - `type`: The attribute's data type:
    - `string`: A String Field or Rich Text Field
    - `boolean`, `integer`, or `float`: A Boolean, Integer, or Float attribute (boards and components only)
    - `component-list`: A Component List
    - `asset-list`: An Asset List
  - `data`: The actual value. String Field values are plain text and Rich Text Field values are HTML; an empty string attribute is `null`. Component and Asset Lists contain arrays of component or asset IDs.
  - `plain`: For `string` values, `true` for a String Field. Rich Text Field values have `plain` set to `false` or omitted.

String attributes with `plain: true`, as well as Boolean, Integer, and Float attributes, become scoped variables only when both the attribute and its owning board/component have a `customId`. The attribute object's key remains its stable internal ID.

**Extract of JSON example**

```json
"attributes": {
    "6b00c0d0-2e3e-4c70-8629-825faac22be3": {
      "cId": "ef8116b9-c38d-473d-9c0a-600bc37a010d",
      "cType": "boards",
      "name": "Message",
      "customId": "message",
      "value": {
        "data": "Welcome",
        "type": "string",
        "plain": true
      }
    },
    "11006864-6f66-4c2c-a3b7-d3fae8febc42": {
      "cId": "5265ceac-f13f-47fc-a02c-6eda7eea6b90",
      "name": "tag",
      "cType": "elements",
      "value": {
        "data": "dialogue_start",
        "type": "string",
        "plain": true
      }
    },
    "22780ff3-64a2-40e8-a2e4-e753809c020a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "obj_id",
      "customId": "obj_id",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "type": "string",
        "plain": true
      }
    }
  },
```

### Assets

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Assets

The `assets` object contains references to all [assets](https://docs.arcweave.com/project-items/assets/overview) and [asset folders](https://docs.arcweave.com/project-items/assets/overview#asset-folders) of the project by their ID and it includes the following properties:

- `name`: The asset's name followed by its file extension, such as `player.png`; for asset folders, the folder name. The Root folder has no name.
- `type`: The asset type; one of the following:
  - `image`: [Image asset](https://docs.arcweave.com/project-items/assets/images) uploaded by the user
  - `audio`: [Audio asset](https://docs.arcweave.com/project-items/assets/audio) uploaded by the user
  - `video`: [Video asset](https://docs.arcweave.com/project-items/assets/video) uploaded by the user
  - `template-image`: Image asset instantiated during [project template](https://docs.arcweave.com/workspaces/projects#project-templates) recreation
  - `template-audio`: Audio asset instantiated during project template recreation
  - `template-video`: Video asset instantiated during project template recreation
- `volume`: For audio and video assets, the playback volume from `0` to `1` (optional)
- `fadeIn` and `fadeOut`: For audio assets, the default fade durations in milliseconds, used by audio references that don't override them (optional)
- `root`: Boolean indicating if this is the root of the assets folder tree
- `children`: Array of asset and folder IDs (applies to asset folders only)

> ℹ️ The JSON references assets by ID and name only; it doesn't include the files. To download the files, export with [Include assets](https://docs.arcweave.com/project-tools/export#include-assets). In the `.zip` file, the `assets` folder recreates the project's folder structure and names each file after its asset `name`.

**Extract of JSON example**

```json
"assets": {
    "190e9e72-32e9-4c51-adbb-dbad343134fc": {
      "name": "player.png",
      "type": "template-image"
    },
    "647d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "4de16200-4175-4aff-b753-3d40ff849289",
        "190e9e72-32e9-4c51-adbb-dbad343134fc",
        "fd70f4a4-578f-442f-9e5c-78872289818f"
      ]
    }
  },
```

### Variables

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Variables

The `variables` object contains project-level [global variables](https://docs.arcweave.com/project-items/variables/global) by their ID. Board and component variables are stored in the [`attributes`](https://docs.arcweave.com/integrations/json#attributes) object instead, using String values with `plain: true`, or Boolean, Integer, or Float values.

- `name`: The variable name
- `type`: The variable data type: `string`, `integer`, `float`, or `boolean`
- `value`: The variable's initial value
- `cType`: `global` for a global variable
- `root`: `true` for the root entry, which lists the global variables instead of defining one
- `children`: Array of the global variable IDs (applies to the root entry only)

**Extract of JSON example**

```json
"variables": {
    "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228": {
      "name": "have_potion",
      "type": "boolean",
      "value": false,
      "cType": "global"
    },
    "747d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "990d6321-43cb-430b-84bd-6b48c574c489",
        "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228"
      ]
    },
    "990d6321-43cb-430b-84bd-6b48c574c489": {
      "name": "healer_health",
      "type": "integer",
      "value": 50,
      "cType": "global"
    }
  },
```

### Locales

Context: Arcweave docs > Integrations > Arcweave JSON > JSON structure reference > Locales

The `locales` array defines available languages used by Arcweave's [localization](https://docs.arcweave.com/project-tools/localization) features. It is included only in [multi-language JSON](https://docs.arcweave.com/integrations/json#multi-language-json). The included properties are:

- `name`: The language name
- `iso`: The ISO language code (e.g., `en`, `es`)
- `base`: The language set as the one used to **translate from** (`null` for the [main language](https://docs.arcweave.com/project-tools/localization#set-main-language))

Translation content is distributed throughout the `contents` object, where each localizable item contains nested objects for each locale, along with a `_status` object tracking translation progress.

**Extract of JSON example**

```json
"locales": [
    {
      "name": "English",
      "iso": "en",
      "base": null
    },
    {
      "name": "Spanish",
      "iso": "es",
      "base": "en"
    }
  ]
```

## Complete example

Context: Arcweave docs > Integrations > Arcweave JSON > Complete example

To illustrate the structure of Arcweave's JSON format, the following is a complete `.json` file exported from a simplified version of the [Game Engine Example](https://docs.arcweave.com/workspaces/projects#project-templates) project template, with **All languages** and **Include coordinates** selected.

**Example JSON**

```json
{
  "exportVersion": 1,
  "startingElement": "ddc209cc-7832-4ff6-ae1f-4eea592d07d4",
  "boards": {
    "1c11fa2a-f76c-4be7-aac4-6bf92a63240f": {
      "name": "Dialogue",
      "customId": "dialogue",
      "notes": ["034133c4-42d2-45af-9db6-351eadfd5a1e"],
      "jumpers": ["49be178c-30a9-4160-b065-1a72e3626a65"],
      "branches": ["bce80b17-0165-41a2-a29d-e814f6e9f110"],
      "elements": [
        "540d5fc7-aa78-4b1a-8c11-bc2d4dc24ba9",
        "ddc209cc-7832-4ff6-ae1f-4eea592d07d4",
        "d852a577-bd1f-44cf-8187-77a86f97baef",
        "3eb1ee28-19fe-4e1f-b71b-07ec622e8fbc"
      ],
      "connections": [
        "57572c19-ca11-4223-bdb7-718971ef7951",
        "90872a7c-0f63-472b-8330-a6b14d824aeb",
        "9b1224a4-5546-4f81-96c7-a1865c618291",
        "0879ddb5-e1a2-4b95-a28c-d4df8df845e9",
        "0828bb7f-3a2b-4121-bff6-affe5c77d55d",
        "4a9530d7-9b4e-48c8-b9a7-4682db61647a"
      ]
    },
    "2ad15ff6-f2ba-4f1d-9d9d-68938c683d7e": {
      "name": "Root",
      "root": true,
      "children": ["1c11fa2a-f76c-4be7-aac4-6bf92a63240f"]
    }
  },
  "notes": {
    "034133c4-42d2-45af-9db6-351eadfd5a1e": {
      "x": 10180,
      "y": 10540,
      "theme": "cyan",
      "width": 301,
      "height": 106,
      "content": "<p>We've given dialogue starting elements a custom element attribute:<\/p><p><strong>tag: dialogue_start<\/strong><\/p>",
      "autoHeight": true
    }
  },
  "elements": {
    "3eb1ee28-19fe-4e1f-b71b-07ec622e8fbc": {
      "width": 301,
      "y": 10744,
      "x": 11128,
      "components": ["3846c37c-07a1-4c04-98e2-26cd026295d1"],
      "height": 185,
      "autoHeight": true,
      "theme": "moss",
      "outputs": ["4a9530d7-9b4e-48c8-b9a7-4682db61647a"]
    },
    "ddc209cc-7832-4ff6-ae1f-4eea592d07d4": {
      "x": 10055,
      "y": 10727,
      "theme": "cyan",
      "width": 294,
      "height": 121,
      "outputs": ["0879ddb5-e1a2-4b95-a28c-d4df8df845e9"],
      "attributes": ["955b9b0d-372a-45d9-a68f-33ddfebf2bf6"],
      "autoHeight": true,
      "components": []
    },
    "540d5fc7-aa78-4b1a-8c11-bc2d4dc24ba9": {
      "x": 11120,
      "y": 10340,
      "theme": "moss",
      "width": 301,
      "height": 185,
      "outputs": ["90872a7c-0f63-472b-8330-a6b14d824aeb"],
      "autoHeight": true,
      "components": ["3846c37c-07a1-4c04-98e2-26cd026295d1"]
    },
    "d852a577-bd1f-44cf-8187-77a86f97baef": {
      "x": 11607,
      "y": 10318,
      "theme": "moss",
      "width": 301,
      "height": 253,
      "outputs": ["9b1224a4-5546-4f81-96c7-a1865c618291"],
      "attributes": ["45a15656-47e5-463a-a3ed-c508965e6010"],
      "autoHeight": true,
      "components": ["82820a96-708d-4a05-b2aa-21e8d582d5de"]
    }
  },
  "jumpers": {
    "49be178c-30a9-4160-b065-1a72e3626a65": {
      "x": 12340,
      "y": 10820,
      "elementId": "ddc209cc-7832-4ff6-ae1f-4eea592d07d4"
    }
  },
  "connections": {
    "4a9530d7-9b4e-48c8-b9a7-4682db61647a": {
      "targetType": "jumpers",
      "type": "Bezier",
      "targetid": "49be178c-30a9-4160-b065-1a72e3626a65",
      "sourceType": "elements",
      "sourceid": "3eb1ee28-19fe-4e1f-b71b-07ec622e8fbc",
      "theme": "default"
    },
    "0828bb7f-3a2b-4121-bff6-affe5c77d55d": {
      "targetType": "elements",
      "type": "Bezier",
      "targetid": "3eb1ee28-19fe-4e1f-b71b-07ec622e8fbc",
      "sourceType": "conditions",
      "sourceid": "d24a6cbe-85fb-4059-8867-fa8ba0af6aa0",
      "theme": "default",
      "labelLocation": 0.5
    },
    "0879ddb5-e1a2-4b95-a28c-d4df8df845e9": {
      "type": "Straight",
      "theme": "default",
      "sourceid": "ddc209cc-7832-4ff6-ae1f-4eea592d07d4",
      "targetid": "bce80b17-0165-41a2-a29d-e814f6e9f110",
      "sourceType": "elements",
      "targetType": "branches"
    },
    "9b1224a4-5546-4f81-96c7-a1865c618291": {
      "type": "Straight",
      "theme": "moss",
      "sourceid": "d852a577-bd1f-44cf-8187-77a86f97baef",
      "targetid": "49be178c-30a9-4160-b065-1a72e3626a65",
      "sourceType": "elements",
      "targetType": "jumpers"
    },
    "90872a7c-0f63-472b-8330-a6b14d824aeb": {
      "type": "Straight",
      "theme": "moss",
      "sourceid": "540d5fc7-aa78-4b1a-8c11-bc2d4dc24ba9",
      "targetid": "d852a577-bd1f-44cf-8187-77a86f97baef",
      "sourceType": "elements",
      "targetFace": "left",
      "targetType": "elements"
    },
    "57572c19-ca11-4223-bdb7-718971ef7951": {
      "type": "Straight",
      "theme": "moss",
      "sourceid": "66acc3a7-454a-43db-a923-1b0d3cb17805",
      "targetid": "540d5fc7-aa78-4b1a-8c11-bc2d4dc24ba9",
      "sourceType": "conditions",
      "targetFace": "left",
      "targetType": "elements"
    }
  },
  "branches": {
    "bce80b17-0165-41a2-a29d-e814f6e9f110": {
      "x": 10580,
      "y": 10740,
      "theme": "default",
      "conditions": {
        "ifCondition": "66acc3a7-454a-43db-a923-1b0d3cb17805",
        "elseCondition": "d24a6cbe-85fb-4059-8867-fa8ba0af6aa0"
      }
    }
  },
  "contents": {
    "82820a96-708d-4a05-b2aa-21e8d582d5de": {
      "name": {
        "en": {
          "text": "Healer"
        },
        "it": {
          "text": "Guaritore"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "540d5fc7-aa78-4b1a-8c11-bc2d4dc24ba9": {
      "title": {
        "en": {
          "text": "<p>Ask for help (successfully)<\/p>"
        },
        "it": {
          "text": "<p>Chiedere aiuto (con successo)<\/p>"
        }
      },
      "content": {
        "en": {
          "text": "<p>Someone's hurt! Can you help?<\/p>"
        },
        "it": {
          "text": "<p>Qualcuno \u00e8 ferito! Puoi aiutare?<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "name": {
        "en": {
          "text": "Characters"
        }
      }
    },
    "3eb1ee28-19fe-4e1f-b71b-07ec622e8fbc": {
      "content": {
        "en": {
          "text": "<p>Oops, wrong turn. Bye!<\/p>"
        },
        "it": {
          "text": "<p>Ops, svolta sbagliata. Ciao!<\/p>"
        }
      },
      "title": {
        "en": {
          "text": "<p>Bye now<\/p>"
        },
        "it": {
          "text": "<p>Ciao<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "9b1224a4-5546-4f81-96c7-a1865c618291": {
      "label": {
        "en": {
          "text": "<p>[Back]<\/p>"
        },
        "it": {
          "text": "<p>[Indietro]<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "name": {
        "en": {
          "text": "Drake Miles"
        },
        "it": {
          "text": "Drake Miles"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "57572c19-ca11-4223-bdb7-718971ef7951": {
      "label": {
        "en": {
          "text": "<p>Ask for help<\/p>"
        },
        "it": {
          "text": "<p>Chiedi aiuto<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "ddc209cc-7832-4ff6-ae1f-4eea592d07d4": {
      "title": {
        "en": {
          "text": "<p>Start<\/p>"
        },
        "it": {
          "text": "<p>Inizio<\/p>"
        }
      },
      "content": {
        "en": {
          "text": "<p>An old man is standing by a stone cottage.<\/p>"
        },
        "it": {
          "text": "<p>Un vecchio \u00e8 in piedi accanto a una casetta di pietra.<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    },
    "d852a577-bd1f-44cf-8187-77a86f97baef": {
      "title": {
        "en": {
          "text": "<p>Get potion<\/p>"
        },
        "it": {
          "text": "<p>Prendi la pozione<\/p>"
        }
      },
      "content": {
        "en": {
          "text": "<pre data-id=\"de116a8d-1ef6-4150-a60e-42bcbd2b9016\" spellcheck=\"false\"><code class=\"language-arcscript\">have_potion = true<\/code><\/pre><p>Oh my! But of course! Here, take this <strong>healing potion<\/strong>.<\/p>"
        },
        "it": {
          "text": "<pre data-id=\"de116a8d-1ef6-4150-a60e-42bcbd2b9016\" spellcheck=\"false\"><code class=\"language-arcscript\">have_potion = true<\/code><\/pre><p>Oh mio Dio! Ma ovviamente! Ecco, prendi questa pozione curativa.<\/p>"
        }
      },
      "_status": {
        "it": "final"
      }
    }
  },
  "components": {
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "children": [
        "3846c37c-07a1-4c04-98e2-26cd026295d1",
        "82820a96-708d-4a05-b2aa-21e8d582d5de"
      ]
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "customId": "drake_miles",
      "assets": {
        "cover": {
          "id": "190e9e72-32e9-4c51-adbb-dbad343134fc"
        }
      },
      "attributes": [
        "9d863621-49d6-4f34-a893-20dd24645345",
        "5f504b6a-8dfd-4a32-b1b2-e45cb1772e8a",
        "22780ff3-64a2-40e8-a2e4-e753809c020a"
      ]
    },
    "82820a96-708d-4a05-b2aa-21e8d582d5de": {
      "customId": "healer",
      "assets": {
        "cover": {
          "id": "4de16200-4175-4aff-b753-3d40ff849289"
        }
      },
      "attributes": [
        "b36b6cc2-7dab-4582-b420-7e470ceb90d4",
        "96cefbf8-2c24-424c-9538-3533e52d38c6",
        "5efdbbc2-5a4d-4fb9-bb9b-994e1b4bb35c"
      ]
    },
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "root": true,
      "children": ["036db898-0cb9-4a29-b19d-3e8f3288d9a2"]
    }
  },
  "attributes": {
    "5f504b6a-8dfd-4a32-b1b2-e45cb1772e8a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "Race",
      "customId": "race",
      "cType": "components",
      "value": {
        "data": "Human",
        "type": "string",
        "plain": true
      }
    },
    "b36b6cc2-7dab-4582-b420-7e470ceb90d4": {
      "cId": "82820a96-708d-4a05-b2aa-21e8d582d5de",
      "name": "Color",
      "customId": "color",
      "cType": "components",
      "value": {
        "data": "Red",
        "type": "string",
        "plain": true
      }
    },
    "22780ff3-64a2-40e8-a2e4-e753809c020a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "obj_id",
      "customId": "obj_id",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "type": "string",
        "plain": true
      }
    },
    "96cefbf8-2c24-424c-9538-3533e52d38c6": {
      "cId": "82820a96-708d-4a05-b2aa-21e8d582d5de",
      "name": "Race",
      "customId": "race",
      "cType": "components",
      "value": {
        "data": "Human",
        "type": "string",
        "plain": true
      }
    },
    "45a15656-47e5-463a-a3ed-c508965e6010": {
      "cId": "d852a577-bd1f-44cf-8187-77a86f97baef",
      "name": "tag",
      "cType": "elements",
      "value": {
        "data": "dialogue_end",
        "type": "string",
        "plain": true
      }
    },
    "9d863621-49d6-4f34-a893-20dd24645345": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "Color",
      "customId": "color",
      "cType": "components",
      "value": {
        "data": "Brown",
        "type": "string",
        "plain": true
      }
    },
    "5efdbbc2-5a4d-4fb9-bb9b-994e1b4bb35c": {
      "cId": "82820a96-708d-4a05-b2aa-21e8d582d5de",
      "name": "obj_id",
      "customId": "obj_id",
      "cType": "components",
      "value": {
        "data": "HEALER",
        "type": "string",
        "plain": true
      }
    },
    "955b9b0d-372a-45d9-a68f-33ddfebf2bf6": {
      "cId": "ddc209cc-7832-4ff6-ae1f-4eea592d07d4",
      "name": "tag",
      "cType": "elements",
      "value": {
        "data": "dialogue_start",
        "type": "string",
        "plain": true
      }
    }
  },
  "assets": {
    "190e9e72-32e9-4c51-adbb-dbad343134fc": {
      "name": "player.png",
      "type": "template-image"
    },
    "4de16200-4175-4aff-b753-3d40ff849289": {
      "name": "healer.png",
      "type": "template-image"
    },
    "647d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "4de16200-4175-4aff-b753-3d40ff849289",
        "190e9e72-32e9-4c51-adbb-dbad343134fc",
        "fd70f4a4-578f-442f-9e5c-78872289818f"
      ]
    },
    "fd70f4a4-578f-442f-9e5c-78872289818f": {
      "name": "wanda.png",
      "type": "template-image"
    }
  },
  "variables": {
    "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228": {
      "name": "have_potion",
      "type": "boolean",
      "cType": "global",
      "value": false
    },
    "747d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": ["6e25dd6b-e976-4a80-afc5-5ce2cbcc8228"]
    }
  },
  "conditions": {
    "d24a6cbe-85fb-4059-8867-fa8ba0af6aa0": {
      "output": "0828bb7f-3a2b-4121-bff6-affe5c77d55d",
      "script": null
    },
    "66acc3a7-454a-43db-a923-1b0d3cb17805": {
      "output": "57572c19-ca11-4223-bdb7-718971ef7951",
      "script": "not have_potion"
    }
  },
  "locales": [
    {
      "iso": "en",
      "base": null,
      "name": "English"
    },
    {
      "iso": "it",
      "name": "Italiano",
      "base": "en"
    }
  ],
  "name": "Game Engine Simplified",
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}
```
