diff --git a/ModuleCondition.md b/ModuleConfigCondition.md
similarity index 93%
rename from ModuleCondition.md
rename to ModuleConfigCondition.md
index 7e2a86a..177af1f 100644
--- a/ModuleCondition.md
+++ b/ModuleConfigCondition.md
@@ -1,4 +1,4 @@
-# Module.json Condition
+# Module config Condition
A condition is a way for a cue list to wait till a condition is met. There are two types of conditions: server or client.
@@ -24,4 +24,4 @@ Although these two types of conditions function differently you specify them the
| title | Visual title of the condition |
| description | Short description that explains what the condition does |
-View this in a [complete module.json example](./module.json).
+View [module.json](./ModuleJSON.md).
diff --git a/ModuleJSONProperty.md b/ModuleConfigProperty.md
similarity index 69%
rename from ModuleJSONProperty.md
rename to ModuleConfigProperty.md
index c5f6b3f..7f3d1cb 100644
--- a/ModuleJSONProperty.md
+++ b/ModuleConfigProperty.md
@@ -1,110 +1,128 @@
-# Module.json Property
-Each property consists of a property-type, some metadata and of course the value. Below is an example of what a basic property looks like.
-```JSON
-{
- "title": "Property 1",
- "type": "text",
- "description": "Enter some text",
- "value": "Hello World!"
-
-}
-```
-|Property|Description|
-|-|-|
-name | Name of the property, this will be visible in the scene editor.
-type | Property type, see below.
-description | A description what the property does, this will be shown when a user clicks the questionmark next to the property in the scene editor.
-value | The default value for the property.
-
-## Property Types
-The property type specifies how the property should behave in the editor. Some properties have additional parameters you must/can set. Below you can find all property types and additional parameters.
-
-### text
-Text input field
-|Parameter|Type|Description|
-|-|-|-|
-|value|string|The default value for the property.
-
-### textarea
-Multiline text input field
-|Parameter|Type|Description|
-|-|-|-|
-|value|string|The default value for the property.
-### number
-Number input field
-|Parameter|Type|Description|
-|-|-|-|
-|value|number|The default value for the property.
-|min|number|The minimum value.
-|max|number|The maximum value.
-|step|number|The step to increase/decrease with.
-
-### slider
-Range slider
-|Parameter|Type|Description|
-|-|-|-|
-|value|number|The default value for the property.
-|min|number|The minimum value.
-|max|number|The maximum value.
-|step|number|The step to increase/decrease with.
-
-### color
-Color picker
-|Parameter|Type|Description|
-|-|-|-|
-|value|string|The default value for the property.
-
-### checkbox
-|Parameter|Type|Description|
-|-|-|-|
-|value|boolean|The default value for the property.
-
-### select
-Dropdown select
-|Parameter|Type|Description|
-|-|-|-|
-|value|string|The default selected value for the property.
-|allowedValues|{id:string, text:string}[]|The values that can be selected.
-
-### file
-Select file from filebrowser
-|Parameter|Type|Description|
-|-|-|-|
-|value|null|
-|multi|boolean|Can select multiple files.
-|allowedTypes|string[]|Selectable file types. Can be `image`, `video`, `audio`, `font`, `pdf`, `animation`, `vectorImage`
-
-### textstyling
-Property that contains multiple text styling sub properties.
-
-Select file from filebrowser
-|Parameter|Type|Description|
-|-|-|-|
-|value|{ size:number, color:string, bold:boolean, italic:boolean, underlined:boolean, strikethrough:boolean, align:"left"\|"center"\|"right"}|Can also be null to use default settings.
-|allowedTypes|string[]|Which sub properties to show. Can be `size`, `color`, `bold`, `italic`, `underlined`, `strikethrough`, `align`
-
-### time
-Time selector
-|Parameter|Type|Description|
-|-|-|-|
-|value|number|The default value (unix epoch seconds) for the property.
-
-### date
-Date selector
-|Parameter|Type|Description|
-|-|-|-|
-|value|number|The default value (unix epoch seconds) for the property.
-
-### datetime
-Date + Time selector
-|Parameter|Type|Description|
-|-|-|-|
-|value|number|The default value (unix epoch seconds) for the property.
-
-### giphy
-Grab animation from Giphy
-|Parameter|Type|Description|
-|-|-|-|
-|value|null|
-
-View this in a [complete module.json example](./module.json).
\ No newline at end of file
+# Module config Property
+
+Each property consists of a property-type, some metadata and of course the value. Below is an example of what a basic property looks like.
+
+```JSON
+{
+ "title": "Property 1",
+ "type": "text",
+ "description": "Enter some text",
+ "value": "Hello World!"
+
+}
+```
+
+| Property | Description |
+| ----------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| name | Name of the property, this will be visible in the scene editor. |
+| type | Property type, see below. |
+| description | A description what the property does, this will be shown when a user clicks the questionmark next to the property in the scene editor. |
+| value | The default value for the property. |
+
+## Property Types
+
+The property type specifies how the property should behave in the editor. Some properties have additional parameters you must/can set. Below you can find all property types and additional parameters.
+
+### text
+
+Text input field
+|Parameter|Type|Description|
+|-|-|-|
+|value|string|The default value for the property.
+
+### textarea
+
+Multiline text input field
+|Parameter|Type|Description|
+|-|-|-|
+|value|string|The default value for the property.
+
+### number
+
+Number input field
+|Parameter|Type|Description|
+|-|-|-|
+|value|number|The default value for the property.
+|min|number|The minimum value.
+|max|number|The maximum value.
+|step|number|The step to increase/decrease with.
+
+### slider
+
+Range slider
+|Parameter|Type|Description|
+|-|-|-|
+|value|number|The default value for the property.
+|min|number|The minimum value.
+|max|number|The maximum value.
+|step|number|The step to increase/decrease with.
+
+### color
+
+Color picker
+|Parameter|Type|Description|
+|-|-|-|
+|value|string|The default value for the property.
+
+### checkbox
+
+| Parameter | Type | Description |
+| --------- | ------- | ----------------------------------- |
+| value | boolean | The default value for the property. |
+
+### select
+
+Dropdown select
+|Parameter|Type|Description|
+|-|-|-|
+|value|string|The default selected value for the property.
+|allowedValues|{id:string, text:string}[]|The values that can be selected.
+
+### file
+
+Select file from filebrowser
+|Parameter|Type|Description|
+|-|-|-|
+|value|null|
+|multi|boolean|Can select multiple files.
+|allowedTypes|string[]|Selectable file types. Can be `image`, `video`, `audio`, `font`, `pdf`, `animation`, `vectorImage`
+
+### textstyling
+
+Property that contains multiple text styling sub properties.
+
+Select file from filebrowser
+|Parameter|Type|Description|
+|-|-|-|
+|value|{ size:number, color:string, bold:boolean, italic:boolean, underlined:boolean, strikethrough:boolean, align:"left"\|"center"\|"right"}|Can also be null to use default settings.
+|allowedTypes|string[]|Which sub properties to show. Can be `size`, `color`, `bold`, `italic`, `underlined`, `strikethrough`, `align`
+
+### time
+
+Time selector
+|Parameter|Type|Description|
+|-|-|-|
+|value|number|The default value (unix epoch seconds) for the property.
+
+### date
+
+Date selector
+|Parameter|Type|Description|
+|-|-|-|
+|value|number|The default value (unix epoch seconds) for the property.
+
+### datetime
+
+Date + Time selector
+|Parameter|Type|Description|
+|-|-|-|
+|value|number|The default value (unix epoch seconds) for the property.
+
+### giphy
+
+Grab animation from Giphy
+|Parameter|Type|Description|
+|-|-|-|
+|value|null|
+
+View [module.json](./ModuleJSON.md).
diff --git a/ModuleTrigger.md b/ModuleConfigTrigger.md
similarity index 93%
rename from ModuleTrigger.md
rename to ModuleConfigTrigger.md
index 6670631..61bcc60 100644
--- a/ModuleTrigger.md
+++ b/ModuleConfigTrigger.md
@@ -1,63 +1,63 @@
-# Module.json Trigger
-
-A trigger is a way for a cue list to call the server side of a module. This way you can control the module behavior automatically. You can also specify parameters to input values. A basic trigger with no parameters will look like this:
-
-```JSON
-{
- "title":"Update Something",
- "description": "This does something in the module.",
- "arguments": []
-}
-```
-
-| Property | Description |
-| ----------- | ---------------------------------------------------------- |
-| title | The title of the trigger, this is visible in the cue list. |
-| description | Description that explains what the trigger does. |
-| arguments | An array of arguments, see below. |
-
-## Arguments
-
-Arguments can be used to let a cue list creator input variable values. This can be used to control a module through a cue list. Every argument needs to have a type and some argument types have additional parameters. Below you can find the argument types and their parameters.
-
-### text
-
-| Parameter | Type | Description |
-| --------- | ------ | ---------------------------- |
-| title | string | Visual name of the argument. |
-
-### number
-
-| Parameter | Type | Description |
-| --------- | ------ | ---------------------------- |
-| title | string | Visual name of the argument. |
-
-### scenes
-
-| Parameter | Type | Description |
-| -------------------- | ------- | ------------------------------------------------ |
-| title | string | Visual name of the argument. |
-| onlyContainingModule | boolean | Can only select scenes this module is a part of. |
-
-## Example Argument
-
-Number argument
-
-```JSON
-{
- "type": "number",
- "title": "Hours from now"
-}
-```
-
-Scene select argument
-
-```JSON
-{
- "type": "scenes",
- "title": "In scenes",
- "onlyContainingModule": true
-}
-```
-
-View this in a [complete module.json example](./module.json).
+# Module config Trigger
+
+A trigger is a way for a cue list to call the server side of a module. This way you can control the module behavior automatically. You can also specify parameters to input values. A basic trigger with no parameters will look like this:
+
+```JSON
+{
+ "title":"Update Something",
+ "description": "This does something in the module.",
+ "arguments": []
+}
+```
+
+| Property | Description |
+| ----------- | ---------------------------------------------------------- |
+| title | The title of the trigger, this is visible in the cue list. |
+| description | Description that explains what the trigger does. |
+| arguments | An array of arguments, see below. |
+
+## Arguments
+
+Arguments can be used to let a cue list creator input variable values. This can be used to control a module through a cue list. Every argument needs to have a type and some argument types have additional parameters. Below you can find the argument types and their parameters.
+
+### text
+
+| Parameter | Type | Description |
+| --------- | ------ | ---------------------------- |
+| title | string | Visual name of the argument. |
+
+### number
+
+| Parameter | Type | Description |
+| --------- | ------ | ---------------------------- |
+| title | string | Visual name of the argument. |
+
+### scenes
+
+| Parameter | Type | Description |
+| -------------------- | ------- | ------------------------------------------------ |
+| title | string | Visual name of the argument. |
+| onlyContainingModule | boolean | Can only select scenes this module is a part of. |
+
+## Example Argument
+
+Number argument
+
+```JSON
+{
+ "type": "number",
+ "title": "Hours from now"
+}
+```
+
+Scene select argument
+
+```JSON
+{
+ "type": "scenes",
+ "title": "In scenes",
+ "onlyContainingModule": true
+}
+```
+
+View [module.json](./ModuleJSON.md).
diff --git a/ModuleDevelopmentIntroduction.md b/ModuleDevelopmentIntroduction.md
new file mode 100644
index 0000000..214f146
--- /dev/null
+++ b/ModuleDevelopmentIntroduction.md
@@ -0,0 +1,3 @@
+# Module Development - Introduction
+
+TODO
diff --git a/ModuleJSON.md b/ModuleJSON.md
index a9981cd..6a01778 100644
--- a/ModuleJSON.md
+++ b/ModuleJSON.md
@@ -1,57 +1,108 @@
# Module.json
-The module.json is the main file for every module. It contains metadata that tells Getiyo what it is and it contains the modules properties, triggers & conditions. The [GetiyoModuleTool](./GetiyoModuleTool) will set this file up for you, but if you wish to change/add properties/triggers/conditions see the documentation below. There is also a [complete module.json example](./module.json).
-
-The module.json file serves as the central configuration file for each module in Getiyo. It contains essential metadata that informs Getiyo about the module's identity, as well as the module's properties, triggers, and conditions. The [GetiyoModuleTool](./GetiyoModuleTool) can automatically generate this file for you, streamlining the setup process. However, if you want to modify or add properties, triggers, or conditions, you can refer to the documentation provided below. For a full example of a module.json file, see the [complete module.json example](./module.json).
+The module.json file serves as the central configuration file for each module in Getiyo. It contains essential metadata that informs Getiyo about the module's identity, as well as the module's properties, triggers, and conditions. The [GetiyoModuleTool](./GetiyoModuleTool) can automatically generate this file for you, streamlining the setup process. However, if you want to modify or add properties, triggers, or conditions, you can refer to the documentation provided below.
## Structure
```JSON
{
- "name": "DemoModule",
- "author": "Mees van der Wijk",
- "category": "Debug",
- "description": "A simple demo module!",
+ "name": "DemoModule",
- "default_reference_properties": {
- "propertyId": { property }
- },
+ "author": "Mees van der Wijk",
+ "category": "Widget",
+ "description": "Showcase the module!",
- "default_module_properties": {
- "propertyId": { property }
- },
+ "default_reference_properties": {
+ "text": {
+ "type": "text",
+ "title": "Text",
+ "description": "The text for the demo!",
+ "value": "Hello world!"
+ },
+ "color": {
+ "type": "color",
+ "title": "Color",
+ "description": "The color of the demo.",
+ "value": "#f44336"
+ },
+ "style": {
+ "type": "select",
+ "title": "Style",
+ "description": "The style of the demo",
+ "value": "cool",
+ "allowedValues": [
+ {
+ "id": "cool",
+ "text": "Cool Demo"
+ },
+ {
+ "id": "fast",
+ "text": "Fast Demo"
+ },
+ {
+ "id": "slow",
+ "text": "Slow Demo"
+ }
+ ]
+ }
+ },
- "triggers": {
- "triggerId": { trigger }
- },
+ "default_module_properties": {},
- "conditions": {
- "client": {
- "conditionId": { condition }
- },
- "server": {
- "conditionId": { condition }
- }
- },
+ "triggers": {
+ "setText": {
+ "title": "Set text",
+ "description": "Set the text of the demo.",
+ "arguments": [
+ {
+ "type": "scenes",
+ "title": "In scenes",
+ "onlyContainingModule": true
+ },
+ {
+ "type": "text",
+ "title": "New text"
+ }
+ ]
+ }
+ },
- "defaultsize": { "width": 400, "height": 400 },
- "defaultlocation": { "x": 100, "y": 100 }
+ "conditions": {
+ "server": {
+ "textStop": {
+ "title": "Text Stop",
+ "description": "Will be met when the text stops."
+ }
+ },
+ "client": {
+ }
+ },
+
+ "default_size": {
+ "width": 300,
+ "height": 300
+ },
+
+ "default_location": {
+ "x": 100,
+ "y": 100
+ }
}
```
-| Property | Description | Example |
-| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
-| name | The property name, used internally for creating an ID. Changing this will break modules using the old name. |
-| author | The module author. |
-| category | A fitting category for the module. |
-| description | A short module description. |
-| default_reference_properties | An object with property IDs as keys and property objects as values. Reference properties are unique for each scene a module is a part of. These are also the properties you edit in the scene editor. See [property](./ModuleJSONProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
-| default_module_properties | An object with property IDs as keys and property objects as values. Module properties are shared for the entire module instance. See [property](./ModuleJSONProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
-| triggers | An object with trigger IDs as keys and trigger data as values. Triggers allow a cue list to call the server-side of a module, controlling module behavior automatically. See [trigger](./ModuleTrigger) for all parameters. | `{ trigger1: { trigger }, trigger1: { trigger } }` |
-| conditions.client | An object with condition IDs as keys and condition data as values. A condition is a way for a cue list to wait till a condition is met. These are client conditions, they can be met via the [ModuleClientAPI](./ModuleClientAPI). Because the ModuleClientAPI runs on the machines of viewers which you can not trust, Getiyo has a system that allows cue list makers to specify a minimum percentage of clients to have met the condition before continuing. The ModuleServerAPI can force a client condition. See [conditions](./ModuleCondition) for all parameters. | `{ condition1: { condition }, condition2: { condition } }` |
-| conditions.server | An object with condition IDs as keys and condition data as values. These are server conditions, they can be met via the [ModuleServerAPI](./ModuleServerAPI). The object is the same as `conditions.client`. | `{ condition1: { condition }, condition2: { condition } }` |
-| defaultsize.width | The default width of the module. |
-| defaultsize.height | The default height of the module. |
-| defaultlocation.x | **Probably deprecated soon!** Default x coordinate of the module. |
-| defaultlocation.y | **Probably deprecated soon!** Default y coordinate of the module. |
+| Property | Description | Example |
+| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
+| name | The property name, used internally for creating an ID. Changing this will break modules using the old name. |
+| author | The module author. |
+| category | A fitting category for the module. |
+| description | A short module description. |
+| default_reference_properties | An object with property IDs as keys and property objects as values. Reference properties are unique for each scene a module is a part of. These are also the properties you edit in the scene editor. See [property](./ModuleConfigProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
+| default_module_properties | An object with property IDs as keys and property objects as values. Module properties are shared for the entire module instance. See [property](./ModuleConfigProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
+| triggers | An object with trigger IDs as keys and trigger data as values. Triggers allow a cue list to call the server-side of a module, controlling module behavior automatically. See [trigger](./ModuleConfigTrigger) for all parameters. | `{ trigger1: { trigger }, trigger1: { trigger } }` |
+| conditions.client | An object with condition IDs as keys and condition data as values. A condition is a way for a cue list to wait till a condition is met. These are client conditions, they can be met via the [ModuleClientAPI](./ModuleClientAPI). Because the ModuleClientAPI runs on the machines of viewers which you can not trust, Getiyo has a system that allows cue list makers to specify a minimum percentage of clients to have met the condition before continuing. The ModuleServerAPI can force a client condition. See [conditions](./ModuleConfigCondition) for all parameters. | `{ condition1: { condition }, condition2: { condition } }` |
+| conditions.server | An object with condition IDs as keys and condition data as values. These are server conditions, they can be met via the [ModuleServerAPI](./ModuleServerAPI). The object is the same as `conditions.client`. | `{ condition1: { condition }, condition2: { condition } }` |
+| defaultsize.width | The default width of the module. |
+| defaultsize.height | The default height of the module. |
+| defaultlocation.x | **Probably deprecated soon!** Default x coordinate of the module. |
+| defaultlocation.y | **Probably deprecated soon!** Default y coordinate of the module. |
diff --git a/ModuleTS.md b/ModuleTS.md
new file mode 100644
index 0000000..29e36d8
--- /dev/null
+++ b/ModuleTS.md
@@ -0,0 +1,56 @@
+# Module.json
+
+The module.json file serves as the central configuration file for each module in Getiyo. It contains essential metadata that informs Getiyo about the module's identity, as well as the module's properties, triggers, and conditions. The [GetiyoModuleTool](./GetiyoModuleTool) can automatically generate this file for you, streamlining the setup process. However, if you want to modify or add properties, triggers, or conditions, you can refer to the documentation provided below. For a full example of a module.json file, see the [complete module.json example](./module.json).
+
+## Structure
+
+```JSON
+{
+ "type": "normal",
+ "name": "DemoModule",
+ "author": "Mees van der Wijk",
+ "category": "Debug",
+ "description": "A simple demo module!",
+
+ "default_reference_properties": {
+ "propertyId": { property }
+ },
+
+ "default_module_properties": {
+ "propertyId": { property }
+ },
+
+ "triggers": {
+ "triggerId": { trigger }
+ },
+
+ "conditions": {
+ "client": {
+ "conditionId": { condition }
+ },
+ "server": {
+ "conditionId": { condition }
+ }
+ },
+
+ "defaultsize": { "width": 400, "height": 400 },
+ "defaultlocation": { "x": 100, "y": 100 }
+}
+
+```
+
+| Property | Description | Example |
+| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
+| name | The property name, used internally for creating an ID. Changing this will break modules using the old name. |
+| author | The module author. |
+| category | A fitting category for the module. |
+| description | A short module description. |
+| default_reference_properties | An object with property IDs as keys and property objects as values. Reference properties are unique for each scene a module is a part of. These are also the properties you edit in the scene editor. See [property](./ModuleConfigProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
+| default_module_properties | An object with property IDs as keys and property objects as values. Module properties are shared for the entire module instance. See [property](./ModuleConfigProperty) for all parameters. | `{ property1: { property }, property2: { property } }` |
+| triggers | An object with trigger IDs as keys and trigger data as values. Triggers allow a cue list to call the server-side of a module, controlling module behavior automatically. See [trigger](./ModuleConfigTrigger) for all parameters. | `{ trigger1: { trigger }, trigger1: { trigger } }` |
+| conditions.client | An object with condition IDs as keys and condition data as values. A condition is a way for a cue list to wait till a condition is met. These are client conditions, they can be met via the [ModuleClientAPI](./ModuleClientAPI). Because the ModuleClientAPI runs on the machines of viewers which you can not trust, Getiyo has a system that allows cue list makers to specify a minimum percentage of clients to have met the condition before continuing. The ModuleServerAPI can force a client condition. See [conditions](./ModuleConfigCondition) for all parameters. | `{ condition1: { condition }, condition2: { condition } }` |
+| conditions.server | An object with condition IDs as keys and condition data as values. These are server conditions, they can be met via the [ModuleServerAPI](./ModuleServerAPI). The object is the same as `conditions.client`. | `{ condition1: { condition }, condition2: { condition } }` |
+| defaultsize.width | The default width of the module. |
+| defaultsize.height | The default height of the module. |
+| defaultlocation.x | **Probably deprecated soon!** Default x coordinate of the module. |
+| defaultlocation.y | **Probably deprecated soon!** Default y coordinate of the module. |
diff --git a/ModuleStructure.md b/V1ModuleStructure.md
similarity index 99%
rename from ModuleStructure.md
rename to V1ModuleStructure.md
index 9e2f1c2..f701099 100644
--- a/ModuleStructure.md
+++ b/V1ModuleStructure.md
@@ -1,4 +1,4 @@
-# Module Structure
+# V1 Module Structure
Each module in Getiyo comprises four key components: module.json, a server-side script, a user page, and optionally a control/external page. The detailed structure of each component is outlined below. You can automatically set up this file structure by using the [GetiyoModuleTool](./GetiyoModuleTool), as described in the ["Setting up a development environment]"(./ModuleEnvironment) section of the documentation.
diff --git a/V2ModuleStructure.md b/V2ModuleStructure.md
new file mode 100644
index 0000000..f701099
--- /dev/null
+++ b/V2ModuleStructure.md
@@ -0,0 +1,122 @@
+# V1 Module Structure
+
+Each module in Getiyo comprises four key components: module.json, a server-side script, a user page, and optionally a control/external page. The detailed structure of each component is outlined below. You can automatically set up this file structure by using the [GetiyoModuleTool](./GetiyoModuleTool), as described in the ["Setting up a development environment]"(./ModuleEnvironment) section of the documentation.
+
+## Module.json
+
+The module.json file serves as the central configuration file for each module in Getiyo. It contains essential metadata that informs Getiyo about the module's identity, as well as the module's properties, triggers, and conditions. The [GetiyoModuleTool](./GetiyoModuleTool) can automatically generate this file for you, streamlining the setup process. However, if you want to modify or add properties, triggers, or conditions, you can refer to the module.json section in the documentation. To learn more about configuring the [module.json](./ModuleJSON) file and its various elements, consult the Module JSON section in the documentation.
+
+## Server-Side
+
+The server-side component of a Getiyo module is comprised of one or more TypeScript or JavaScript files, organized according to the structure outlined below. The server-side code utilizes the [ModuleServerAPI](./ModuleServerAPI), which facilitates communication with the ModuleClientAPI, file management, show control, and more. For a comprehensive overview of the ModuleServerAPI's features and capabilities, visit the [ModuleServerAPI](./ModuleServerAPI) section in the documentation. By familiarizing yourself with the API, you can better leverage its functionality to create powerful and versatile Getiyo modules.
+
+```
+Module Root
+├── server
+│ ├── **/*.ts
+│ └── **/*.js
+```
+
+_See bottom of the page for a complete directory structure_
+
+## Page
+
+A page of a module consists of an HTML file, TypeScript (or JavaScript), and Sass (or CSS). The user page is **required** because it is shown as the module to a user. The other pages are outside the renderer and not required. The following representation illustrates the typical file structure for a module page:
+
+```
+Module Root
+├── user
+│ ├── ts (Required)
+│ │ ├── ModuleClientAPI.d.ts
+│ │ └── **/*.ts
+│ ├── js (Optional)
+│ │ └── **/*.js
+│ ├── scss (Optional)
+│ │ └── **/*.scss
+│ ├── css (Optional)
+│ │ └── **/*.css
+│ ├── lib (Optional)
+│ │ ├── **/*.ts
+│ │ ├── **/*.js
+│ │ ├── **/*.scss
+│ │ └── **/*.css
+│ └── index.html
+```
+
+_See bottom of the page for a complete directory structure_
+The only required directory is ts, as it contains the type definitions for the API in ModuleClientAPI.d.ts. If you prefer using plain JavaScript, create a js folder, but do not remove the ts directory. If you want to include any libraries create a lib folder and add the TypeScript, Javascript, Sass or css files their. They will automatically be included infront of your own script/style. Each page has access to the ModuleClientAPI which will automatically be connected to its server-side ModuleServerAPI. For a comprehensive overview of the ModuleClientAPI's features and capabilities, visit the [ModuleClientAPI](./ModuleClientAPI). section in the documentation.
+
+### Control Page
+
+A control page is a specialized module page accessible only to moderators or admins of a Getiyo channel. This can be used to create a live control panel for your module. It can be opened directly or loaded into the broadcast view—a page where moderators or broadcasters can arrange a controller layout with control pages from different modules. The file structure for a control page is the same as that of a user page.
+
+### External Page
+
+An external page is a unique module page without Getiyo UI elements that can be accessed by anyone with the URL. Unlike user and control pages, external pages are not scaled or queued. The file structure for an external page is the same as that of a user page.
+
+## Static Files
+
+It is possible to add static files to a module build that can be used by the [ModuleServerAPI](./ModuleServerAPI) later. Simple create a `Static` directory in the root of the module environment and place files inside it to add them to the build.
+
+You can include static files in a module build for later use with the [ModuleServerAPI](./ModuleServerAPI). To do so, create a `static` directory at the root of the module environment and place the files inside. This will ensure that they are added to the build. By following this approach, you can easily store and manage static assets, such as images, fonts, or other files, that your module may need for its functionality.
+
+## Example complete file structure
+
+```
+Module Root
+├── user
+│ ├── ts (Required)
+│ │ ├── ModuleClientAPI.d.ts
+│ │ └── **/*.ts
+│ ├── js (Optional)
+│ │ └── **/*.js
+│ ├── scss (Optional)
+│ │ └── **/*.scss
+│ ├── css (Optional)
+│ │ └── **/*.css
+│ ├── lib (Optional)
+│ │ ├── **/*.ts
+│ │ ├── **/*.js
+│ │ ├── **/*.scss
+│ │ └── **/*.css
+│ └── index.html
+├── control
+│ ├── ts (Required)
+│ │ ├── ModuleClientAPI.d.ts
+│ │ └── **/*.ts
+│ ├── js (Optional)
+│ │ └── **/*.js
+│ ├── scss (Optional)
+│ │ └── **/*.scss
+│ ├── css (Optional)
+│ │ └── **/*.css
+│ ├── lib (Optional)
+│ │ ├── **/*.ts
+│ │ ├── **/*.js
+│ │ ├── **/*.scss
+│ │ └── **/*.css
+│ └── index.html
+├── external
+│ ├── ts (Required)
+│ │ ├── ModuleClientAPI.d.ts
+│ │ └── **/*.ts
+│ ├── js (Optional)
+│ │ └── **/*.js
+│ ├── scss (Optional)
+│ │ └── **/*.scss
+│ ├── css (Optional)
+│ │ └── **/*.css
+│ ├── lib (Optional)
+│ │ ├── **/*.ts
+│ │ ├── **/*.js
+│ │ ├── **/*.scss
+│ │ └── **/*.css
+│ └── index.html
+├── server
+│ ├── **/*.ts
+│ └── **/*.js
+├── static
+│ └── **/*.*
+├── .dist
+└── module.json
+```
diff --git a/_Sidebar.md b/_Sidebar.md
index 4c4aba0..f184455 100644
--- a/_Sidebar.md
+++ b/_Sidebar.md
@@ -5,15 +5,20 @@
- [Setting up server](./ServerSetup)
- [Config](./Config)
-### [Module Development](./ModuleStructure)
+### [Module Development](./ModuleDevelopmentIntroduction)
-- [Module Structure](./ModuleStructure)
-- [Module.json](./ModuleJSON)
- - [Property](./ModuleJSONProperty)
- - [Trigger](./ModuleTrigger)
- - [Condition](./ModuleCondition)
- - [Complete Example](./module.json)
+- [Introduction](./ModuleDevelopmentIntroduction)
+- V2 Modules
+ - [Module Structure](./V2ModuleStructure)
+ - [Module.json](./ModuleTS)
+- V1 Modules
+ - [Module Structure](./V1ModuleStructure)
+ - [Module.json](./ModuleJSON)
- [Development environment/Building](./ModuleEnvironment)
+- Module Config
+ - [Property](./ModuleConfigProperty)
+ - [Trigger](./ModuleConfigTrigger)
+ - [Condition](./ModuleConfigCondition)
- [Module Debugging](./ModuleDebugging)
- [GetiyoModuleTool](./GetiyoModuleTool)
- [ModuleStore](./ModuleStore)