Skip to content

Arcweave JSON

The Arcweave JSON is shallow and fairly easy to understand.

When you export an Arcweave project as JSON, the resulting file contains a complete representation of your project's structure and content.

Two JSON formats

Arcweave JSON comes in two possible versions, depending on whether the export includes multiple languages or not (see Localization). Specifically:

Single-language JSON

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

  • The workspace doesn't have Localization features.
  • The workspace has Localization features, but Current language or Select language is chosen during JSON export.

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
Click to expand 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

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

ℹ️ 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
  • elements, connections, and components objects nest the relevant {itemId} and not the content itself.

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.

✅ You can import the Arcweave JSON into a Pro or Team workspace.

Project-level

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

Click to expand extract of JSON example
json
{
  "name": "Game Engine Example",
  "startingElement": null,
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}

Boards

The boards object contains references to all boards and 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 IDs. The Root folder is distinguished by a root: true property.
  • A board: Contains arrays referencing the IDs of items placed on that board:

All boards and folders have a name property identifying them.

Click to expand 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",
      "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

The notes object contains references to all notes of the project by their ID and it includes the following properties:

  • theme: The note's color theme (e.g., "cyan", "moss")
  • content: HTML-formatted text content
  • x and y: The board coordinates of the note (present only when Include coordinates is selected during export)
  • width and height: The dimensions of the note (present only when Include coordinates is selected during export)
  • autoHeight: Boolean indicating whether the note automatically adjusts its height to the size of its content (present only when Include coordinates is selected during export)
Click to expand 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>",
      "autoHeight": true
    }
  },

Elements

The elements object stores references to all elements of the project by their ID and it includes the following properties:

  • theme: The element's color theme (e.g., "cyan", "moss")
  • outputs: Array of connection IDs originating from this element
  • attributes: Array of custom attribute IDs attached to this element
  • components: Array of component IDs attached to this element
  • x and y: The board coordinates of the element (present only when Include coordinates is selected during export)
  • width and height: The dimensions of the element (present only when Include coordinates is selected during export)
  • autoHeight: Boolean indicating whether the element automatically adjusts its height to the size of its content (present only when Include coordinates is selected during export)

⚠️ The properties x, y, width, height, and autoHeight are included in the JSON only if Include coordinates is selected during JSON export.

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

Click to expand 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"],
      "autoHeight": false,
      "components": ["647349ca-9ebb-4d5f-b81e-500761ec1c5a"]
    }
  },

Jumpers

The jumpers object contains references to all 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 is selected during export)
Click to expand extract of JSON example
json
"jumpers": {
    "28e3009a-e164-4679-92c3-977615b1eb4b": {
      "elementId": "5265ceac-f13f-47fc-a02c-6eda7eea6b90"
    }
  },

Connections

The connections object contains references to all connections of the project by their ID and it includes the following properties:

  • type: The visual style of the connection (e.g., "Straight")
  • theme: Color theme
  • sourceid: ID of the originating item
  • targetid: ID of the destination item
  • sourceType: Type of source item (e.g., "elements", "conditions")
  • targetType: Type of target item (e.g., "branches", "jumpers")
  • targetFace: Which side of the target the connection attaches to (e.g., "left")

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

Click to expand 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

The branches object contains references to all 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
    • elseIfCondition: An array of the branch's elseif condition IDs
    • elseCondition: The ID of the branch's else condition
  • x and y: The board coordinates of the branch (present only when Include coordinates is selected during export)
Click to expand 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

The conditions object contains references to all branch conditions of the project (see Branches) by their ID and it includes the following properties:

  • output: The ID of the condition's output connection
  • script: The expression being evaluated to determine if the condition is met (null for else conditions)
Click to expand extract of JSON example
json
"conditions": {
    "f8e12e95-43b7-4d42-9844-5402665b24ef": {
      "output": "a2e45faf-cfea-44c1-b64c-fa8b99bf2bfd",
      "script": "have_potion"
    }
  },

Contents

The contents object is central to Arcweave's localization system. It contains the content of all translatable project items:

  • Elements: Title and content, referenced by the element ID
  • Components: Name, referenced by the component ID
  • Labels: Content (property label), referenced by the label's connection ID.

⚠️ The single-language JSON format does not include the contents object. See Two JSON formats above, for the distinction between single-language and multi-language JSON.

The contents object includes 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 for each locale

Each localized field contains a text property with the actual content.

Click to expand extract of JSON example
json
"contents": {
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "name": {
        "en": {
          "text": "Root"
        }
      }
    },
    "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

The components object contains references to all components and 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 IDs (applies to component folders only)
  • assets: Object containing asset references
  • attributes: Array of custom attribute IDs

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

Click to expand 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": {
      "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

The attributes object contains references to all attributes of the project by their ID and it includes the following properties:

  • cId: The ID of the parent item (component or element)
  • name: The attribute's name
  • cType: The type of parent (elements or components)
  • value: An object containing:
    • data: The actual value
    • type: Data type (e.g., string)
    • plain: Boolean indicating if it's plain text
Click to expand extract of JSON example
json
"attributes": {
    "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",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "type": "string",
        "plain": true
      }
    }
  },

Assets

The assets object contains references to all assets and asset folders of the project by their ID and it includes the following properties:

  • name: The asset file name
  • type: The asset type; one of the following:
    • image: Image asset uploaded by the user
    • audio: Audio asset uploaded by the user
    • video: Video asset uploaded by the user
    • template-image: Image asset instantiated during project template recreation
    • template-audio: Audio asset instantiated during project template recreation
    • template-video: Video asset instantiated during project template recreation
  • root: Boolean indicating if this is the root of the assets folder tree
  • children: Array of asset IDs (applies to asset folders only)
Click to expand 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

The variables object contains references to all variables of the project by their ID and it includes the following properties:

  • name: The variable name
  • type: The variable data type (e.g., boolean, integer)
  • value: The variable's initial value
  • root: Boolean indicating if this is the root of the variables folder tree
  • children: Array of variable IDs for folders
Click to expand extract of JSON example
json
"variables": {
    "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228": {
      "name": "have_potion",
      "type": "boolean",
      "value": false
    },
    "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
    },
  },

Locales

The locales array defines available languages used by Arcweave's localization features. 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 primary 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.

Click to expand extract of JSON example
json
"locales": [
    {
      "name": "English",
      "iso": "en",
      "base": null
    },
    {
      "name": "Spanish",
      "iso": "es",
      "base": "en"
    }
  ]

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 project template.

Click to expand example JSON
json
{
  "startingElement": null,
  "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",
      "notes": ["d974242a-a65d-4bd6-8670-24c6b02a487f"],
      "jumpers": ["28e3009a-e164-4679-92c3-977615b1eb4b"],
      "branches": ["0d845415-33d5-4486-9514-32b88e17e6b2"],
      "elements": ["b4bb21bf-c26a-4b00-b857-8465b5bd2000"],
      "connections": [
        "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1",
        "fa267a31-7f38-470b-bc0d-43fdd22f261c",
        "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1",
        "5ead5198-a6d2-477e-881f-2870b252367e"
      ]
    }
  },
  "notes": {
    "d974242a-a65d-4bd6-8670-24c6b02a487f": {
      "theme": "cyan",
      "content": "<p>We've given dialogue starting elements a custom element attribute.<\/p>",
      "autoHeight": true
    }
  },
  "elements": {
    "b4bb21bf-c26a-4b00-b857-8465b5bd2000": {
      "autoHeight": true,
      "theme": "cyan",
      "components": ["647349ca-9ebb-4d5f-b81e-500761ec1c5a"],
      "outputs": ["5ead5198-a6d2-477e-881f-2870b252367e"],
      "attributes": ["f75d9de7-9a86-421b-a00b-a6e8b5c1b5ac"],
      "content": "<p>\u00a1Ay\u00fadame, por favor...! Estoy herido...<\/p>",
      "title": "<p><span class=\"mention-component mention\" data-id=\"647349ca-9ebb-4d5f-b81e-500761ec1c5a\" data-label=\"Wanda Elandor\" data-type=\"component\">Wanda Elandor<\/span> dialogo empieza<\/p>"
    }
  },
  "jumpers": {
    "28e3009a-e164-4679-92c3-977615b1eb4b": {
      "elementId": "b4bb21bf-c26a-4b00-b857-8465b5bd2000"
    }
  },
  "connections": {
    "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1": {
      "sourceType": "conditions",
      "sourceid": "f8e12e95-43b7-4d42-9844-5402665b24ef",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "targetType": "jumpers",
      "theme": "orange",
      "type": "Straight",
      "label": "<p>Dar poci\u00f3n<\/p>"
    },
    "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1": {
      "targetType": "jumpers",
      "type": "Bezier",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "0d91c8a3-7704-423e-b3f6-046973eb15a7",
      "theme": "orange",
      "sourceType": "conditions",
      "label": "<p>\"\u00a1Volver\u00e9 con ayuda!\"<\/p>"
    },
    "fa267a31-7f38-470b-bc0d-43fdd22f261c": {
      "type": "Bezier",
      "targetType": "jumpers",
      "targetid": "28e3009a-e164-4679-92c3-977615b1eb4b",
      "sourceid": "e3234e1e-74f9-45d5-be30-994bf5b3bc7c",
      "theme": "orange",
      "sourceType": "conditions",
      "label": "<p>Dale bayas buenas<\/p>"
    },
    "5ead5198-a6d2-477e-881f-2870b252367e": {
      "targetType": "branches",
      "type": "Bezier",
      "targetid": "0d845415-33d5-4486-9514-32b88e17e6b2",
      "sourceid": "b4bb21bf-c26a-4b00-b857-8465b5bd2000",
      "theme": "default",
      "sourceType": "elements",
      "label": null
    }
  },
  "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"
      }
    }
  },
  "components": {
    "036db898-0cb9-4a29-b19d-3e8f3288d9a2": {
      "children": [
        "3846c37c-07a1-4c04-98e2-26cd026295d1",
        "647349ca-9ebb-4d5f-b81e-500761ec1c5a"
      ],
      "name": null
    },
    "3846c37c-07a1-4c04-98e2-26cd026295d1": {
      "assets": {
        "cover": {
          "id": "190e9e72-32e9-4c51-adbb-dbad343134fc"
        }
      },
      "attributes": ["22780ff3-64a2-40e8-a2e4-e753809c020a"],
      "name": "Drake Miles"
    },
    "65005bda-15d0-41c5-867f-68c118829f08": {
      "root": true,
      "children": ["036db898-0cb9-4a29-b19d-3e8f3288d9a2"],
      "name": "Root"
    },
    "647349ca-9ebb-4d5f-b81e-500761ec1c5a": {
      "assets": {
        "cover": {
          "id": "fd70f4a4-578f-442f-9e5c-78872289818f"
        }
      },
      "attributes": [],
      "name": null
    }
  },
  "attributes": {
    "f75d9de7-9a86-421b-a00b-a6e8b5c1b5ac": {
      "name": "element_type",
      "cType": "elements",
      "value": {
        "plain": true,
        "type": "string",
        "data": "dialogue_start"
      },
      "cId": "b4bb21bf-c26a-4b00-b857-8465b5bd2000"
    },
    "22780ff3-64a2-40e8-a2e4-e753809c020a": {
      "cId": "3846c37c-07a1-4c04-98e2-26cd026295d1",
      "name": "obj_id",
      "cType": "components",
      "value": {
        "data": "DRAKE",
        "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",
      "value": false
    },
    "747d0495-341f-42b2-8788-b47dace22bf8": {
      "root": true,
      "children": [
        "990d6321-43cb-430b-84bd-6b48c574c489",
        "ddee7af7-0fc3-474d-ad6a-4938a330506a",
        "6e25dd6b-e976-4a80-afc5-5ce2cbcc8228"
      ]
    },
    "990d6321-43cb-430b-84bd-6b48c574c489": {
      "name": "goodberries",
      "type": "integer",
      "value": 8
    },
    "ddee7af7-0fc3-474d-ad6a-4938a330506a": {
      "name": "wanda_health",
      "type": "integer",
      "value": 20
    }
  },
  "conditions": {
    "f8e12e95-43b7-4d42-9844-5402665b24ef": {
      "output": "da3e05d0-2bdb-4c4e-8070-1d2d547b9db1",
      "script": "have_potion"
    },
    "e3234e1e-74f9-45d5-be30-994bf5b3bc7c": {
      "script": "goodberries &gt; 0",
      "output": "fa267a31-7f38-470b-bc0d-43fdd22f261c"
    },
    "0d91c8a3-7704-423e-b3f6-046973eb15a7": {
      "script": null,
      "output": "d9e79c2f-74f8-43c8-8fb3-e8c8e7cd14b1"
    }
  },
  "name": "Game Engine Example",
  "cover": {
    "file": "game-engine-cover.png",
    "type": "template-image"
  }
}