diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml
new file mode 100644
index 000000000..8c2c4247c
--- /dev/null
+++ b/.github/workflows/documentation.yml
@@ -0,0 +1,96 @@
+# Sample workflow for building and deploying a Hugo site to GitHub Pages
+name: Deploy Documentation
+
+on:
+ # Runs on pushes targeting the default branch
+ push:
+ branches:
+ - main
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+# Default to bash
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ env:
+ HUGO_VERSION: 0.147.2
+ HUGO_ENVIRONMENT: production
+ TZ: America/Los_Angeles
+ steps:
+ - name: Install Hugo CLI
+ run: |
+ wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
+ && sudo dpkg -i ${{ runner.temp }}/hugo.deb
+ - name: Install Dart Sass
+ run: sudo snap install dart-sass
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ fetch-depth: 0
+ - name: Setup Pages
+ id: pages
+ uses: actions/configure-pages@v5
+ - name: Install Node.js dependencies
+ run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
+ - name: Cache Restore
+ id: cache-restore
+ uses: actions/cache/restore@v4
+ with:
+ path: |
+ ${{ runner.temp }}/hugo_cache
+ key: hugo-${{ github.run_id }}
+ restore-keys:
+ hugo-
+ - name: Configure Git
+ run: git config core.quotepath false
+ - name: Build with Hugo
+ run: |
+ cd Documentation \
+ && hugo \
+ --gc \
+ --minify \
+ --baseURL "${{ steps.pages.outputs.base_url }}/" \
+ --cacheDir "${{ runner.temp }}/hugo_cache"
+ - name: Cache Save
+ id: cache-save
+ uses: actions/cache/save@v4
+ with:
+ path: |
+ ${{ runner.temp }}/hugo_cache
+ key: ${{ steps.cache-restore.outputs.cache-primary-key }}
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: ./Documentation/public
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
\ No newline at end of file
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
new file mode 100644
index 000000000..87d76b9b5
--- /dev/null
+++ b/Documentation/.gitignore
@@ -0,0 +1,5 @@
+*.test
+imports.*
+dist/
+public/
+.hugo_build.lock
\ No newline at end of file
diff --git a/Documentation/archetypes/default.md b/Documentation/archetypes/default.md
new file mode 100644
index 000000000..25b67521d
--- /dev/null
+++ b/Documentation/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+date = '{{ .Date }}'
+draft = true
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
++++
diff --git a/Documentation/assets/.gitkeep b/Documentation/assets/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/_index.md b/Documentation/content/_index.md
new file mode 100644
index 000000000..01c177d50
--- /dev/null
+++ b/Documentation/content/_index.md
@@ -0,0 +1,11 @@
++++
+title = 'Overload Documentation'
++++
+
+
+
+### Welcome to the Overload documentation!
+
+The goal of this documentation is to help you getting started with Overload, experimenting, and building your very own games with Overload.
+
+If you need any help with Overload, feel free to join our [Discord](https://discord.gg/wqe775s) server!
\ No newline at end of file
diff --git a/Documentation/content/samples/Cargo.md b/Documentation/content/samples/Cargo.md
new file mode 100644
index 000000000..879fe07f6
--- /dev/null
+++ b/Documentation/content/samples/Cargo.md
@@ -0,0 +1,19 @@
++++
+title = "Cargo"
++++
+
+
+
+[ GitHub Repository](https://github.com/Overload-Technologies/Cargo)
+
+A short puzzle demo game that demonstrates gameplay mechanics built using Overload.
+
+### Project files (recommended)
+- [For Overload latest](https://github.com/Overload-Technologies/Cargo)
+- [For Overload v1.6](https://github.com/Overload-Technologies/Cargo/tree/made-for-overload-v1.6)
+- [For Overload v1.5](https://github.com/Overload-Technologies/Cargo/tree/made-for-overload-v1.5)
+- [For Overload v1.4](https://github.com/Overload-Technologies/Cargo/tree/made-for-overload-v1.4)
+- [All Tags](https://github.com/Overload-Technologies/Cargo/tags)
+
+### Playable builds (less frequently updated)
+- [Latest](https://github.com/Overload-Technologies/Cargo/releases)
diff --git a/Documentation/content/samples/Showroom.md b/Documentation/content/samples/Showroom.md
new file mode 100644
index 000000000..e10d61cb5
--- /dev/null
+++ b/Documentation/content/samples/Showroom.md
@@ -0,0 +1,19 @@
++++
+title = "Showroom"
++++
+
+
+
+[ GitHub Repository](https://github.com/Overload-Technologies/Showroom)
+
+A comprehensive demonstration project that showcases Overload Engine's core features and capabilities.
+
+### Project files (recommended)
+- [For Overload latest](https://github.com/Overload-Technologies/Showroom)
+- [For Overload v1.6](https://github.com/Overload-Technologies/Showroom/tree/made-for-overload-v1.6)
+- [For Overload v1.5](https://github.com/Overload-Technologies/Showroom/tree/made-for-overload-v1.5)
+- [For Overload v1.4](https://github.com/Overload-Technologies/Showroom/tree/made-for-overload-v1.4)
+- [All Tags](https://github.com/Overload-Technologies/Showroom/tags)
+
+### Playable builds (less frequently updated)
+- [Latest](https://github.com/Overload-Technologies/Showroom/releases)
diff --git a/Documentation/content/samples/_index.md b/Documentation/content/samples/_index.md
new file mode 100644
index 000000000..dccb6210f
--- /dev/null
+++ b/Documentation/content/samples/_index.md
@@ -0,0 +1,30 @@
++++
+title = "Sample Projects"
+weight = 2
++++
+
+Overload includes several sample projects designed to help you explore the engine's capabilities and get started with development. These projects demonstrate key features and serve as practical learning resources.
+
+## Using Sample Projects
+
+### Version Compatibility
+
+Before downloading or cloning any sample project, verify your Overload version to ensure compatibility. Sample projects are maintained for the [latest release](https://github.com/Overload-Technologies/Overload/releases), but previous versions remain accessible through Git tags.
+
+### Finding the Right Version
+
+Each sample project uses a structured tagging system to track version compatibility:
+
+**Tag Format:** `made-for-overload-v{version}`
+
+**Example:** For Overload v1.6, look for the `made-for-overload-v1.6` tag.
+
+### Getting the Latest Updates
+
+Tags mark major version upgrades, but projects may receive updates between versions. To find the most recent update for your Overload version:
+
+1. Locate the tag for the **next** version (e.g., `made-for-overload-v1.5` if you're using v1.4)
+2. Navigate to the commit immediately before that tag
+3. This represents the latest update compatible with your version
+
+**Example:** For the latest Overload v1.4 compatible version, find the `made-for-overload-v1.5` tag and use the previous commit.
\ No newline at end of file
diff --git a/Documentation/content/scripting/_index.md b/Documentation/content/scripting/_index.md
new file mode 100644
index 000000000..75e7dd0e1
--- /dev/null
+++ b/Documentation/content/scripting/_index.md
@@ -0,0 +1,4 @@
++++
+title = 'Lua Scripting'
+weight = 3
++++
\ No newline at end of file
diff --git a/Documentation/content/scripting/components/AmbientBoxLight.md b/Documentation/content/scripting/components/AmbientBoxLight.md
new file mode 100644
index 000000000..f6b2b1ac9
--- /dev/null
+++ b/Documentation/content/scripting/components/AmbientBoxLight.md
@@ -0,0 +1,26 @@
++++
+title = 'AmbientBoxLight'
++++
+
+### Description
+Represents an ambient light with a box shape
+
+- C++ related class: [`OvCore::ECS::Components::CAmbientBoxLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CAmbientBoxLight.h)
+- Inherits from lua usertype: [`Light`](../Light)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`AmbientBoxLight`|Default Constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetSize|`AmbientBoxLight`: instance |`number`|Returns the size of the box|
+|SetSize|`AmbientBoxLight`: instance `number`: size ||Defines the size of the box|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/AmbientSphereLight.md b/Documentation/content/scripting/components/AmbientSphereLight.md
new file mode 100644
index 000000000..655d9a7a1
--- /dev/null
+++ b/Documentation/content/scripting/components/AmbientSphereLight.md
@@ -0,0 +1,26 @@
++++
+title = 'AmbientSphereLight'
++++
+
+### Description
+Represents an ambient light with a sphere shape
+
+- C++ related class: [`OvCore::ECS::Components::CAmbientSphereLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CAmbientSphereLight.h)
+- Inherits from lua usertype: [`Light`](../Light)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`AmbientSphereLight`|Default Constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetRadius|`AmbientSphereLight`: instance |`number`|Returns the radius of the sphere|
+|SetRadius|`AmbientSphereLight`: instance `number`: radius ||Defines the radius of the sphere|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/AudioListener.md b/Documentation/content/scripting/components/AudioListener.md
new file mode 100644
index 000000000..cec8ce6fb
--- /dev/null
+++ b/Documentation/content/scripting/components/AudioListener.md
@@ -0,0 +1,24 @@
++++
+title = 'AudioListener'
++++
+
+### Description
+Represents an audio listener. The distance between audio sources and audio listener will affect the sound
+attenuation of spatialized sounds
+
+- C++ related class: [`OvCore::ECS::Components::CAudioListener`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CAudioListener.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`AudioListener`|Default Constructor|
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/AudioSource.md b/Documentation/content/scripting/components/AudioSource.md
new file mode 100644
index 000000000..7ddb2f8c4
--- /dev/null
+++ b/Documentation/content/scripting/components/AudioSource.md
@@ -0,0 +1,43 @@
++++
+title = 'AudioSource'
++++
+
+### Description
+Represents an audio source. Its position in the world is important if the spatial sound settings is on
+
+- C++ related class: [`OvCore::ECS::Components::CAudioSource`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CAudioSource.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`AudioSource`|Default Constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|Play|`AudioSource`: instance ||Plays the attached sounds|
+|Stop|`AudioSource`: instance ||Stops playback|
+|Pause|`AudioSource`: instance ||Suspend playback|
+|Resume|`AudioSource`: instance ||Resume the playback from where it get suspended|
+|GetSound|`AudioSource`: instance |`Usertype`|Returns the sound attached to the audio source|
+|GetVolume|`AudioSource`: instance |`number`|Returns the current volume|
+|GetPan|`AudioSource`: instance |`number`|Returns the pan|
+|IsLooped|`AudioSource`: instance |`boolean`|Returns true if the AudioSource is setup to loop|
+|GetPitch|`AudioSource`: instance |`number`|Returns the pitch|
+|IsFinished|`AudioSource`: instance |`boolean`|Returns true if the audio source sound has finished|
+|IsSpatial|`AudioSource`: instance |`boolean`|Returns true if the audio source is spatialized|
+|GetAttenuationThreshold|`AudioSource`: instance |`number`|Returns the audio source attenuation threshold (Minimum distance before applying sound attenuation)|
+|SetSound|`AudioSource`: instance `Usertype`: sound ||Defines the sound to play on the audio source|
+|SetVolume|`AudioSource`: instance `number`: volume ||Defines the audio source volume|
+|SetPan|`AudioSource`: instance `number`: pan ||Defines the audio source pan (Left / Right)|
+|SetLooped|`AudioSource`: instance `boolean`: loop ||Defines if the audio source should loop|
+|SetPitch|`AudioSource`: instance `number`: pitch ||Defines the audio source pitch (= frequency or playback speed)|
+|SetSpatial|`AudioSource`: instance `boolean`: spatial ||Defines if the audio source should be spatialized or not|
+|SetAttenuationThreshold|`AudioSource`: instance `number`: threshold ||Defines the audio source attenuation threshold (Minimum distance before applying sound attenuation)|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/Camera.md b/Documentation/content/scripting/components/Camera.md
new file mode 100644
index 000000000..fa13c48f7
--- /dev/null
+++ b/Documentation/content/scripting/components/Camera.md
@@ -0,0 +1,40 @@
++++
+title = 'Camera'
++++
+
+### Description
+Represents a camera entity. Its position will determine its view matrix
+
+- C++ related class: [`OvCore::ECS::Components::CCamera`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CCamera.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Camera`|Default constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetFov|`Camera`: instance |`number`|Returns the field of view of the camera (Perspective)|
+|GetSize|`Camera`: instance |`number`|Returns the size of the camera (Orthographic)|
+|GetNear|`Camera`: instance |`number`|Returns the distance between the camera and its near plane|
+|GetFar|`Camera`: instance |`number`|Returns the distance between the camera and its far plane|
+|GetClearColor|`Camera`: instance |`Vector3`|Returns the background color used before rendering the scene with this camera|
+|SetFov|`Camera`: instance `number`: fov ||Defines the field of view of the camera (Perspective)|
+|SetSize|`Camera`: instance `number`: size ||Defines the size of the camera (Orthographic)|
+|SetNear|`Camera`: instance `number`: near ||Defines the distance between the camera and its near plane|
+|SetFar|`Camera`: instance `number`: far ||Defines the distance between the camera and its far plane|
+|SetClearColor|`Camera`: instance `Vector3`: color ||Defines the background color used before rendering the scene with this camera|
+|HasFrustumGeometryCulling|`Camera`: instance |`boolean`|Returns true if the camera is culling geometry outside of its frustum|
+|HasFrustumLightCulling|`Camera`: instance |`boolean`|Returns true if the camera is culling lights outside of its frustum|
+|GetProjectionMode|`Camera`: instance |`ProjectionMode`|Returns the projection mode used by the camera (Orthographic or Perspective)|
+|SetFrustumGeometryCulling|`Camera`: instance `boolean`: cull ||Defines if the camera should cull geometry outside of its frustum|
+|SetFrustumLightCulling|`Camera`: instance `boolean`: cull ||Defines if the camera should cull lights outside of its frustum|
+|SetProjectionMode|`Camera`: instance `ProjectionMode`: mode ||Defines the projection mode the camera should be using (Orthographic or Perspective)|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/Component.md b/Documentation/content/scripting/components/Component.md
new file mode 100644
index 000000000..e0035caae
--- /dev/null
+++ b/Documentation/content/scripting/components/Component.md
@@ -0,0 +1,33 @@
++++
+title = 'Component'
++++
+
+### Description
+A component is a set of data and behaviours (Entity-Component without systems) that is interpreted by the engine (Or the user)
+
+- C++ related class: [`OvCore::ECS::Components::AComponent`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/AComponent.h)
+- Inherited by lua usertypes:
+ - [`Transform`](../Transform)
+ - [`Camera`](../Camera)
+ - [`MaterialRenderer`](../MaterialRenderer)
+ - [`ModelRenderer`](../ModelRenderer)
+ - [`Light`](../Light)
+ - [`PhysicalObject`](../PhysicalObject)
+ - [`AudioListener`](../AudioListener)
+ - [`AudioSource`](../AudioSource)
+ - [`PostProcessStack`](../PostProcessStack)
+ - [`ReflectionProbe`](../ReflectionProbe)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetOwner|`Component`: instance |`Actor`|Returns the actor that owns this component|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/DirectionalLight.md b/Documentation/content/scripting/components/DirectionalLight.md
new file mode 100644
index 000000000..21242af5d
--- /dev/null
+++ b/Documentation/content/scripting/components/DirectionalLight.md
@@ -0,0 +1,32 @@
++++
+title = 'DirectionalLight'
++++
+
+### Description
+A simple light that has no attenuation and that has a direction
+
+- C++ related class: [`OvCore::ECS::Components::CDirectionalLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CDirectionalLight.h)
+- Inherits from lua usertype: [`Light`](../Light)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`DirectionalLight`|Default constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetCastShadow|`DirectionalLight`: instance |`boolean`|Returns true if the light should cast shadows|
+|SetCastShadow|`DirectionalLight`: instance `boolean`: enabled||Defines if the light should cast shadows|
+|GetShadowAreaSize|`DirectionalLight`: instance |`number`|Returns the area size of the shadow|
+|SetShadowAreaSize|`DirectionalLight`: instance `number`: size||Defines the area size of the shadow|
+|GetShadowFollowCamera|`DirectionalLight`: instance |`boolean`|Returns true if the light position should snap to the camera position|
+|SetShadowFollowCamera|`DirectionalLight`: instance `boolean`: enabled||Defines whether or not the light position should snap to the camera position|
+|GetShadowMapResolution|`DirectionalLight`: instance |`number`|Returns the shadow map resolution|
+|SetShadowMapResolution|`DirectionalLight`: instance `number`: resolution||Sets the shadow map resolution (The resolution should be a power of 2 for better results)|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/Light.md b/Documentation/content/scripting/components/Light.md
new file mode 100644
index 000000000..f5df34bbc
--- /dev/null
+++ b/Documentation/content/scripting/components/Light.md
@@ -0,0 +1,35 @@
++++
+title = 'Light'
++++
+
+### Description
+Base class for any light
+
+- C++ related class: [`OvCore::ECS::Components::CLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CLight.h)
+- Inherits from lua usertype: [`Component`](Component)
+- Inherited by lua usertypes:
+ - [`PointLight`](../PointLight)
+ - [`SpotLight`](../SpotLight)
+ - [`DirectionalLight`](../DirectionalLight)
+ - [`AmbientBoxLight`](../AmbientBoxLight)
+ - [`AmbientSphereLight`](../AmbientSphereLight)
+
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Light`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetColor|`Light`: instance |`Vector3`|Returns light color|
+|GetIntensity|`Light`: instance |`number`|Returns light intensity|
+|SetColor|`Light`: instance `Vector3`: color ||Defines light color|
+|SetIntensity|`Light`: instance `number`: intensity ||Defines light intensity|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/MaterialRenderer.md b/Documentation/content/scripting/components/MaterialRenderer.md
new file mode 100644
index 000000000..888374399
--- /dev/null
+++ b/Documentation/content/scripting/components/MaterialRenderer.md
@@ -0,0 +1,27 @@
++++
+title = 'MaterialRenderer'
++++
+
+### Description
+A component that handle a material list, necessary for model rendering
+
+- C++ related class: [`OvCore::ECS::Components::CMaterialRenderer`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CMaterialRenderer.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`MaterialRenderer`|Default constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|SetMaterial|`MaterialRenderer`: instance `number`: index `Material`: material ||Defines the material to use for the given index|
+|SetUserMatrixElement|`MaterialRenderer`: instance `number`: row `number`: column `number`: value ||Defines an element of the user matrix|
+|GetUserMatrixElement|`MaterialRenderer`: instance `number`: row `number`: column |`number`|Returns an element of the user matrix|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/ModelRenderer.md b/Documentation/content/scripting/components/ModelRenderer.md
new file mode 100644
index 000000000..cd4d3028d
--- /dev/null
+++ b/Documentation/content/scripting/components/ModelRenderer.md
@@ -0,0 +1,28 @@
++++
+title = 'ModelRenderer'
++++
+
+### Description
+A `ModelRenderer` is necessary in combination with a `MaterialRenderer` to render a model in the world
+
+- C++ related class: [`OvCore::ECS::Components::CModelRenderer`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CModelRenderer.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||ModelRenderer||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetModel|`ModelRenderer`: instance |`Model`|Returns the current model|
+|SetModel|`ModelRenderer`: instance `Model`: model ||Defines the model to use|
+|GetFrustumBehaviour|`ModelRenderer`: instance |[`FrustumBehaviour`](FrustumBehaviour)|Returns the current bounding mode|
+|SetFrustumBehaviour|`ModelRenderer`: instance [`FrustumBehaviour`](FrustumBehaviour): behaviour ||Sets a bounding mode|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PhysicalBox.md b/Documentation/content/scripting/components/PhysicalBox.md
new file mode 100644
index 000000000..78d9e76dd
--- /dev/null
+++ b/Documentation/content/scripting/components/PhysicalBox.md
@@ -0,0 +1,26 @@
++++
+title = 'PhysicalBox'
++++
+
+### Description
+PhysicalObject with a box shape
+
+- C++ related class: [`OvCore::ECS::Components::CPhysicalBox`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPhysicalBox.h)
+- Inherits from lua usertype: [`PhysicalObject`](../PhysicalObject)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PhysicalBox`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetSize|`PhysicalBox`: instance |`Vector3`|Returns the size of the physical box|
+|SetSize|`PhysicalBox`: instance `Vector3`: size ||Sets the size of the physical box|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PhysicalCapsule.md b/Documentation/content/scripting/components/PhysicalCapsule.md
new file mode 100644
index 000000000..e07174cfe
--- /dev/null
+++ b/Documentation/content/scripting/components/PhysicalCapsule.md
@@ -0,0 +1,29 @@
++++
+title = 'PhysicalCapsule'
++++
+
+### Description
+Represent a physical object with a capsule shape
+
+- C++ related class: [`OvCore::ECS::Components::CPhysicalCapsule`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPhysicalCapsule.h)
+- Inherits from lua usertype: [`PhysicalObject`](../PhysicalObject)
+
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PhysicalCapsule`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetRadius|`PhysicalCapsule`: instance |`number`|Returns the radius of the physical capsule|
+|SetRadius|`PhysicalCapsule`: instance `number`: radius ||Sets the radius of the physical capsule|
+|GetHeight|`PhysicalCapsule`: instance |`number`|Returns the height of the physical capsule|
+|SetHeight|`PhysicalCapsule`: instance `number`: height ||Sets the height of the physical capsule|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PhysicalObject.md b/Documentation/content/scripting/components/PhysicalObject.md
new file mode 100644
index 000000000..a22d9ceb1
--- /dev/null
+++ b/Documentation/content/scripting/components/PhysicalObject.md
@@ -0,0 +1,51 @@
++++
+title = 'PhysicalObject'
++++
+
+### Description
+Base class for any entity that is physical
+
+- C++ related class: [`OvCore::ECS::Components::CPhysicalObject`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPhysicalObject.h)
+- Inherits from lua usertype: [`Component`](../Component)
+- Inherited by lua usertypes:
+ - [`PhysicalBox`](PhysicalBox)
+ - [`PhysicalSphere`](PhysicalSphere)
+ - [`PhysicalCapsule`](PhysicalCapsule)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PhysicalObject`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetMass|`PhysicalObject`: instance ||Returns the mass of the physical object|
+|SetMass|`PhysicalObject`: instance `number`: mass ||Defines a new mass for the physical object|
+|GetFriction|`PhysicalObject`: instance |`number`|Returns the friction of the physical object|
+|SetFriction|`PhysicalObject`: instance `number`: friction ||Defines a new friction for the physical object|
+|GetBounciness|`PhysicalObject`: instance |`number`|Returns the bounciness of the physical object|
+|SetBounciness|`PhysicalObject`: instance `number`: bounciness ||Defines a new bounciness for the physical object|
+|SetLinearVelocity|`PhysicalObject`: instance `Vector3`: linearVelocity ||Defines a new linear velocity for the physical object|
+|SetAngularVelocity|`PhysicalObject`: instance `Vector3`: angularVelocity ||Defines a new angular velocity for the physical object|
+|GetLinearVelocity|`PhysicalObject`: instance |`Vector3`|Returns the linear velocity of the physical object|
+|GetAngularVelocity|`PhysicalObject`: instance |`Vector3`|Returns the angular of the physical object|
+|SetLinearFactor|`PhysicalObject`: instance `Vector3`: linearFactor ||Defines a new linear factor for the physical object|
+|SetAngularFactor|`PhysicalObject`: instance `Vector3`: angularFactor ||Defines a new angular factor for the physical object|
+|GetLinearFactor|`PhysicalObject`: instance |`Vector3`|Returns the linear factor of the physical object|
+|GetAngularFactor|`PhysicalObject`: instance |`Vector3`|Returns the angular of the physical object|
+|IsTrigger|`PhysicalObject`: instance |`boolean`|Returns true if the physical object is a trigger|
+|SetTrigger|`PhysicalObject`: instance `boolean`: trigger ||Defines if the physical object should be a trigger or not|
+|AddForce|`PhysicalObject`: instance `Vector3`: force ||Add a force to the physical object|
+|AddImpulse|`PhysicalObject`: instance `Vector3`: impulse ||Add an impulse to the physical object|
+|ClearForces|`PhysicalObject`: instance ||Clear forces|
+|SetCollisionDetectionMode|`PhysicalObject`: instance `CollisionDetectionMode`: mode ||Defines a new collision detection mode for the physical object|
+|GetCollisionMode|`PhysicalObject`: instance |`CollisionDetectionMode`|Returns the collision detection mode of the physical object|
+|IsKinematic|`PhysicalObject`: instance |`boolean`|Returns true if the physical object is kinematic|
+|SetKinematic|`PhysicalObject`: instance `boolean`: kinematic ||Defines if the physical object should be kinematic or not|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PhysicalSphere.md b/Documentation/content/scripting/components/PhysicalSphere.md
new file mode 100644
index 000000000..2d3e634c3
--- /dev/null
+++ b/Documentation/content/scripting/components/PhysicalSphere.md
@@ -0,0 +1,26 @@
++++
+title = 'PhysicalSphere'
++++
+
+### Description
+Represent a physical object with a sphere shape
+
+- C++ related class: [`OvCore::ECS::Components::CPhysicalSphere`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPhysicalSphere.h)
+- Inherits from lua usertype: [`PhysicalObject`](../PhysicalObject)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PhysicalSphere`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetRadius|`PhysicalSphere`: instance |`number`|Returns the radius of the physical sphere|
+|SetRadius|`PhysicalSphere`: instance `number`: radius ||Sets the radius of the physical sphere|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PointLight.md b/Documentation/content/scripting/components/PointLight.md
new file mode 100644
index 000000000..ccfd81f90
--- /dev/null
+++ b/Documentation/content/scripting/components/PointLight.md
@@ -0,0 +1,30 @@
++++
+title = 'PointLight'
++++
+
+### Description
+A light that is localized and has attenuation
+
+- C++ related class: [`OvCore::ECS::Components::CPointLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPointLight.h)
+- Inherits from lua usertype: [`Light`](../Light)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PointLight`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetConstant|`PointLight`: instance |`number`|Returns the light constant|
+|GetLinear|`PointLight`: instance |`number`|Returns the light linear|
+|GetQuadratic|`PointLight`: instance |`number`|Returns the light quadratic|
+|SetConstant|`PointLight`: instance `number`: constant ||Sets the light constant|
+|SetLinear|`PointLight`: instance `number`: linear ||Sets the light linear|
+|SetQuadratic|`PointLight`: instance `number`: quadratic ||Sets the light quadratic|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/PostProcessStack.md b/Documentation/content/scripting/components/PostProcessStack.md
new file mode 100644
index 000000000..63200659b
--- /dev/null
+++ b/Documentation/content/scripting/components/PostProcessStack.md
@@ -0,0 +1,33 @@
++++
+title = 'PostProcessStack'
++++
+
+### Description
+Component that holds settings values for each post-processing effect.
+
+- C++ related class: [`OvCore::ECS::Components::CPostProcessStack`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CPostProcessStack.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`PostProcessStack`|Default Constructor|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetTonemappingSettings|`PostProcessStack`: instance |[`TonemappingSettings`](TonemappingSettings)||
+|GetBloomSettings|`PostProcessStack`: instance |[`BloomSettings`](BloomSettings)||
+|GetAutoExposureSettings|`PostProcessStack`: instance |[`AutoExposureSettings`](AutoExposureSettings)||
+|GetFXAASettings|`PostProcessStack`: instance |[`FXAASettings`](FXAASettings)||
+|SetTonemappingSettings|`PostProcessStack`: instance [`TonemappingSettings`](TonemappingSettings): settings|||
+|SetBloomSettings|`PostProcessStack`: instance [`BloomSettings`](BloomSettings): settings|||
+|SetAutoExposureSettings|`PostProcessStack`: instance [`AutoExposureSettings`](AutoExposureSettings): settings|||
+|SetFXAASettings|`PostProcessStack`: instance [`FXAASettings`](FXAASettings): settings|||
+
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/ReflectionProbe.md b/Documentation/content/scripting/components/ReflectionProbe.md
new file mode 100644
index 000000000..403ddc9fa
--- /dev/null
+++ b/Documentation/content/scripting/components/ReflectionProbe.md
@@ -0,0 +1,40 @@
++++
+title = 'ReflectionProbe'
++++
+
+### Description
+Component that captures the surrounding environment into a cubemap texture.
+
+- C++ related class: [`OvCore::ECS::Components::CReflectionProbe`](https://github.com/Overload-Technologies/Overload/blob/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CReflectionProbe.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|SetRefreshMode|`ReflectionProbe`: instance `ReflectionProbeRefreshMode`: mode||Sets the refresh mode of the reflection probe|
+|GetRefreshMode|`ReflectionProbe`: instance|`ReflectionProbeRefreshMode`|Returns the refresh mode of the reflection probe|
+|SetCaptureSpeed|`ReflectionProbe`: instance `ReflectionProbeCaptureSpeed`: speed||Determines how many faces the reflection probe should capture per frame|
+|GetCaptureSpeed|`ReflectionProbe`: instance|`ReflectionProbeCaptureSpeed`|Returns the capture speed (number of faces captured per frame)|
+|SetCubemapResolution|`ReflectionProbe`: instance `number`: resolution||Sets the cubemap resolution (must be a power of 2)|
+|GetCubemapResolution|`ReflectionProbe`: instance|`number`|Returns the cubemap resolution|
+|SetCapturePosition|`ReflectionProbe`: instance `Vector3`: position||Sets the position offset for the capture of the reflection probe|
+|GetCapturePosition|`ReflectionProbe`: instance|`Vector3`|Returns the position offset for the capture of the reflection probe|
+|SetBrightness|`ReflectionProbe`: instance `numeric`: brightness||Sets the brightness of the reflection probe|
+|GetBrightness|`ReflectionProbe`: instance|`numeric`|Returns the brightness of the reflection probe|
+|SetInfluencePolicy|`ReflectionProbe`: instance `ReflectionProbeInfluencePolicy`: policy||Determines the influence policy of the reflection probe|
+|GetInfluencePolicy|`ReflectionProbe`: instance|`ReflectionProbeInfluencePolicy`|Returns the influence policy of the reflection probe|
+|SetInfluenceSize|`ReflectionProbe`: instance `Vector3`: size||Sets the size of the influence volume of the reflection probe|
+|GetInfluenceSize|`ReflectionProbe`: instance|`Vector3`|Returns the size of the reflection probe volume|
+|SetBoxProjection|`ReflectionProbe`: instance `boolean`: enabled||Sets if the reflection probe should use box projection|
+|IsBoxProjectionEnabled|`ReflectionProbe`: instance|`boolean`|Returns if the reflection probe uses box projection|
+|RequestCapture|`ReflectionProbe`: instance `boolean`: forceImmediate = false||Requests the cubemap to be updated|
+|GetCubemap|`ReflectionProbe`: instance|`Texture`|Returns the last complete cubemap captured by the reflection probe|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/SpotLight.md b/Documentation/content/scripting/components/SpotLight.md
new file mode 100644
index 000000000..c6e88baf6
--- /dev/null
+++ b/Documentation/content/scripting/components/SpotLight.md
@@ -0,0 +1,34 @@
++++
+title = 'SpotLight'
++++
+
+### Description
+A light that is localized, has attenuation and has a direction
+
+- C++ related class: [`OvCore::ECS::Components::CSpotLight`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CSpotLight.h)
+- Inherits from lua usertype: [`Light`](../Light)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`SpotLight`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetConstant|`SpotLight`: instance |`number`|Returns the light constant|
+|GetLinear|`SpotLight`: instance |`number`|Returns the light linear|
+|GetQuadratic|`SpotLight`: instance |`number`|Returns the light quadratic|
+|GetCutOff|`SpotLight`: instance |`number`|Returns the light cutoff|
+|GetOuterCutOff|`SpotLight`: instance |`number`|Returns the light outercutoff|
+|SetConstant|`SpotLight`: instance `number`: constant |||Sets the light constant|
+|SetLinear|`SpotLight`: instance `number`: linear ||Sets the light linear|
+|SetQuadratic|`SpotLight`: instance `number`: quadratic ||Sets the light quadratic|
+|SetCutOff|`SpotLight`: instance `number`: cutOff ||Sets the light cutoff|
+|SetOuterCutOff|`SpotLight`: instance `number`: outerCutfOff ||Sets the light outercutoff|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/Transform.md b/Documentation/content/scripting/components/Transform.md
new file mode 100644
index 000000000..dbb0c0bbc
--- /dev/null
+++ b/Documentation/content/scripting/components/Transform.md
@@ -0,0 +1,51 @@
++++
+title = 'Transform'
++++
+
+### Description
+Represents the 3D transformations applied to an actor
+
+- C++ related class: [`OvCore::ECS::Components::CTransform`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CTransform.h)
+- Inherits from lua usertype: [`Component`](../Component)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Transform`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|SetPosition|`Transform`: instance `Vector3`: position ||Alias for SetLocalPosition|
+|SetRotation|`Transform`: instance `Quaternion`: rotation ||Alias for SetLocalRotation|
+|SetScale|`Transform`: instance `Vector3`: scale ||Alias for SetLocalScale|
+|SetLocalPosition|`Transform`: instance `Vector3`: position ||Sets the position of the transform in the local space|
+|SetLocalRotation|`Transform`: instance `Quaternion`: rotation ||Sets the rotation of the transform in the local space|
+|SetLocalScale|`Transform`: instance `Vector3`: scale ||Sets the scale of the transform in the local space|
+|SetWorldPosition|`Transform`: instance `Vector3`: position ||Sets the position of the transform in world space|
+|SetWorldRotation|`Transform`: instance `Quaternion`: rotation ||Sets the rotation of the transform in world space|
+|SetWorldScale|`Transform`: instance `Vector3`: scale ||Sets the scale of the transform in world space|
+|GetPosition|`Transform`: instance |`Vector3`|Alias for GetWorldPosition|
+|GetRotation|`Transform`: instance |`Quaternion`|Alias for GetWorldRotation|
+|GetScale|`Transform`: instance |`Vector3`|Alias for GetWorldScale|
+|GetLocalPosition|`Transform`: instance |`Vector3`|Returns the position in local space|
+|GetLocalRotation|`Transform`: instance |`Quaternion`|Returns the rotation in local space|
+|GetLocalScale|`Transform`: instance |`Vector3`|Returns the scale in local space|
+|GetWorldPosition|`Transform`: instance |`Vector3`|Returns the position in world space|
+|GetWorldRotation|`Transform`: instance |`Quaternion`|Returns the rotation in world space|
+|GetWorldScale|`Transform`: instance |`Vector3`|Returns the scale in world space|
+|GetForward|`Transform`: instance |`Vector3`|Alias for GetWorldForward|
+|GetUp|`Transform`: instance |`Vector3`|Alias for GetWorldUp|
+|GetRight|`Transform`: instance |`Vector3`|Alias for GetWorldRight|
+|GetLocalForward|`Transform`: instance |`Vector3`|Returns the transform local forward|
+|GetLocalUp|`Transform`: instance |`Vector3`|Returns the transform local up|
+|GetLocalRight|`Transform`: instance |`Vector3`|Returns the transform local right|
+|GetWorldForward|`Transform`: instance |`Vector3`|Returns the transform world forward|
+|GetWorldUp|`Transform`: instance |`Vector3`|Returns the transform world up|
+|GetWorldRight|`Transform`: instance |`Vector3`|Returns the transform world right|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/components/_index.md b/Documentation/content/scripting/components/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/debug/Debug.md b/Documentation/content/scripting/debug/Debug.md
new file mode 100644
index 000000000..6ff3b11f6
--- /dev/null
+++ b/Documentation/content/scripting/debug/Debug.md
@@ -0,0 +1,22 @@
++++
+title = 'Debug (table)'
++++
+
+### Description
+Global table containing debug-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|Log|`string`: message ||Log a message to the console with `Default` severity|
+|LogInfo|`string`: message ||Log a message to the console with `Info` severity|
+|LogWarning|`string`: message ||Log a message to the console with `Warning` severity|
+|LogError|`string`: message ||Log a message to the console with `Error` severity|
+
+### Examples
+```lua
+function MyScript:OnStart()
+ Debug.Log("Hello World!")
+end
+
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/debug/_index.md b/Documentation/content/scripting/debug/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/debug/tracy.md b/Documentation/content/scripting/debug/tracy.md
new file mode 100644
index 000000000..8f817ba94
--- /dev/null
+++ b/Documentation/content/scripting/debug/tracy.md
@@ -0,0 +1,35 @@
++++
+title = 'tracy (table)'
++++
+
+### Description
+Global table containing tracy-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|ZoneBegin|||Starts a profiling zone|
+|ZoneBeginN|`string`: name ||Starts a profiling zone with a custom name|
+|ZoneText|`string`: text ||Sets a text for the current zone|
+|Message|`string`: text ||Sends a message|
+|ZoneName|`string`: text ||Sets a zone name on a per-call basis|
+|ZoneEnd|||Ends the current profiling zone|
+
+### Examples
+```lua
+local MyScript = {}
+
+function MyScript:OnUpdate(deltaTime)
+ tracy.ZoneBegin()
+
+ for i = 1, 1000000 do
+ local a = math.random(1, 100)
+ local b = math.random(1, 100)
+ local c = a + b
+ end
+
+ tracy.ZoneEnd()
+end
+
+return MyScript
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/graphics/FrustumBehaviour.md b/Documentation/content/scripting/graphics/FrustumBehaviour.md
new file mode 100644
index 000000000..975be7efa
--- /dev/null
+++ b/Documentation/content/scripting/graphics/FrustumBehaviour.md
@@ -0,0 +1,15 @@
++++
+title = 'FrustumBehaviour (enum)'
++++
+
+### Description
+Defines how the model renderer bounding sphere should be interpreted
+
+- C++ related class: [`OvCore::ECS::Components::CModelRenderer::EFrustumBehaviour`](https://github.com/adriengivry/Overload/blob/eca3eeecbcc81013c5d23eaed903813d7547ecb0/Sources/Overload/OvCore/include/OvCore/ECS/Components/CModelRenderer.h#L27)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|DISABLED|`number`||
+|MESH_BOUNDS|`number`||
+|CUSTOM_BOUNDS|`number`||
diff --git a/Documentation/content/scripting/graphics/ProjectionMode.md b/Documentation/content/scripting/graphics/ProjectionMode.md
new file mode 100644
index 000000000..53a128bd2
--- /dev/null
+++ b/Documentation/content/scripting/graphics/ProjectionMode.md
@@ -0,0 +1,14 @@
++++
+title = 'ProjectionMode (enum)'
++++
+
+### Description
+Projection modes, mostly used for cameras
+
+- C++ related class: [`OvRendering::Settings::EProjectionMode`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvRendering/include/OvRendering/Settings/EProjectionMode.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|ORTHOGRAPHIC|`number`||
+|PERSPECTIVE|`number`||
diff --git a/Documentation/content/scripting/graphics/ReflectionProbeCaptureSpeed.md b/Documentation/content/scripting/graphics/ReflectionProbeCaptureSpeed.md
new file mode 100644
index 000000000..8e6afa5db
--- /dev/null
+++ b/Documentation/content/scripting/graphics/ReflectionProbeCaptureSpeed.md
@@ -0,0 +1,16 @@
++++
+title = 'ReflectionProbeCaptureSpeed (enum)'
++++
+
+### Description
+Enumeration of available capture speeds for reflection probes.
+
+- C++ related class: [`OvCore::ECS::Components::CReflectionPRobe::ECaptureSpeed`](https://github.com/Overload-Technologies/Overload/blob/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CReflectionProbe.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|ONE_FACE|`number`||
+|TWO_FACES|`number`||
+|THREE_FACES|`number`||
+|SIX_FACES|`number`||
diff --git a/Documentation/content/scripting/graphics/ReflectionProbeInfluencePolicy.md b/Documentation/content/scripting/graphics/ReflectionProbeInfluencePolicy.md
new file mode 100644
index 000000000..134c544b2
--- /dev/null
+++ b/Documentation/content/scripting/graphics/ReflectionProbeInfluencePolicy.md
@@ -0,0 +1,14 @@
++++
+title = 'ReflectionProbeInfluencePolicy (enum)'
++++
+
+### Description
+Enumeration of available influence policies for reflection probes.
+
+- C++ related class: [`OvCore::ECS::Components::CReflectionPRobe::EInfluencePolicy`](https://github.com/Overload-Technologies/Overload/blob/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CReflectionProbe.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|LOCAL|`number`||
+|GLOBAL|`number`||
diff --git a/Documentation/content/scripting/graphics/ReflectionProbeRefreshMode.md b/Documentation/content/scripting/graphics/ReflectionProbeRefreshMode.md
new file mode 100644
index 000000000..5bd278b1f
--- /dev/null
+++ b/Documentation/content/scripting/graphics/ReflectionProbeRefreshMode.md
@@ -0,0 +1,15 @@
++++
+title = 'ReflectionProbeRefreshMode (enum)'
++++
+
+### Description
+Enumeration of refresh modes that can be used by reflection probes.
+
+- C++ related class: [`OvCore::ECS::Components::CReflectionPRobe::ERefreshMode`](https://github.com/Overload-Technologies/Overload/blob/main/Sources/Overload/OvCore/include/OvCore/ECS/Components/CReflectionProbe.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|REALTIME|`number`||
+|ONCE|`number`||
+|ON_DEMAND|`number`||
diff --git a/Documentation/content/scripting/graphics/TonemappingMode.md b/Documentation/content/scripting/graphics/TonemappingMode.md
new file mode 100644
index 000000000..d7d395be2
--- /dev/null
+++ b/Documentation/content/scripting/graphics/TonemappingMode.md
@@ -0,0 +1,18 @@
++++
+title = 'TonemappingMode (enum)'
++++
+
+### Description
+Tonemapping modes
+
+- C++ related class: [`OvCore::Rendering::PostProcess`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/TonemappingEffect.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|NEUTRAL|`number`||
+|REINHARD|`number`||
+|REINHARD_JODIE|`number`||
+|UNCHARTED2|`number`||
+|UNCHARTED2_FILMIC|`number`||
+|ACES|`number`||
diff --git a/Documentation/content/scripting/graphics/_index.md b/Documentation/content/scripting/graphics/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/graphics/effects/AutoExposureSettings.md b/Documentation/content/scripting/graphics/effects/AutoExposureSettings.md
new file mode 100644
index 000000000..24c106ca1
--- /dev/null
+++ b/Documentation/content/scripting/graphics/effects/AutoExposureSettings.md
@@ -0,0 +1,28 @@
++++
+title = 'AutoExposureSettings'
++++
+
+### Description
+Contains all the settings for the auto-exposure effect.
+
+- C++ related class: [`OvCore::Rendering::PostProcess::AutoExposureSettings`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/AutoExposureEffect.h)
+- Inherits from lua usertype: [`EffectSettings`](EffectSettings)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|CenterWeightBias|`number`||
+|MinLuminanceEV|`number`||
+|MaxLuminanceEV|`number`||
+|ExposureCompensationEV|`number`||
+|SpeedDown|`number`||
+|SpeedUp|`number`||
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/graphics/effects/BloomSettings.md b/Documentation/content/scripting/graphics/effects/BloomSettings.md
new file mode 100644
index 000000000..c534368db
--- /dev/null
+++ b/Documentation/content/scripting/graphics/effects/BloomSettings.md
@@ -0,0 +1,24 @@
++++
+title = 'BloomSettings'
++++
+
+### Description
+Contains all the settings for the bloom effect.
+
+- C++ related class: [`OvCore::Rendering::PostProcess::BloomEffect`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/BloomEffect.h)
+- Inherits from lua usertype: [`EffectSettings`](EffectSettings)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|Intensity|`number`||
+|Passes|`number`||
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/graphics/effects/EffectSettings.md b/Documentation/content/scripting/graphics/effects/EffectSettings.md
new file mode 100644
index 000000000..30f7a85fb
--- /dev/null
+++ b/Documentation/content/scripting/graphics/effects/EffectSettings.md
@@ -0,0 +1,27 @@
++++
+title = 'EffectSettings'
++++
+
+### Description
+Base effect settings structure
+
+- C++ related class: [`OvCore::Rendering::PostProcess::EffectSettings`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/AEffect.h)
+- Inherited by lua usertypes:
+ - [`BloomSettings`](BloomSettings)
+ - [`AutoExposureSettings`](AutoExposureSettings)
+ - [`TonemappingSettings`](TonemappingSettings)
+ - [`FXAASettings`](FXAASettings)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|Enabled|`boolean`|Defines if this effect is enabled|
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/graphics/effects/FXAASettings.md b/Documentation/content/scripting/graphics/effects/FXAASettings.md
new file mode 100644
index 000000000..600d2d9e2
--- /dev/null
+++ b/Documentation/content/scripting/graphics/effects/FXAASettings.md
@@ -0,0 +1,21 @@
++++
+title = 'FXAASettings'
++++
+
+### Description
+Contains all the settings for the FXAA effect.
+
+- C++ related class: [`OvCore::Rendering::PostProcess::FXAASettings`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/FXAAEffect.h)
+- Inherits from lua usertype: [`EffectSettings`](EffectSettings)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/graphics/effects/TonemappingSettings.md b/Documentation/content/scripting/graphics/effects/TonemappingSettings.md
new file mode 100644
index 000000000..04c7477a2
--- /dev/null
+++ b/Documentation/content/scripting/graphics/effects/TonemappingSettings.md
@@ -0,0 +1,25 @@
++++
+title = 'TonemappingSettings'
++++
+
+### Description
+Contains all the settings for the tone mapping effect.
+
+- C++ related class: [`OvCore::Rendering::PostProcess::TonemappingSettings`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/Rendering/PostProcess/TonemappingEffect.h)
+- Inherits from lua usertype: [`EffectSettings`](EffectSettings)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|Exposure|`number`||
+|Mode|`TonemappingMode`||
+|GammaCorrection|`boolean`||
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/graphics/effects/_index.md b/Documentation/content/scripting/graphics/effects/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/inputs/Inputs.md b/Documentation/content/scripting/inputs/Inputs.md
new file mode 100644
index 000000000..17c76f6b2
--- /dev/null
+++ b/Documentation/content/scripting/inputs/Inputs.md
@@ -0,0 +1,54 @@
++++
+title = 'Inputs (table)'
++++
+
+### Description
+Global table containing input-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetKeyDown|`Key`: key |`boolean`|Returns true if the key has been pressed during the current frame|
+|GetKeyUp|`Key`: key |`boolean`|Returns true if the key has been released during the current frame|
+|GetKey|`Key`: key |`boolean`|Returns true if the key is currently down|
+|GetMouseButtonDown|`MouseButton`: mouseButton |`boolean`|Returns true if the mouse button has been pressed during the current frame|
+|GetMouseButtonUp|`MouseButton`: mouseButton |`boolean`|Returns true if the mouse button has been released during the current frame|
+|GetMouseButton|`MouseButton`: mouseButton |`boolean`|Returns true if the mouse button is currently down|
+|GetMousePos||`Vector2`|Returns the current position of the mouse cursor|
+|GetMouseScroll||`Vector2`|Returns the current scroll value|
+|LockMouse|||Locks and hides the mouse cursor|
+|UnlockMouse|||Unlocks and shows the mouse cursor|
+
+### Operators
+```lua
+function MyScript::OnUpdate()
+ -- Check if a key has been pressed this frame
+ if Inputs.GetKeyDown(Key.SPACE):
+ Debug.Log("Space pressed this frame!")
+ end
+
+ local movementDirection = Vector2.new(0, 0)
+
+ -- Check if W (move up) is being pressed
+ if Inputs.GetKey(Key.W):
+ movementDirection.y = movementDirection.y + 1
+ end
+
+ -- Check if S (move down) is being pressed
+ if Inputs.GetKey(Key.S):
+ movementDirection.y = movementDirection.y - 1
+ end
+
+ -- Check if D (move right) is being pressed
+ if Inputs.GetKey(Key.D):
+ movementDirection.x = movementDirection.x + 1
+ end
+
+ -- Check if A (move left) is being pressed
+ if Inputs.GetKey(Key.A):
+ movementDirection.x = movementDirection.x - 1
+ end
+
+ Debug.Log("Movement Direction: " .. movementDirection)
+end
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/inputs/Key.md b/Documentation/content/scripting/inputs/Key.md
new file mode 100644
index 000000000..206e4a186
--- /dev/null
+++ b/Documentation/content/scripting/inputs/Key.md
@@ -0,0 +1,149 @@
++++
+title = 'Key (enum)'
++++
+
+### Description
+Enumeration of keyboard keys.
+
+- C++ related class: [`OvWindowing::Inputs::EKey`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvWindowing/include/OvWindowing/Inputs/EKey.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|UNKNOWN|`number`||
+|SPACE|`number`||
+|APOSTROPHE|`number`||
+|COMMA|`number`||
+|MINUS|`number`||
+|PERIOD|`number`||
+|SLASH|`number`||
+|ALPHA_0|`number`||
+|ALPHA_1|`number`||
+|ALPHA_2|`number`||
+|ALPHA_3|`number`||
+|ALPHA_4|`number`||
+|ALPHA_5|`number`||
+|ALPHA_6|`number`||
+|ALPHA_7|`number`||
+|ALPHA_8|`number`||
+|ALPHA_9|`number`||
+|SEMICOLON|`number`||
+|EQUAL|`number`||
+|A|`number`||
+|B|`number`||
+|C|`number`||
+|D|`number`||
+|E|`number`||
+|F|`number`||
+|G|`number`||
+|H|`number`||
+|I|`number`||
+|J|`number`||
+|K|`number`||
+|L|`number`||
+|M|`number`||
+|N|`number`||
+|O|`number`||
+|P|`number`||
+|Q|`number`||
+|R|`number`||
+|S|`number`||
+|T|`number`||
+|U|`number`||
+|V|`number`||
+|W|`number`||
+|X|`number`||
+|Y|`number`||
+|Z|`number`||
+|LEFT_BRACKET|`number`||
+|BACKSLASH|`number`||
+|RIGHT_BRACKET|`number`||
+|GRAVE_ACCENT|`number`||
+|WORLD_1|`number`||
+|WORLD_2|`number`||
+|ESCAPE|`number`||
+|ENTER|`number`||
+|TAB|`number`||
+|BACKSPACE|`number`||
+|INSERT|`number`||
+|DELETE|`number`||
+|RIGHT|`number`||
+|LEFT|`number`||
+|DOWN|`number`||
+|UP|`number`||
+|PAGE_UP|`number`||
+|PAGE_DOWN|`number`||
+|HOME|`number`||
+|END|`number`||
+|CAPS_LOCK|`number`||
+|SCROLL_LOCK|`number`||
+|NUM_LOCK|`number`||
+|PRINT_SCREEN|`number`||
+|PAUSE|`number`||
+|F1|`number`||
+|F2|`number`||
+|F3|`number`||
+|F4|`number`||
+|F5|`number`||
+|F6|`number`||
+|F7|`number`||
+|F8|`number`||
+|F9|`number`||
+|F10|`number`||
+|F11|`number`||
+|F12|`number`||
+|F13|`number`||
+|F14|`number`||
+|F15|`number`||
+|F16|`number`||
+|F17|`number`||
+|F18|`number`||
+|F19|`number`||
+|F20|`number`||
+|F21|`number`||
+|F22|`number`||
+|F23|`number`||
+|F24|`number`||
+|F25|`number`||
+|KP_0|`number`||
+|KP_1|`number`||
+|KP_2|`number`||
+|KP_3|`number`||
+|KP_4|`number`||
+|KP_5|`number`||
+|KP_6|`number`||
+|KP_7|`number`||
+|KP_8|`number`||
+|KP_9|`number`||
+|KP_DECIMAL|`number`||
+|KP_DIVIDE|`number`||
+|KP_MULTIPLY|`number`||
+|KP_SUBTRACT|`number`||
+|KP_ADD|`number`||
+|KP_ENTER|`number`||
+|KP_EQUAL|`number`||
+|LEFT_SHIFT|`number`||
+|LEFT_CONTROL|`number`||
+|LEFT_ALT|`number`||
+|LEFT_SUPER|`number`||
+|RIGHT_SHIFT|`number`||
+|RIGHT_CONTROL|`number`||
+|RIGHT_ALT|`number`||
+|RIGHT_SUPER|`number`||
+|MENU|`number`||
+
+### Examples
+```lua
+function MyScript::OnUpdate()
+ local spaceKey = Key.SPACE
+ local upArrowKey = Key.UP
+
+ if Inputs.GetKeyDown(spaceKey):
+ Debug.Log("Space key pressed!")
+ end
+
+ if Inputs.GetKeyDown(upArrowKey):
+ Debug.Log("Up arrow key pressed!")
+ end
+end
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/inputs/MouseButton.md b/Documentation/content/scripting/inputs/MouseButton.md
new file mode 100644
index 000000000..5fe9e2c48
--- /dev/null
+++ b/Documentation/content/scripting/inputs/MouseButton.md
@@ -0,0 +1,23 @@
++++
+title = 'MouseButton (enum)'
++++
+
+### Description
+Enumeration of mouse buttons.
+
+- C++ related class: [`OvWindowing::Inputs::EMouseButton`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvWindowing/include/OvWindowing/Inputs/EMouseButton.h)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|BUTTON_1|`number`||
+|BUTTON_2|`number`||
+|BUTTON_3|`number`||
+|BUTTON_4|`number`||
+|BUTTON_5|`number`||
+|BUTTON_6|`number`||
+|BUTTON_7|`number`||
+|BUTTON_8|`number`||
+|BUTTON_LEFT|`number`||
+|BUTTON_RIGHT|`number`||
+|BUTTON_MIDDLE|`number`||
diff --git a/Documentation/content/scripting/inputs/_index.md b/Documentation/content/scripting/inputs/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/maths/Math.md b/Documentation/content/scripting/maths/Math.md
new file mode 100644
index 000000000..022723fce
--- /dev/null
+++ b/Documentation/content/scripting/maths/Math.md
@@ -0,0 +1,21 @@
++++
+title = 'Math (table)'
++++
+
+### Description
+Global table containing math-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|RandomInt|`number`: min `number`: max |`number`|Generate a random number between two given integers (Closed interval)|
+|RandomFloat|`number`: min `number`: max |`number`|Generate a random number between two given floats (Closed interval)|
+|CheckPercentage|`number`: percentage |`boolean`|Verify if the percentage is satisfied|
+
+### Examples
+```lua
+function MyScript::OnStart()
+ local randomInt = Math.RandomInt(0, 100)
+ local randomFloat = Math.RandomFloat(0.0, 1.0)
+end
+```
diff --git a/Documentation/content/scripting/maths/Matrix3.md b/Documentation/content/scripting/maths/Matrix3.md
new file mode 100644
index 000000000..4884a2f26
--- /dev/null
+++ b/Documentation/content/scripting/maths/Matrix3.md
@@ -0,0 +1,52 @@
++++
+title = 'Matrix3'
++++
+
+### Description
+Mathematic representation of a 3x3 Matrix of floats
+
+- C++ related class: [`OvMaths::FMatrix3`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FMatrix3.h)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Matrix3`|Default constructor|
+|new|`number`: value |`Matrix3`|Constructor setting all components to the given value|
+|new|`number`: m00 `number`: m01 `number`: m02 `number`: m10 `number`: m11 `number`: m12 `number`: m20 `number`: m21 `number`: m22 |`Matrix3`|Instantiate a Matrix3 with all the given component values|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|Identity||`Matrix3`|Returns an identity Matrix3|
+|IsIdentity|`Matrix3`: instance |`boolean`|Returns true if the matrix is identity|
+|Determinant|`Matrix3`: instance |`number`|Returns matrix determinant|
+|Transpose|`Matrix3`: instance |`Matrix3`|Returns the transpose of the given matrix|
+|Cofactor|`Matrix3`: instance |`Matrix3`|Returns the cofactor of the given matrix|
+|Minor|`Matrix3`: instance |`Matrix3`|Returns the minor of the given matrix|
+|Adjoint|`Matrix3`: instance |`Matrix3`|Returns the adjoint of the given matrix|
+|Inverse|`Matrix3`: instance |`Matrix3`|Returns the inverse of the given matrix|
+|Translation|`Vector2`: translation |`Matrix3`|Returns a translation matrix from the given translation|
+|Translate|`Matrix3`: instance `Vector2`: translation |`Matrix3`|Returns a matrix translated using the given translation|
+|Rotation|`number`: angle |`Matrix3`|Returns a rotation matrix from the given rotation angle (degrees)|
+|Rotate|`Matrix3`: instance `number`: angle |`Matrix3`|Returns a matrix rotated using the given rotation angle (degrees)|
+|Scaling|`Vector2`: scale |`Matrix3`|Returns a scaling matrix from the given scale|
+|Scale|`Matrix3`: instance `Vector2`: scale |`Matrix3`|Returns a scaled matrix using the given scale|
+|GetRow|`Matrix3`: instance `number`: index |`Vector3`|Returns the given row|
+|GetColumn|`Matrix3`: instance `number`: index |`Vector3`|Returns the given column|
+|Get|`Matrix3`: instance `number`: row `number`: column |`number`|Returns element at index (row,column)|
+|Set|`Matrix3`: instance `number`: row `number`: column `number`: value ||Sets element at index (row,column)|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Matrix3 + Matrix3`|Adds two Matrix3|
+|`Matrix3 - Matrix3`|Substracts two Matrix3|
+|`Matrix3 * number`|Multiplies each components of a Matrix3 by a number|
+|`Matrix3 * Vector3`|Multiplies a Matrix3 by a Vector3|
+|`Matrix3 * Matrix3`|Multiplies two Matrix3|
+|`Matrix3 / number`|Divides each components of a Matrix3 by a number|
+|`Matrix3 / Matrix3`|Divides two Matrix3|
+|`to_string(Matrix3)`|Converts a Matrix3 to a string|
diff --git a/Documentation/content/scripting/maths/Matrix4.md b/Documentation/content/scripting/maths/Matrix4.md
new file mode 100644
index 000000000..b58660d7d
--- /dev/null
+++ b/Documentation/content/scripting/maths/Matrix4.md
@@ -0,0 +1,61 @@
++++
+title = 'Matrix4'
++++
+
+### Description
+Mathematic representation of a 4x4 Matrix of floats
+
+- C++ related class: [`OvMaths::FMatrix4`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FMatrix4.h)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Matrix4`|Default constructor|
+|new|`number`: m00 `number`: m01 `number`: m02 `number`: m03 `number`: m10 `number`: m11 `number`: m12 `number`: m13 `number`: m20 `number`: m21 `number`: m22 `number`: m23 `number`: m30 `number`: m31 `number`: m32 `number`: m33 |`Matrix4`||
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|Identity||`Matrix4`|Returns an identity Matrix4|
+|IsIdentity|`Matrix4`: instance |`boolean`|Returns true if the matrix is identity|
+|Determinant|`Matrix4`: instance |`number`|Returns matrix determinant|
+|Transpose|`Matrix4`: instance |`Matrix4`|Returns the transpose of the given matrix|
+|Minor|`Matrix4`: instance |`number`|Returns matrix minor|
+|Inverse|`Matrix4`: instance |`Matrix4`|Rturns the inverse of the given matrix|
+|Translation|`Vector3`: translation |`Matrix4`|Returns a translation matrix from the given translation|
+|Translate|`Matrix4`: instance `Vector3`: translation |`Matrix4`|Returns a matrix translated using the given translation|
+|RotationOnAxisX|`number`: xAngle |`Matrix4`|Returns a rotation matrix constructed using the given X axis angle|
+|RotateOnAxisX|`Matrix4`: instance `number`: xAngle |`Matrix4`|Returns a matrix rotated around the given X axis angle|
+|RotationOnAxisY|`number`: yAngle |`Matrix4`|Returns a rotation matrix constructed using the given Y axis angle|
+|RotateOnAxisY|`Matrix4`: instance `number`: yAngle |`Matrix4`|Returns a matrix rotated around the given Y axis angle|
+|RotationOnAxisZ|`number`: zAngle |`Matrix4`|Returns a rotation matrix constructed using the given Z axis angle|
+|RotateOnAxisZ|`Matrix4`: instance `number`: zAngle |`Matrix4`|Returns a matrix rotated around the given Z axis angle|
+|RotationYXZ|`number`: angle |`Matrix4`|Returns a rotation matrix constructed using the given axis angle (Applied to all angles in YXZ order)|
+|RotateYXZ|`Matrix4`: instance `number`: angle |`Matrix4`|Returns a rotation matrix rotated using the given axis angle (Applied to all angles in YXZ order)|
+|Rotation|`Quaternion`: rotation |`Matrix4`|Returns a rotation matrix created from the given quaternion|
+|Rotate|`Matrix4`: instance `Quaternion`: rotation |`Matrix4`|Returns a matrix rotated using the given quaternion|
+|Scaling|`Vector3`: scale |`Matrix4`|Returns a scaling matrix from the given scale|
+|Scale|`Matrix4`: instance `Vector3`: scale |`Matrix4`|Returns a scaled matrix using the given scale|
+|GetRow|`Matrix4`: instance `number`: row |`Vector4`|Returns the given row|
+|GetColumn|`Matrix4`: instance `number`: column |`Vector4`|Returns the given column|
+|CreatePerspective|`number`: fov `number`: aspectRatio `number`: near `number`: far |`Matrix4`|Creates a perspective matrix|
+|CreateView|`number`: eyeX `number`: eyeY `number`: eyeZ `number`: lookX `number`: lookY `number`: lookZ `number`: upX `number`: upY `number`: upZ |`Matrix4`|Creates a view matrix|
+|CreateFrustum|`number`: left `number`: right `number`: bottom `number`: top `number`: near `number`: far |`Matrix4`|Create a frustum matrix|
+|Get|`Matrix4`: instance `number`: row `number`: column |`number`|Returns element at index (row,column)|
+|Set|`Matrix4`: instance `number`: row `number`: column `number`: value ||Sets element at index (row,column)|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Matrix4 + Matrix4`|Adds two Matrix4|
+|`Matrix4 - number`|Substracts a Matrix4 and a number|
+|`Matrix4 - Matrix4`|Substracts two Matrix4|
+|`Matrix4 * number`|Multiplies each component of a Matrix4 by a number|
+|`Matrix4 * Vector4`|Multiplies a Matrix4 by a Vector4|
+|`Matrix4 * Matrix4`|Multiplies two Matrix4|
+|`Matrix4 / number`|Divides each component of a Matrix4 by a number|
+|`Matrix4 / Matrix4`|Divides two Matrix4|
+|`to_string(Matrix4)`|Converts a Matrix4 to a string|
diff --git a/Documentation/content/scripting/maths/Quaternion.md b/Documentation/content/scripting/maths/Quaternion.md
new file mode 100644
index 000000000..22811cab3
--- /dev/null
+++ b/Documentation/content/scripting/maths/Quaternion.md
@@ -0,0 +1,60 @@
++++
+title = 'Quaternion'
++++
+
+### Description
+Mathematic representation of a Quaternion with float precision
+
+- C++ related class: [`OvMaths::FQuaternion`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FQuaternion.h)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|x|`number`|X component of the Quaternion|
+|y|`number`|Y component of the Quaternion|
+|z|`number`|Z component of the Quaternion|
+|w|`number`|W component of the Quaternion|
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Quaternion`|Default Quaternion constructor (Creates an identity quaternion with 1 as w)|
+|new|`number`: real |`Quaternion`|Creates an identity quaternion with a defined real value|
+|new|`number`: x `number`: y `number`: z `number`: w |`Quaternion`|Creates a quaternion from a set of 4 floats (x, y, z, w)|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|IsIdentity|`Quaternion`: instance |`boolean`|Returns true if the quaternion is Identity (x, y and z components are 0)|
+|IsPure|`Quaternion`: instance |`boolean`|Returns true if the quaternion is pure (w is 0)|
+|IsNormalized|`Quaternion`: instance |`boolean`|Returns true if the quaternion is nornalized|
+|Dot|`Quaternion`: a `Quaternion`: b |`number`|Calculates the dot product between two quaternions|
+|Normalize|`Quaternion`: instance |`Quaternion`|Returns the normalized version of the given quaternion|
+|Length|`Quaternion`: instance |`number`|Returns the length of the given quaternion|
+|LengthSquare|`Quaternion`: instance |`number`|Returns the squared length of the given quaternion. This function is faster than Quaternion.Length|
+|GetAngle|`Quaternion`: instance |`number`|Returns the angle of the given quaternion|
+|GetRotationAxis|`Quaternion`: instance |`Vector3`|Returns the rotation axis of the given quaternion|
+|Inverse|`Quaternion`: instance |`Quaternion`|Returns the inverse of the quaternion|
+|Conjugate|`Quaternion`: instance |`Quaternion`|Returns the conjugate of the quaternion|
+|Square|`Quaternion`: instance |`Quaternion`|Returns the squared version of this quaternion|
+|GetAxisAndAngle|`Quaternion`: instance |`Vector3`: axis `number`: angle |Returns the axis and the angle of the given quaternion|
+|AngularDistance|`Quaternion`: a `Quaternion`: b |`number`|Returns the angle between two quaternions|
+|Lerp|`Quaternion`: a `Quaternion`: b `number`: t |`Quaternion`|Returns the linear interpolation of two quaternions based on the given interpolation coefficient|
+|Slerp|`Quaternion`: a `Quaternion`: b `number`: t |`Quaternion`|Returns the spherical linear interpolation of two quaternions based on the given interpolation coefficient|
+|Nlerp|`Quaternion`: a `Quaternion`: b `number`: t |`Quaternion`|Returns the nornmalized linear interpolation of two quaternions based on the given interpolation coefficient|
+|RotatePoint|`Vector3`: point `Quaternion`: quaternion `Vector3`: pivot |`Vector3`|Rotates a point around a pivot using a quaternion|
+|EulerAngles|`Quaternion`: instance |`Vector`|Returns euler axis angles (In degrees)|
+|ToMatrix3|`Quaternion`: instance |`Matrix3`|Returns a rotation matrix (3x3) out of the given quaternion|
+|ToMatrix4|`Quaternion`: instance |`Matrix4`|Returns a rotation matrix (4x4) out of the given quaternion|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Quaternion + Quaternion`|Adds two Quaternion|
+|`Quaternion - Quaternion`|Substracts two Quaternion|
+|`Quaternion * number`|Multiplies each components of a Quaternion by a number|
+|`Quaternion * Vector3`|Multiplies a Quaternion by a Vector3|
+|`Quaternion * Matrix3`|Multiplies a Quaternion by a Matrix3|
+|`Quaternion / number`|Divides each component of a Quaternion by a number|
+|`to_string(Quaternion)`|Converts a Quaternion to a string|
+
diff --git a/Documentation/content/scripting/maths/Vector2.md b/Documentation/content/scripting/maths/Vector2.md
new file mode 100644
index 000000000..211497062
--- /dev/null
+++ b/Documentation/content/scripting/maths/Vector2.md
@@ -0,0 +1,41 @@
++++
+title = 'Vector2'
++++
+
+### Description
+Mathematic representation of a 2D vector of floats
+
+- C++ related class: [`OvMaths::FVector2`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FVector2.h)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|x|`number`|X component of the Vector2|
+|y|`number`|Y component of the Vector2|
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Vector2`|Creates an instance of Vector2 with x and y equals to zero|
+|new|`number`: x `number`: y |`Vector2`|Creates an instance of Vector2 with the given values|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|One||`Vector2`|Returns a (1,1) Vector2|
+|Zero||`Vector`|Returns a (0,0) Vector2|
+|Length|`Vector2`: instance |`number`|Returns the length of the given Vector2|
+|Dot|`Vector2`: a `Vector2`: b |`number`|Returns the dot product of the two given Vector2|
+|Normalize|`Vector2`: instance |`Vector2`|Returns the normalized version of the given Vector2|
+|Lerp|`Vector2`: a `Vector2`: b `number`: t |`Vector2`|Calculates the linear interpolation between two Vector2 using the given alpha|
+|AngleBetween|`Vector2`: a `Vector2`: b |`number`|Calculates the angle between two Vector2|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Vector2 + Vector2`|Adds two Vector2|
+|`Vector2 - Vector2`|Substracts two Vector2|
+|`-Vector2`|Multiplies each components of a Vector2 by -1|
+|`Vector2 * number`|Multiplies each component of a Vector2 by a number|
+|`Vector2 / number`|Divides each component of a Vector2 by a number|
+|`to_string(Vector2)`|Converts a Vector2 to a string|
diff --git a/Documentation/content/scripting/maths/Vector3.md b/Documentation/content/scripting/maths/Vector3.md
new file mode 100644
index 000000000..18c26ccb2
--- /dev/null
+++ b/Documentation/content/scripting/maths/Vector3.md
@@ -0,0 +1,50 @@
++++
+title = 'Vector3'
++++
+
+### Description
+Mathematic representation of a 3D vector of floats
+
+- C++ related class: [`OvMaths::FVector3`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FVector3.h)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|x|`number`|X component of the Vector3|
+|y|`number`|Y component of the Vector3|
+|z|`number`|Z component of the Vector3|
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Vector3`|Create an instance of Vector3 with x, y and z equals to zero|
+|new|`number`: x `number`: y `number`: z |`Vector3`|Create an instance of Vector3 with the given values|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|One||`Vector3`|Returns a (1,1,1) Vector3|
+|Zero||`Vector3`|Returns a (0,0,0) Vector3|
+|Forward||`Vector3`|Returns a (0,0,1) Vector3|
+|Up||`Vector3`|Returns a (0,1,0) Vector3|
+|Right||`Vector3`|Returns a (1,0,0) Vector3|
+|Backward||`Vector3`|Returns a (0,0,-1) Vector3|
+|Down||`Vector3`|Returns a (0,-1,0) Vector3|
+|Left||`Vector3`|Returns a (-1,0,0) Vector3|
+|Length|`Vector3`: instance |`number`|Returns the length of the given Vector3|
+|Dot|`Vector3`: a `Vector3`: b |`number`|Returns the dot product of the two given Vector3|
+|Cross|`Vector3`: a `Vector3`: b |`Vector3`|Returns the cross product of the two given Vector3|
+|Normalize|`Vector3`: instance |`Vector3`|Returns the normalized version of the given Vector3|
+|Lerp|`Vector3`: a `Vector3`: instance `number`: t |`Vector3`|Calculates the linear interpolation between two Vector3 using the given alpha|
+|AngleBetween|`Vector3`: a `Vector3`: b |`number`|Calculates the angle between two Vector3|
+|Distance|`Vector3`: a `b`: instance |`number`|Returns the distance between the given Vector3|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Vector3 + Vector3`|Adds two Vector3|
+|`Vector3 - Vector3`|Substracts two Vector3|
+|`-Vector3`|Multiplies each components of a Vector3 by -1|
+|`Vector3 * number`|Multiplies each component of a Vector3 by a number|
+|`Vector3 / Vector3`|Divides each component of a Vector3 by a number|
+|`to_string(Vector3)`|Converts a Vector3 to a string|
diff --git a/Documentation/content/scripting/maths/Vector4.md b/Documentation/content/scripting/maths/Vector4.md
new file mode 100644
index 000000000..e965b64c4
--- /dev/null
+++ b/Documentation/content/scripting/maths/Vector4.md
@@ -0,0 +1,42 @@
++++
+title = 'Vector4'
++++
+
+### Description
+Mathematic representation of a 4D vector of floats
+
+- C++ related class: [`OvMaths::FVector4`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvMaths/include/OvMaths/FVector4.h)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|x|`number`|X component of the Vector4|
+|y|`number`|Y component of the Vector4|
+|z|`number`|Z component of the Vector4|
+|w|`number`|W component of the Vector4|
+
+### Constructors
+|Name|Input|Output|Description|
+|-|-|-|-|
+|new||`Vector4`|Creates an instance of Vector4 with x, y, z and w equals to zero|
+|new|`number`: x `number`: y `number`: z `number`: w |`Vector4`|Creates an instance of Vector4 with the given values|
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|One||`Vector4`|Returns a (1,1,1,1) Vector4|
+|Zero||`Vector4`|Returns a (0,0,0,0) Vector4|
+|Length|`Vector4`: instance |`number`|Returns the length of the given Vector4|
+|Dot|`Vector4`: a `Vector4`: b |`number`|Returns the dot product of the two given Vector4|
+|Normalize|`Vector4`: instance |`Vector4`|Returns the normalized version of the given Vector4|
+|Lerp|`Vector4`: a `Vector4`: b `number`: t |`Vector4`|Calculate the linear interpolation between two Vector4 using the given alpha|
+
+### Operators
+|Operation|Description|
+|-|-|
+|`Vector4 + Vector4`|Adds two Vector4|
+|`Vector4 - Vector4`|Substracts two Vector4|
+|`-Vector4`|Multiplies each component of a Vector4 by -1|
+|`Vector4 * number`|Multiplies each component of a Vector4 by a number|
+|`Vector4 / number`|Divides each component of a Vector4 by a number|
+|`to_string(Vector4)`|Converts a Vector4 to a string|
diff --git a/Documentation/content/scripting/maths/_index.md b/Documentation/content/scripting/maths/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/physics/CollisionDetectionMode.md b/Documentation/content/scripting/physics/CollisionDetectionMode.md
new file mode 100644
index 000000000..e24aeedda
--- /dev/null
+++ b/Documentation/content/scripting/physics/CollisionDetectionMode.md
@@ -0,0 +1,14 @@
++++
+title = 'CollisionDetectionMode (enum)'
++++
+
+### Description
+Enumeration of collision detection mode
+
+- C++ related class: [`OvPhysics::Entities::PhysicalObject::ECollisionDetectionMode`](https://github.com/adriengivry/Overload/blob/eca3eeecbcc81013c5d23eaed903813d7547ecb0/Sources/Overload/OvPhysics/include/OvPhysics/Entities/PhysicalObject.h#L36)
+
+### Values
+|Name|Type|Description|
+|-|-|-|
+|DISCRETE|`number`||
+|CONTINUOUS|`number`||
diff --git a/Documentation/content/scripting/physics/Physics.md b/Documentation/content/scripting/physics/Physics.md
new file mode 100644
index 000000000..d59770bcc
--- /dev/null
+++ b/Documentation/content/scripting/physics/Physics.md
@@ -0,0 +1,34 @@
++++
+title = 'Physics (table)'
++++
+
+### Description
+Global table containing physics-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|Raycast|`Vector3`: origin `Vector3`: direction `number`: distance |`RaycastHit`|Casts a ray against all Physical Object in the Scene and returns information on what was hit|
+
+### Examples
+```lua
+function MyScript::OnUpdate()
+ -- Constants
+ local distance = 5
+
+ -- Prepare raycast input
+ local transform = self.owner:GetTransform()
+ local worldPos = transform:GetWorldPosition()
+ local forward = transform:GetForward()
+
+ -- Perform raycast
+ local hit = Physics.Raycast(worldPos, forward, distance)
+
+ -- Evaluate raycast result
+ if hit ~= nil then
+ Debug.Log("Object found!")
+ else
+ Debug.Log("No object found...")
+ end
+end
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/physics/RaycastHit.md b/Documentation/content/scripting/physics/RaycastHit.md
new file mode 100644
index 000000000..59dfc5cb9
--- /dev/null
+++ b/Documentation/content/scripting/physics/RaycastHit.md
@@ -0,0 +1,23 @@
++++
+title = 'RaycastHit'
++++
+
+### Description
+Contains the result of a raycast query
+
+- C++ related class: [`OvPhysics::Entities::RaycastHit`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvPhysics/include/OvPhysics/Entities/RaycastHit.h)
+
+### Variables
+|Name|Type|Description|
+|-|-|-|
+|FirstResultObject|`PhysicalObject`|First object traversed by the ray|
+|ResultObjects|`PhysicalObject[]`|Every objects traversed by the ray|
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+_This usertype has no functions_
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/physics/_index.md b/Documentation/content/scripting/physics/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/resources/Resources.md b/Documentation/content/scripting/resources/Resources.md
new file mode 100644
index 000000000..5579e4a33
--- /dev/null
+++ b/Documentation/content/scripting/resources/Resources.md
@@ -0,0 +1,26 @@
++++
+title = 'Resources (table)'
++++
+
+### Description
+Global table containing resource-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetModel|`string`: path |`Usertype`|Loads (If not already loaded) and returns the Model identified by the given path. Returns nil on failure|
+|GetShader|`string`: path |`Usertype`|Loads (If not already loaded) and returns the Shader identified by the given path. Returns nil on failure|
+|GetTexture|`string`: path |`Usertype`|Loads (If not already loaded) and returns the Texture identified by the given path. Returns nil on failure|
+|GetMaterial|`string`: path |`Usertype`|Loads (If not already loaded) and returns the Material identified by the given path. Returns nil on failure|
+|GetSound|`string`: path |`Usertype`|Loads (If not already loaded) and returns the Sound identified by the given path. Returns nil on failure|
+
+### Examples
+```lua
+function MyScript::OnStart()
+ -- Find a material in the engine folder (using ':')
+ local defaultMaterial = Resources.GetMaterial(":Materials\\Default.ovmat")
+
+ -- Find a shader in the project asset folder
+ local myCustomShader = Resources.GetShader("Shaders\\MyCustomShader.ovfx")
+end
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/resources/_index.md b/Documentation/content/scripting/resources/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/scripting/scene-system/Actor.md b/Documentation/content/scripting/scene-system/Actor.md
new file mode 100644
index 000000000..23c9da143
--- /dev/null
+++ b/Documentation/content/scripting/scene-system/Actor.md
@@ -0,0 +1,88 @@
++++
+title = 'Actor'
++++
+
+### Description
+The Actor is the main class of the ECS, it corresponds to the entity and is
+composed of componenents and behaviours (scripts)
+
+- C++ related class: [`OvCore::ECS::Actor`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/ECS/Actor.h)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetName|`Actor`: instance |`string`|Returns the name of the actor|
+|SetName|`Actor`: instance `string`: name||Defines a name for the actor|
+|GetTag|`Actor`: instance |`string`|Returns the tag of the actor|
+|GetChildren|`Actor`: instance |`Actor[]`|Returns children of this actor|
+|SetTag|`Actor`: instance |`string`|Defines a tag for the actor|
+|GetID|`Actor`: instance |`number`|Returns the ID of this actor|
+|GetParent|`Actor`: instance |`Actor`|Returns the parent (or nil) of this actor|
+|SetParent|`Actor`: instance `Actor`: newParent ||Defines a new parent to this actor|
+|DetachFromParent|`Actor`: instance ||Detaches the actor from its parent|
+|IsDescendantOf|`Actor`: instance `Actor`: otherActor |`boolean`|Returns true if the otherActor is the topmost parent of the instance in the hierarchy
+|Destroy|`Actor`: instance ||Removes the actor from the scene|
+|IsSelfActive|`Actor`: instance |`boolean`|Returns true if the actor is active, ignoring his parent (if any) active state|
+|IsActive|`Actor`: instance |`boolean`|Returns true if the actor is active|
+|SetActive|`Actor`: instance `boolean`: active ||Defines if the actor is active|
+|GetTransform|`Actor`: instance |`Transform`|Returns the Transform attached to this actor|
+|GetPhysicalObject|`Actor`: instance |`PhysicalObject`|Returns the PhysicalObject attached to this actor (If any)|
+|GetPhysicalBox|`Actor`: instance |`PhysicalBox`|Returns the PhysicalBox attached to this actor (If any)|
+|GetPhysicalSphere|`Actor`: instance |`PhysicalSphere`|Returns the PhysicalSphere attached to this actor (If any)|
+|GetPhysicalCapsule|`Actor`: instance |`PhysicalCapsule`|Returns the PhysicalCapsule attached to this actor (If any)|
+|GetCamera|`Actor`: instance |`Camera`|Returns the Camera attached to this actor (If any)|
+|GetLight|`Actor`: instance |`Light`|Returns the Light attached to this actor (If any)|
+|GetPointLight|`Actor`: instance |`PointLight`|Returns the PointLight attached to this actor (If any)|
+|GetSpotLight|`Actor`: instance |`SpotLight`|Returns the SpotLight attached to this actor (If any)|
+|GetDirectionalLight|`Actor`: instance |`DirectionalLight`|Returns the DirectionalLight attached to this actor (If any)|
+|GetAmbientBoxLight|`Actor`: instance |`AmbientBoxLight`|Returns the AmbientBoxLight attached to this actor (If any)|
+|GetAmbientSphereLight|`Actor`: instance |`AmbientSphereLight`|Returns the AmbientSphereLight attached to this actor (If any)|
+|GetModelRenderer|`Actor`: instance |`ModelRenderer`|Returns the ModelRenderer attached to this actor (If any)|
+|GetMaterialRenderer|`Actor`: instance |`MaterialRenderer`|Returns the MaterialRenderer attached to this actor (If any)|
+|GetAudioSource|`Actor`: instance |`AudioSource`|Returns the AudioSource attached to this actor (If any)|
+|GetAudioListener|`Actor`: instance |`AudioListener`|Returns the AudioListener attached to this actor (If any)|
+|GetPostProcessStack|`Actor`: instance |`PostProcessStack`|Returns the PostProcessStack attached to this actor (If any)|
+|GetReflectionProbe|`Actor`: instance |`ReflectionProbe`|Returns the ReflectionProbe attached to this actor (If any)|
+|GetBehaviour|`Actor`: instance `string`: behaviour |`Usertype`|Returns the Behaviour of the given type attached to this actor (If any)|
+|AddTransform|`Actor`: instance |`Transform`|Adds a Transform component to the actor and returns it|
+|AddModelRenderer|`Actor`: instance |`ModelRenderer`|Adds a ModelRenderer component to the actor and returns it|
+|AddPhysicalBox|`Actor`: instance |`PhysicalBox`|Adds a PhysicalBox component to the actor and returns it|
+|AddPhysicalSphere|`Actor`: instance |`PhysicalSphere`|Adds a PhysicalSphere component to the actor and returns it|
+|AddPhysicalCapsule|`Actor`: instance |`PhysicalCapsule`|Adds a PhysicalCapsule component to the actor and returns it|
+|AddCamera|`Actor`: instance |`Camera`|Adds a Camera component to the actor and returns it|
+|AddPointLight|`Actor`: instance |`PointLight`|Adds a PointLight component to the actor and returns it|
+|AddSpotLight|`Actor`: instance |`SpotLight`|Adds a SpotLight component to the actor and returns it|
+|AddDirectionalLight|`Actor`: instance |`DirectionalLight`|Adds an DirectionalLight component to the actor and returns it|
+|AddAmbientBoxLight|`Actor`: instance |`AmbientBoxLight`|Adds an AmbientBoxLight component to the actor and returns it|
+|AddAmbientSphereLight|`Actor`: instance |`AmbientSphereLight`|Adds an AmbientSphereLight component to the actor and returns it|
+|AddMaterialRenderer|`Actor`: instance |`MaterialRenderer`|Adds a MaterialRenderer component to the actor and returns it|
+|AddAudioSource|`Actor`: instance |`AudioSource`|Adds an AudioSource component to the actor and returns it|
+|AddAudioListener|`Actor`: instance |`AudioListener`|Adds an AudioListener component to the actor and returns it|
+|AddPostProcessStack|`Actor`: instance |`PostProcessStack`|Adds a PostProcessStack component to the actor and returns it|
+|AddReflectionProbe|`Actor`: instance |`ReflectionProbe`|Adds an ReflectionProbe component to the actor and returns it|
+|AddBehaviour|`Actor`: instance |`Usertype`|Adds a behaviour of given type to the actor and returns it|
+|RemoveModelRenderer|`Actor`: instance |`boolean`|Removes the ModelRenderer component from the actor (Returns true of success)|
+|RemovePhysicalBox|`Actor`: instance |`boolean`|Removes the PhysicalBox component from the actor (Returns true of success)|
+|RemovePhysicalSphere|`Actor`: instance |`boolean`|Removes the PhysicalSphere component from the actor (Returns true of success)|
+|RemovePhysicalCapsule|`Actor`: instance |`boolean`|Removes the PhysicalCapsule component from the actor (Returns true of success)|
+|RemoveCamera|`Actor`: instance |`boolean`|Removes the Camera component from the actor (Returns true of success)|
+|RemovePointLight|`Actor`: instance |`boolean`|Removes the PointLight component from the actor (Returns true of success)|
+|RemoveSpotLight|`Actor`: instance |`boolean`|Removes the SpotLight component from the actor (Returns true of success)|
+|RemoveDirectionalLight|`Actor`: instance |`boolean`|Removes the DirectionalLight component from the actor (Returns true of success)|
+|RemoveAmbientBoxLight|`Actor`: instance |`boolean`|Removes the AmbientBoxLight component from the actor (Returns true of success)|
+|RemoveAmbientSphereLight|`Actor`: instance |`boolean`|Removes the AmbientSphereLight component from the actor (Returns true of success)|
+|RemoveMaterialRenderer|`Actor`: instance |`boolean`|Removes the MaterialRenderer component from the actor (Returns true of success)|
+|RemoveAudioSource|`Actor`: instance |`boolean`|Removes the AudioSource component from the actor (Returns true of success)|
+|RemoveAudioListener|`Actor`: instance |`boolean`|Removes the AudioListener component from the actor (Returns true of success)|
+|RemovePostProcessStack|`Actor`: instance |`PostProcessStack`|Removes the PostProcessStack component from the actor (Returns true of success)|
+|RemoveReflectionProbe|`Actor`: instance |`ReflectionProbe`|Removes the ReflectionProbe component from the actor (Returns true of success)|
+|RemoveBehaviour|`Actor`: instance `string`: behaviour |`boolean`|Removes the behaviour of given type (Returns true on success)|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/scene-system/Scene.md b/Documentation/content/scripting/scene-system/Scene.md
new file mode 100644
index 000000000..a0b041980
--- /dev/null
+++ b/Documentation/content/scripting/scene-system/Scene.md
@@ -0,0 +1,27 @@
++++
+title = 'Scene'
++++
+
+### Description
+Set of actors
+
+- C++ related class: [`OvCore::SceneSystem::Scene`](https://github.com/Overload-Technologies/Overload/tree/main/Sources/Overload/OvCore/include/OvCore/SceneSystem/Scene.h)
+
+### Variables
+_This usertype has no variables_
+
+### Constructors
+_This usertype has no constructors_
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|FindActorByName|`Scene`: instance `string`: name |`Actor`|Returns the first actor identified by the given name, or nil on failure|
+|FindActorByTag|`Scene`: instance `string`: tag |`Actor`|Returns the first actor identified by the given tag, or nil on failure|
+|FindActorsByName|`Scene`: instance `string`: name |`Actor[]`|Returns actors identified by the given name, or nil on failure|
+|FindActorsByTag|`Scene`: instance `string`: tag |`Actor[]`|Returns actors identified by the given ID, or nil on failure|
+|CreateActor|`Scene`: instance |`Actor`|Creates an actor|
+|CreateActor|`Scene`: instance `string`: name `string`: tag |`Actor`|Creates an actor with a name and a tag|
+
+### Operators
+_This usertype has no operators_
diff --git a/Documentation/content/scripting/scene-system/Scenes.md b/Documentation/content/scripting/scene-system/Scenes.md
new file mode 100644
index 000000000..31d51e085
--- /dev/null
+++ b/Documentation/content/scripting/scene-system/Scenes.md
@@ -0,0 +1,20 @@
++++
+title = 'Scenes (table)'
++++
+
+### Description
+Global table containing scene-related functions
+
+### Functions
+|Name|Input|Output|Description|
+|-|-|-|-|
+|GetCurrentScene||`Scene`|Returns the currently active scene|
+|Load|`string`: path |`Scene`|Loads the scene identified by the given path and returns it|
+
+### Examples
+```lua
+function MyScript::OnStart()
+ local scene = Scenes.GetCurrentScene()
+ Scenes.Load("MyScene.ovscene")
+end
+```
\ No newline at end of file
diff --git a/Documentation/content/scripting/scene-system/_index.md b/Documentation/content/scripting/scene-system/_index.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/content/tutorials/Building-your-game.md b/Documentation/content/tutorials/Building-your-game.md
new file mode 100644
index 000000000..25d0d6491
--- /dev/null
+++ b/Documentation/content/tutorials/Building-your-game.md
@@ -0,0 +1,86 @@
++++
+title = 'Building Your Game'
+weight = 2
++++
+
+# 0. Table of contents
+- [0. Table of contents](#0-table-of-contents)
+- [1. Creating a scene](#1-creating-a-scene)
+- [2. Setuping your project](#2-setuping-your-project)
+- [3. Building](#3-building)
+- [4. Profiling](#4-profiling)
+- [5. Releasing](#5-releasing)
+
+# 1. Creating a scene
+The first step to build your game is to create a scene. If you haven't followed the [Getting Started](https://github.com/adriengivry/Overload/wiki/Getting-Started) guide, we encourage you to do so.
+
+For next steps, we will use the scene created in the [Getting Started](https://github.com/adriengivry/Overload/wiki/Getting-Started) guide.
+
+# 2. Setuping your project
+Before trying to build your project, you should configure it to your needs. For this, let's open the `Project Settings` window.
+
+
+
+As you can see, you can configure several aspect of your project, from physics, window to rendering settings.
+
+Every project made with Overload is composed of an `.ovproject` file. This file is a simple INI file (`key=value`), containing all the settings of your project. Modifying and saving your settings in the Project Settings will modify your `.ovproject` file content.
+
+As it is possible to setup your project by editing the `.ovproject` file, it is recommended to configure it via the Project Settings window.
+
+For this guide, we will only describe the most important settings:
+| Setting | Description |
+| ------- | ----------- |
+|Scene Management: **Start Scene**|Defines the scene that should get loaded when launching your game|
+|Windowing: **Fullscreen**|Set this to true if you want your game to startup in fullscreen mode|
+|Windowing: **Resolution**|Defines the size of the game window. When fullscreen is enabled, this setting will defines the render resolution|
+|Build: **Development build**|Enabling this option will launch your game in Debug mode (Less-optimized but debuggable with a built-in profiler). If you've compiled Overload from sources, make sure `OvGame` has been compiled in `Debug` and `Release` modes to launch your game in all scenarios (Development build or Release build)|
+
+In our case, Overload has been compiled from sources in `Debug` and `Release` mode, thus, "Development build" option can be toggled on or off. If you are using an Overload release, you should be able to use both options.
+
+Let's toggle the "Development build" option on for now (It should be on by default).
+
+The other setting we will change here is the "Start Scene". We will simply have to drag and drop our saved scene from the Asset Browser to the "Start Scene" field.
+
+
+
+Click apply, and voilà, you should be good to go for your first build.
+
+# 3. Building
+Let's now heads to the menu bar, and click onto "Build".
+There are multiple options here.
+
+|Option|Description|
+|------|-----------|
+|Build Game|Build your game at the specified location on disk|
+|Build Game and run|Build your game at the specified location on disk and launch it|
+|Temporary build|Build your game in a temporary folder (`%appdata%\OverloadTech\OvEditor\TempBuild\`) and launch it. This option is the best way to try your game quickly|
+
+We will use the "Temporary build" option as it is the quickest way to try our game.
+
+If the build failed (Watch the console for logs), make sure:
+- You are using an Overload release OR you have compiled the right version of `OvGame` (Debug mode for this guide)
+- You haven't modified any other setting
+- The "Start Scene" is correctly setup
+
+If the build worked, heads to the next section!
+
+# 4. Profiling
+If you've followed the guide, you should have your game in a standalone executable, in debug mode. You should see something similar to:
+
+
+
+As you can see, building a game in development mode will automatically displays the profiler. The profiler is a useful tool to identify bottlenecks in your game. In my case, `[Post-Update]` is taking most of frame time, which is ok because the game is setup to use vertical synchronisation (vsync) which limits your game framerate to your monitor refresh rate. You can toggle the overlay by pressing `F12`.
+
+# 5. Releasing
+Let's now try a release build for our game. Simply uncheck the "Development build" option and click "Apply". As mentionned before, if you are using Overload from sources, makes sure `OvGame` is compiled in `Release` mode for this "Non-Development build".
+
+
+
+Click again onto "Temporary Build" from the Build menu, and notice how smooth your game is!
+
+
+
+There is no more profiler attached to your game and the executable is running in optimized mode. You still can press `F12` to display the FPS counter.
+
+
+
diff --git a/Documentation/content/tutorials/Custom-Scripts.md b/Documentation/content/tutorials/Custom-Scripts.md
new file mode 100644
index 000000000..d8eae3925
--- /dev/null
+++ b/Documentation/content/tutorials/Custom-Scripts.md
@@ -0,0 +1,62 @@
++++
+title = 'Creating Scripts'
+weight = 3
++++
+
+### Creating a script
+Every scripts in Overload are behaviours, meaning that when creating a script, your custom usertype will get interpreted by the engine as a behaviour that can be attached to any Actor.
+
+In order to create a script, right click onto the `Scripts` folder in the Asset Browser window, click onto "New script...", enter a name and click enter.
+
+
+
+
+### Implementing your own behaviour
+In order to create gameplay interactions in your scripts, you'll need to implement some of these functions:
+
+|Name|Input|Output|Description|
+|-|-|-|-|
+|OnAwake|`Usertype`: instance ||Called when the scene start right before OnStart|
+|OnStart|`Usertype`: instance ||Called when the scene start right after OnAwake|
+|OnEnable|`Usertype`: instance ||Called when the behaviour gets enabled (owner SetActive set to true)|
+|OnDisable|`Usertype`: instance ||Called when the behaviour gets disabled (owner SetActive set to false)|
+|OnDestroy|`Usertype`: instance ||Called when the behaviour gets destroyed|
+|OnUpdate|`Usertype`: instance `number`: deltaTime ||Called every frame|
+|OnFixedUpdate|`Usertype`: instance `number`: fixedDeltaTime ||Called every physics frame|
+|OnLateUpdate|`Usertype`: instance `number`: deltaTime ||Called every frame after OnUpdate|
+|OnCollisionEnter|`Usertype`: instance `PhysicalObject`: collideWith ||Called when the owner of this behaviour enter in collision with another physical object|
+|OnCollisionStay|`Usertype`: instance `PhysicalObject`: collideWith ||Called when the owner of this behaviour is in collision with another physical object|
+|OnCollisionExit|`Usertype`: instance `PhysicalObject`: collideWith ||Called when the owner of this behaviour exit from collision with another physical object|
+|OnTriggerEnter|`Usertype`: instance `PhysicalObject`: triggeredBy ||Called when the owner of this behaviour enter in trigger with another physical object|
+|OnTriggerStay|`Usertype`: instance `PhysicalObject`: triggeredBy ||Called when the owner of this behaviour is in trigger with another physical object|
+|OnTriggerExit|`Usertype`: instance `PhysicalObject`: triggeredBy ||Called when the owner of this behaviour exit from trigger with another physical object|
+
+### Example
+```lua
+-- Holds data that are shared between functions of this usertype
+local MoveUpDown =
+{
+ elapsed = 0
+}
+
+-- Called when the scene starts
+function MoveUpDown:OnStart()
+end
+
+-- Called every frame (The passed deltaTime holds the time elapsed between the current and previous frame in seconds)
+function MoveUpDown:OnUpdate(deltaTime)
+ -- Here, elapsed is incremented to sum the elapsed time since start
+ self.elapsed = self.elapsed + deltaTime
+
+ -- Stores the transform component instance into a variable
+ transform = self.owner:GetTransform()
+
+ -- Invoke SetPosition function with `:` to send the transform instance as first parameter to this function
+ -- `transform:SetPosition(...)` is equivalent to `transform.SetPosition(transform, ...)`
+ transform:SetPosition(Vector3.new(0, math.sin(self.elapsed), 0))
+
+end
+
+-- Returns the usertype so the engine has a reference to it
+return MoveUpDown
+```
\ No newline at end of file
diff --git a/Documentation/content/tutorials/Custom-Shaders.md b/Documentation/content/tutorials/Custom-Shaders.md
new file mode 100644
index 000000000..5607fc319
--- /dev/null
+++ b/Documentation/content/tutorials/Custom-Shaders.md
@@ -0,0 +1,215 @@
++++
+title = 'Creating Shaders'
+weight = 4
++++
+
+# 1. Overload GLSL Flavor
+Overload utilizes a custom GLSL flavor as its shading language, which includes the following features:
+- `#include` statements
+- `#pass` declaration
+- `#feature` declaration
+- Fragment and vertex section specification using `#shader vertex` and `#shader fragment`
+
+## 1.1. File Extensions
+Overload shaders can have the following file extensions:
+- **.ovfx**: A compilable shader file that contains (or includes) both a vertex and a fragment shader.
+- **.ovfxh**: A partial shader file (non-compilable) that can be included within another shader file.
+
+## 1.2. Include Statements
+Overload shaders can be included using the `#include` statement.
+
+To include engine shaders, prefix the file name with a colon (`:`):
+```cpp
+#include ":Shaders/Vertex/Basic.ovfxh"
+```
+
+If the colon is omitted, the shader loader will search within the user project's assets:
+```cpp
+#include "Shaders/MyCustomShader.ovfxh"
+```
+
+## 1.3. Fragment/Vertex Sections
+A complete shader (`.ovfx`) must include both vertex and fragment sections, which are specified using the `#shader vertex` and `#shader fragment` directives.
+
+```glsl
+#shader vertex
+#version 430 core
+
+// Vertex shader code
+
+#shader fragment
+#version 430 core
+
+// Fragment shader code
+```
+
+# 2. Complete Shader Example
+```glsl
+// Unlit.ovfx
+
+#shader vertex
+#version 430 core
+
+#include ":Shaders/Common/Buffers/EngineUBO.ovfxh"
+#include ":Shaders/Common/Utils.ovfxh"
+
+layout (location = 0) in vec3 geo_Pos;
+layout (location = 1) in vec2 geo_TexCoords;
+
+out VS_OUT
+{
+ vec3 FragPos;
+ vec2 TexCoords;
+} vs_out;
+
+void main()
+{
+ vs_out.FragPos = vec3(ubo_Model * vec4(geo_Pos, 1.0));
+ vs_out.TexCoords = geo_TexCoords;
+
+ gl_Position = ubo_Projection * ubo_View * vec4(vs_out.FragPos, 1.0);
+}
+
+#shader fragment
+#version 430 core
+
+#include ":Shaders/Common/Buffers/EngineUBO.ovfxh"
+#include ":Shaders/Common/Utils.ovfxh"
+
+in VS_OUT
+{
+ vec3 FragPos;
+ vec2 TexCoords;
+} fs_in;
+
+uniform vec4 u_Diffuse = vec4(1.0);
+uniform sampler2D u_DiffuseMap;
+uniform vec2 u_TextureTiling = vec2(1.0);
+uniform vec2 u_TextureOffset = vec2(0.0);
+
+out vec4 FRAGMENT_COLOR;
+
+void main()
+{
+ vec2 texCoords = TileAndOffsetTexCoords(fs_in.TexCoords, u_TextureTiling, u_TextureOffset);
+ FRAGMENT_COLOR = texture(u_DiffuseMap, texCoords) * u_Diffuse;
+}
+```
+
+# 3. Shader Passes & Features (Variant System)
+
+Shader passes & features allow you to create compile-time branching in your shaders, generating different variants of the same shader based on the pass and feature combinations. This approach is more efficient than runtime branching for certain operations.
+
+## 3.1. Declaring Shader Passes & Features
+
+To declare a shader pass, use the `#pass` directive, and for features, use the `#feature` directive. It's recommended to place these declarations at the top of your shader file (`.ovfx`) for better readability and organization.
+
+```glsl
+#pass SHADOW_PASS
+#feature MY_COOL_FEATURE
+#feature FOO
+
+#shader vertex
+// Vertex shader code goes here...
+
+#shader fragment
+// Fragment shader code goes here...
+```
+
+## 3.2. Understanding Shader Variants
+
+Each feature added to your shader doubles the number of variants generated. The relationship between feature count and variant count is exponential:
+
+| Feature Count | Variant Count |
+|---------------|---------------|
+| 0 | 1 |
+| 1 | 2 |
+| 2 | 4 |
+| 3 | 8 |
+| 4 | 16 |
+
+Passes, on another hand, are exclusive, meaning that only one pass can be selected at a time, so their impact on variant count is linear:
+
+| Feature Count | Pass Count | Variant Count |
+|---------------|------------|---------------|
+| 4 | 1 | 16 |
+| 4 | 2 | 32 |
+| 4 | 3 | 48 |
+| 4 | 4 | 64 |
+
+A shader with no `#pass PASS_NAME` directive will always have one pass (default).
+
+**Performance Considerations:**
+- Lower feature count = Faster compilation time
+- Using runtime branches instead of features may impact runtime performance
+- Consider carefully whether a branch should be a feature or a runtime condition
+
+## 3.3. Using Passes & Features in Shader Code
+
+You can utilize passes & features in your code with standard GLSL preprocessor directives:
+- `#ifdef` - Check if pass/feature is enabled
+- `#ifndef` - Check if pass/feature is disabled
+- `#if`, `#else`, `#elif` - Conditional branching
+- `#endif` - End conditional block
+
+> Note: Branching for passes and features is strictly similar!
+
+Example:
+```glsl
+#shader fragment
+void main()
+{
+#ifdef SHADOW_PASS
+ // This code only compiles for the shadow pass
+ gl_FragColor = calculateShadowValue();
+#else
+ // This code compiles for any other pass
+ gl_FragColor = calculateStandardShading();
+#endif
+}
+```
+
+## 3.4. Built-in Passes
+
+The following built-in passes can be used to override Overload's default rendering behavior:
+
+| Pass Name | Description | Required Inputs |
+|--------------|-------------|----------------|
+| `SHADOW_PASS` | Override the default shadow pass implementation. Useful for creating "holes" in shadows based on (for instance) the alpha of a texture, by discarding fragments below a certain threshold (e.g. window). This allows light to pass through semi-transparent surfaces. | `mat4 _LightSpaceMatrix` |
+| `OUTLINE_PASS` | **(Editor Only)** Override the outline rendering (stencil + forward pass). Particularly useful when your vertex shader modifies vertex positions, ensuring the outline matches the transformed geometry. | `vec4 _OutlineColor` |
+| `PICKING_PASS` | **(Editor Only)** Override the picking pass implementation. Important when using vertex transformations, allowing objects to be selected at their visible location rather than their original position. | `vec4 _PickingColor` |
+
+When a pass provides an input, you can retrieve the value by declaring the input in your shader code, e.g.:
+```glsl
+#pass SHADOW_PASS
+
+#shader vertex
+
+// ...
+
+#ifdef SHADOW_PASS
+uniform mat4 _LightSpaceMatrix;
+#endif
+
+// ...
+
+void main()
+{
+ gl_Position = _LightSpaceMatrix * ubo_Model * vec4(geo_Pos, 1.0);
+}
+
+// Rest of the code...
+```
+**⚠️ Not declaring a required input might result in error if the render pass tries to send the input value to the underlying shader program, so make sure you declare the inputs required by the pass you are overriding!**
+
+# 4. Visual Studio Code Syntax Highlighting
+To add syntax highlighting for `.ovfx` and `.ovfxh` files in Visual Studio Code:
+1. Open the Command Palette (CTRL + Shift + P).
+2. Search for and select "Preferences: Open User Settings (JSON)".
+3. Edit or create a `files.associations` entry in the settings file:
+```json
+"files.associations": {
+ "*.ovfx": "glsl",
+ "*.ovfxh": "glsl"
+},
+```
\ No newline at end of file
diff --git a/Documentation/content/tutorials/Getting-Started.md b/Documentation/content/tutorials/Getting-Started.md
new file mode 100644
index 000000000..0e0b86ffb
--- /dev/null
+++ b/Documentation/content/tutorials/Getting-Started.md
@@ -0,0 +1,306 @@
++++
+title = 'Getting Started'
+weight = 1
++++
+
+In this page, we will see how to get Overload, create a new project, and create our very first scene.
+
+# 0. Table of contents
+
+- [0. Table of contents](#0-table-of-contents)
+- [1. Glossary](#1-glossary)
+- [2. Getting Overload](#2-getting-overload)
+ - [2.1. From Sources](#21-from-sources)
+ - [2.2. From a Release build](#22-from-a-release-build)
+- [3. Project Hub](#3-project-hub)
+- [4. Editor Layout](#4-editor-layout)
+ - [4.1. Scene View](#41-scene-view)
+ - [4.2. Game View](#42-game-view)
+ - [4.3. Toolbar](#43-toolbar)
+ - [4.4. Asset Browser](#44-asset-browser)
+ - [4.5. Hierarchy](#45-hierarchy)
+ - [4.6. Inspector](#46-inspector)
+ - [4.7. Console](#47-console)
+ - [4.8. Profiler](#48-profiler)
+ - [4.9. Hardware Info](#49-hardware-info)
+ - [4.10. Asset View](#410-asset-view)
+ - [4.11. Help](#411-help)
+ - [4.12. Project Settings](#412-project-settings)
+ - [4.13. Material Editor](#413-material-editor)
+ - [4.14. Asset Metadata Editor](#414-asset-metadata-editor)
+- [5. Creating our very first scene!](#5-creating-our-very-first-scene)
+ - [5.1. Creating an empty scene](#51-creating-an-empty-scene)
+ - [5.2. Creating actors](#52-creating-actors)
+ - [5.3. Creating a material](#53-creating-a-material)
+ - [5.4. Applying a material](#54-applying-a-material)
+ - [5.5. Scripting](#55-scripting)
+ - [5.6. Playing your game!](#56-playing-your-game)
+
+# 1. Glossary
+Here are some terms that you'll encounter while using or reading about Overload.
+
+|Term|Definition|
+|----|----------|
+|Window|As the Overload editor is fully modulable, it is possible to undock or move around parts of the editor. We will call these parts windows|
+|Menu Bar|Top bar of your main window, containing menus such as `File`, `Build`, `Window`...|
+|Actor|Any entity with components in Overload is called an actor. Actors are part of a scene|
+|Scene|Collection of actors. It can be serialized to XML format to be loaded another time by the editor or the game|
+|Mesh|Set of vertices and indices. You can't manipulate meshes directly from the editor|
+|Model|Collection of meshes. Each model can be composed of multiple meshes. They directly represent a model file (fbx, obj...). They can be spawned into a scene|
+|Material|AAsset that associate a shader with a set of settings, defining the visual look of any object using it|
+|Asset Metadata|Set of settings that will influence the way an asset should be loaded|
+|Gizmo|Set of 3D arrows that are draggable, used to manipulate an actor in the Scene View|
+
+# 2. Getting Overload
+### 2.1. From Sources
+Compiling Overload sources works best with Visual Studio 2022.
+You can find instructions on how to compile it yourself here: https://github.com/Overload-Technologies/Overload?tab=readme-ov-file#building-overload-from-sources.
+
+### 2.2. From a Release build
+You can download a release by checking the [releases list](https://github.com/adriengivry/Overload/releases).
+
+# 3. Project Hub
+The first window you'll see when launching Overload is the Project Hub. Basically, the Project Hub is a place where you can create new projects or open a new project. Projects that has already been opened will get displayed in a list.
+For the guide next steps, we will assume that you have created a new project.
+
+
+
+# 4. Editor Layout
+Let's now take a look at the **editor**!
+
+When launching Overload for the first time, you should have an editor layout similar to this one:
+
+
+Actually, only a few editor windows will be opened when you'll launch the editor. You can open additional windows by clicking the `Window` menu in the top bar (AKA menu bar).
+
+Let's dive into those windows:
+### 4.1. Scene View
+The Scene View can be considered as the main view of Overload editor. It will give you a real-time feedback of what is happening in your current scene. This window is necessary to create your scene (Placing and moving objects).
+
+You can freely move in this view using these controls:
+| Action | Input |
+| ------ | ----- |
+| Rotate the camera | Right Mouse Button |
+| Zoom in/out | Mouse Wheel |
+| Move camera Forward | Right Mouse Button **+** W |
+| Move camera Backward | Right Mouse Button **+** S |
+| Move camera Left | Right Mouse Button **+** A |
+| Move camera Right | Right Mouse Button **+** D |
+| Move camera Up | Right Mouse Button **+** E |
+| Move camera Down | Right Mouse Button **+** Q |
+| Orbit around selection | ALT + Middle Mouse Button |
+| Move to selection | F |
+| Move to selection (From Top) | Up Arrow |
+| Move to selection (From Bottom) | Down Arrow |
+| Move to selection (From Left) | Left Arrow |
+| Move to selection (From Right) | Right Arrow |
+| Move to selection (From Front) | Page Up |
+| Move to selection (From Back) | Page Down |
+| Delete selection | Del |
+| Switch to translation gizmo | W |
+| Switch to rotation gizmo | E |
+| Switch to scaling Gizmo | R |
+
+### 4.2. Game View
+The Game View, like the Scene View, reflects what is happening in your scene, but only from a fixed camera, which correspond to your game main camera. The editor will automatically focus the Game View when playing the scene
+
+### 4.3. Toolbar
+A simple window providing some controls onto your scene. It allows you to play, pause, resume, step, and refresh your lua behaviours.
+
+### 4.4. Asset Browser
+You'll find there your project file hierarchy. Any file in your project should be placed into `Assets` or `Scripts`. You can create/move/delete files there. Plenty actions are available for each different file type (Accessible by right-clicking onto a file). A lot of editor fields and windows can take an asset as input (Texture, Scene, Shader...), the Asset Browser allows you to drag and drop these assets.
+
+### 4.5. Hierarchy
+The Hierarchy window shows the current scene hierarchy with relations between actors. You can select/delete/move/create actors in this view.
+
+### 4.6. Inspector
+In the Inspector, you'll be able to view and edit the currently selected actor. Adding, tweaking and removing components, changing actor settings (Name, tag, activation state...).
+
+### 4.7. Console
+As a way to communicate with you, the user, Overload is using logs. These logs (Information, Warnings, Errors), will be found into the console.
+
+### 4.8. Profiler
+The profiler will help you identifying bottlenecks in your games. It will show you timings of key modules of the engine, such as the physics system, the scripting system or the renderer.
+
+### 4.9. Hardware Info
+This window will show you some information about your hardware (CPU, GPU and RAM usage).
+
+### 4.10. Asset View
+The Asset View is useful to preview assets. You can drag and drop textures, models and materials to this view to preview them.
+
+### 4.11. Help
+Contains information about editor controls.
+
+### 4.12. Project Settings
+This window contains every settings related to the current project you are working on. You can setup various things there, such as Graphics API settings, physics settings, startup scene...
+
+### 4.13. Material Editor
+The Material Editor is a window in which you'll be able to edit your materials. From the attached shader to the parameters values, the visual appearance of your game is determined by how you configure your materials.
+
+### 4.14. Asset Metadata Editor
+This window let you edit the metadata attached to an asset. In order to edit the metadata of an asset, you should right click onto this asset, and select `Edit metadata` (This option won't be shown if the selected asset cannot carry metadata).
+
+# 5. Creating our very first scene!
+Now that the editor has no more secret for you, let's use what we learnt and create our very first game scene!
+
+### 5.1. Creating an empty scene
+As you can see, when launching the editor, a default scene is shown. At any time, you can get back to this empty scene by clicking onto `File -> New Scene`
+
+
+
+This scene is composed of 3 actors : 2 lights (Ambient and directional), and a camera.
+
+Having a camera in a scene is essential for the game to show something onto the screen. Without any camera, your game will just show a black screen. If you want to test the "no camera effect", you can click onto the "Main Camera" (From the hierarchy or the Scene View), and then click onto the Game View window. By clicking the "Active" checkbox in the Inspector window, you should see the Game View going from blue (Default camera background color), to black (No camera is rendering the scene). Leave the "Main Camera" active for next steps.
+
+We will start to build our scene from this base scene. You can go to the menu bar: `File -> Save Scene` and select a location within your project "Assets" folder.
+Once the scene has been saved, you should see a log in the console saying that your scene has successfully been saved.
+
+### 5.2. Creating actors
+This scene looks pretty empty, let's try to populate it with some actors!
+
+In order to add an actor to the scene, go to the menu bar and click onto: `Actors -> Primitives -> Cube`.
+
+
+
+You should now see a cube in your scene.
+
+
+
+You can now give a unique name to your new actor by editing "Name" in the Inspector window.
+
+
+
+Let's now try to duplicate this actor. Right click onto your actor in the Hierarchy and select `Duplicate`.
+
+
+
+The duplicated actor should get automatically selected and ready to edit. Try to move it in the Scene View using the translation gizmo.
+
+
+
+
+### 5.3. Creating a material
+Well, having two cubes is fine, but it would be better if we could differentiate them visually. Let's add a color to our first cube!
+
+For that, you'll first need to create a material. In order to achieve this, right click onto your `Assets` folder in the Asset Browser, and click onto `Create -> Material -> Standard`. A text field should appear, this is where you can name your material. Enter a name for your new material and hit enter.
+
+
+
+What we just did here is that we've create a material using the `Standard` shader which is an engine shader. With Overload, you can create your very own shaders and create `Empty` materials that you'll configure for your custom shader using the Material Editor. But for now, we will stick with the `Standard` material preset.
+
+The `Assets` folder should automatically expand itself and the Asset Preview window should now be opened.
+
+
+
+As you can see in the Material Editor window, we are using the Shader `:Shaders\Standard.glsl`. The `:` character prefix tells us that the asset is located under the `Engine` folder. You can freely navigate this folder in the Asset Browser but you shouldn't modify its content.
+
+Let's modify our material. To do so, expand the `Shader Settings` header. We won't need to tweak any `Material Settings` here as they are more "advanced stuff".
+
+The `Shader Settings` directly mirror the parameters of a shader. When you'll create your own shaders, you'll be able to see in this section every parameters of your custom shaders.
+
+Let's scroll down to the "Diffuse" parameter and switch its display mode to "RGBA".
+
+
+
+The diffuse color of an object is basically it's main color. You can now click onto the white square and choose a color for this material.
+
+
+
+You should be able to see your changes in real-time in the Asset View window.
+
+Leave the color selection view by clicking anywhere outside of it, scroll to the top of the Material Editor and click onto "Save to file". This will save your changes to your asset. This is a very important step in order to keep your material asset up-to-date. If you forget this step, your material file will remain unchanged, and the color change won't get reloaded the next time you'll start the editor.
+
+### 5.4. Applying a material
+Great, it's now time to apply this new material to one of your cubes.
+
+Select the cube onto which you want to apply your new material. Make the Inspector window visible and expand the Material Renderer header.
+
+
+
+In this section you should see "lambert1", which is the name of the material slot stored into the model file attached to this cube model. As you can see, it is currently using the `:Material\Default.ovmat` which is an engine material.
+
+In order to apply your material to this actor, you'll have to drag and drop your new material from the asset browser to the "lambert1" field.
+
+
+
+Once done, you should be able to see the material you chose in the Material Editor onto your cube.
+
+
+
+### 5.5. Scripting
+The last thing this starter guide will explain is the scripting system. A game is nothing without gameplay logic, the scripting system is an interface between you, the game developper, and the engine core.
+
+So, for this last part, we will make our colored cube moving up and down!
+
+The engine is using Lua as a scripting language. Lua itself is just a way for your to communicate with the engine.
+
+Let's start by creating our script. Right click onto the `Scripts` folder in the Asset Browser window, click onto "New script...", enter a name and click enter.
+
+
+
+Currently, there is a restriction in the engine that prevent us from having a complex script folder tree, thus, all your scripts should directly be placed under the `Scripts` folder.
+
+Now that you script is created, you can try to open it.
+
+
+
+If you have never set a default editor for .lua files, you'll be prompt to choose an editor to open your script. I personally use Visual Studio Code but any editor (Even notepad 😄) will work here.
+
+After opening your script, you should have something similar to:
+
+```lua
+local MoveUpDown =
+{
+}
+
+function MoveUpDown:OnStart()
+end
+
+function MoveUpDown:OnUpdate(deltaTime)
+end
+
+return MoveUpDown
+```
+
+The `local MoveUpDown = {...}` should contains any variable that your script wants to share between functions.
+
+The `MoveUpDown:OnStart()` function is called once the scene your script (AKA behaviour) is in is loaded, and the `MoveUpDown:OnUpdate(deltaTime)` is called every frame. There are multiple engine functions that you can use in your scripts to create complex gameplay logic, we won't explain them here. Please, check our lua scripting reference for more information.
+
+I won't go into detail, but this script is basically updating the owner (Actor onto which this script is attached) Y position to follow the sinus function.
+
+```lua
+local MoveUpDown =
+{
+ elapsed = 0
+}
+
+function MoveUpDown:OnStart()
+end
+
+function MoveUpDown:OnUpdate(deltaTime)
+ self.elapsed = self.elapsed + deltaTime
+ self.owner:GetTransform():SetPosition(Vector3.new(0, math.sin(self.elapsed), 0))
+
+end
+
+return MoveUpDown
+```
+
+Now that our script is done, we can attach it to an actor in our scene. Go back to Overload, select the actor you want this behaviour to apply on, and drag and drop your script onto the field in front of the "Add Script" button and press the button.
+
+
+
+If you scroll to the bottom of the inspector, you should see your script in the component list
+
+
+
+If an error has been found in your script, and error message will be logged into the console.
+
+### 5.6. Playing your game!
+Now that your scene is complete, save it (CTRL + S or `File -> Save Scene`). You can now hit the play button and admire your very first game made with Overload!
+
+
+
+
+
+
diff --git a/Documentation/content/tutorials/_index.md b/Documentation/content/tutorials/_index.md
new file mode 100644
index 000000000..6d2296d3d
--- /dev/null
+++ b/Documentation/content/tutorials/_index.md
@@ -0,0 +1,8 @@
++++
+title = 'Tutorials'
+weight = 1
++++
+
+Getting started with Overload has never been so easy!
+
+From editor basics to your first script and build, here are a couple of tutorials that you can follow to learn how to use Overload.
diff --git a/Documentation/data/.gitkeep b/Documentation/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/hugo-local.toml b/Documentation/hugo-local.toml
new file mode 100644
index 000000000..c8bfc8a02
--- /dev/null
+++ b/Documentation/hugo-local.toml
@@ -0,0 +1,36 @@
+baseURL = "/"
+title = "Overload Documentation"
+theme = "hugo-geekdoc"
+relativeURLs = true
+uglyURLs = true
+
+pluralizeListTitles = false
+
+# Geekdoc required configuration
+pygmentsUseClasses = true
+pygmentsCodeFences = true
+disablePathToLower = true
+
+# Required if you want to render robots.txt template
+enableRobotsTXT = true
+
+[caches]
+ [caches.images]
+ dir = ':cacheDir/images'
+
+# Needed for mermaid shortcodes
+[markup]
+ [markup.goldmark.renderer]
+ # Needed for mermaid shortcode
+ unsafe = true
+ [markup.tableOfContents]
+ startLevel = 1
+ endLevel = 9
+
+[taxonomies]
+ tag = "tags"
+
+[params]
+ # (Optional, default false) Collapse all menu entries, can not be overwritten
+ # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.
+ geekdocCollapseAllSections = true
diff --git a/Documentation/hugo.toml b/Documentation/hugo.toml
new file mode 100644
index 000000000..c70b641dc
--- /dev/null
+++ b/Documentation/hugo.toml
@@ -0,0 +1,34 @@
+baseURL = "http://localhost"
+title = "Overload Documentation"
+theme = "hugo-geekdoc"
+
+pluralizeListTitles = false
+
+# Geekdoc required configuration
+pygmentsUseClasses = true
+pygmentsCodeFences = true
+disablePathToLower = true
+
+# Required if you want to render robots.txt template
+enableRobotsTXT = true
+
+[caches]
+ [caches.images]
+ dir = ':cacheDir/images'
+
+# Needed for mermaid shortcodes
+[markup]
+ [markup.goldmark.renderer]
+ # Needed for mermaid shortcode
+ unsafe = true
+ [markup.tableOfContents]
+ startLevel = 1
+ endLevel = 9
+
+[taxonomies]
+ tag = "tags"
+
+[params]
+ # (Optional, default false) Collapse all menu entries, can not be overwritten
+ # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.
+ geekdocCollapseAllSections = true
diff --git a/Documentation/i18n/.gitkeep b/Documentation/i18n/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/layouts/.gitkeep b/Documentation/layouts/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/premake5.lua b/Documentation/premake5.lua
new file mode 100644
index 000000000..dd3ee8c2e
--- /dev/null
+++ b/Documentation/premake5.lua
@@ -0,0 +1,34 @@
+-- Function to check if Hugo is available
+function isHugoAvailable()
+ local handle = io.popen("hugo version 2>nul || hugo version 2>/dev/null")
+ if handle then
+ local result = handle:read("*a")
+ handle:close()
+ return result and result ~= ""
+ end
+ return false
+end
+
+project "Documentation"
+ kind "Makefile"
+ targetdir (outputdir .. "%{cfg.buildcfg}/%{prj.name}")
+ objdir (objoutdir .. "%{cfg.buildcfg}/%{prj.name}")
+
+ files {
+ "premake5.lua",
+ "hugo.toml",
+ "hugo-local.toml",
+ "content/**.md"
+ }
+
+ if isHugoAvailable() then
+ buildcommands {
+ "hugo --gc --minify --quiet --cleanDestinationDir --destination=\"" .. outputdir .. "%{cfg.buildcfg}/%{prj.name}" .. "\" --config hugo-local.toml",
+ "@echo Documentation generated"
+ }
+ else
+ print("Hugo not found - skipping build commands for Documentation project")
+ buildcommands {
+ "@echo Hugo not available - documentation build skipped"
+ }
+ end
diff --git a/Documentation/static/.gitkeep b/Documentation/static/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Documentation/themes/hugo-geekdoc/.nvmrc b/Documentation/themes/hugo-geekdoc/.nvmrc
new file mode 100644
index 000000000..b009dfb9d
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/.nvmrc
@@ -0,0 +1 @@
+lts/*
diff --git a/Documentation/themes/hugo-geekdoc/LICENSE b/Documentation/themes/hugo-geekdoc/LICENSE
new file mode 100644
index 000000000..3812eb46b
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Robert Kaussow
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Documentation/themes/hugo-geekdoc/README.md b/Documentation/themes/hugo-geekdoc/README.md
new file mode 100644
index 000000000..b03365fb1
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/README.md
@@ -0,0 +1,46 @@
+# Geekdoc
+
+[](https://ci.thegeeklab.de/repos/thegeeklab/hugo-geekdoc)
+[](https://gohugo.io)
+[](https://github.com/thegeeklab/hugo-geekdoc/releases/latest)
+[](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors)
+[](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE)
+
+Geekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme and may not fit the requirements of complex projects. If a more feature-complete theme is required there are a lot of good alternatives out there. You can find a demo and the full documentation at [https://geekdocs.de](https://geekdocs.de).
+
+
+
+## Build and release process
+
+This theme is subject to a CI driven build and release process common for software development. During the release build, all necessary assets are automatically built by [webpack](https://webpack.js.org/) and bundled in a release tarball. You can download the latest release from the GitHub [release page](https://github.com/thegeeklab/hugo-geekdoc/releases).
+
+Due to the fact that `webpack` and `npm scripts` are used as pre-processors, the theme cannot be used from the main branch by default. If you want to use the theme from a cloned branch instead of a release tarball you'll need to install `webpack` locally and run the build script once to create all required assets.
+
+```shell
+# install required packages from package.json
+npm install
+
+# run the build script to build required assets
+npm run build
+
+# build release tarball
+npm run pack
+```
+
+See the [Getting Started Guide](https://geekdocs.de/usage/getting-started/) for details about the different setup options.
+
+## Contributors
+
+Special thanks to all [contributors](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors). If you would like to contribute, please see the [instructions](https://github.com/thegeeklab/hugo-geekdoc/blob/main/CONTRIBUTING.md).
+
+Geekdoc is inspired and partially based on the [hugo-book](https://github.com/alex-shpak/hugo-book) theme, thanks [Alex Shpak](https://github.com/alex-shpak/) for your work.
+
+## License
+
+This project is licensed under the MIT License - see the [LICENSE](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE) file for details.
+
+The used SVG icons and generated icon fonts are licensed under the license of the respective icon pack:
+
+- Font Awesome: [CC BY 4.0 License](https://github.com/FortAwesome/Font-Awesome#license)
+- IcoMoon Free Pack: [GPL/CC BY 4.0](https://icomoon.io/#icons-icomoon)
+- Material Icons: [Apache License 2.0](https://github.com/google/material-design-icons/blob/main/LICENSE)
diff --git a/Documentation/themes/hugo-geekdoc/VERSION b/Documentation/themes/hugo-geekdoc/VERSION
new file mode 100644
index 000000000..53b5bbb12
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/VERSION
@@ -0,0 +1 @@
+v1.5.1
diff --git a/Documentation/themes/hugo-geekdoc/archetypes/docs.md b/Documentation/themes/hugo-geekdoc/archetypes/docs.md
new file mode 100644
index 000000000..aa0d88f7b
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/archetypes/docs.md
@@ -0,0 +1,7 @@
+---
+title: "{{ .Name | humanize | title }}"
+weight: 1
+# geekdocFlatSection: false
+# geekdocToc: 6
+# geekdocHidden: false
+---
diff --git a/Documentation/themes/hugo-geekdoc/archetypes/posts.md b/Documentation/themes/hugo-geekdoc/archetypes/posts.md
new file mode 100644
index 000000000..fdccff8ae
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/archetypes/posts.md
@@ -0,0 +1,4 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+---
diff --git a/Documentation/themes/hugo-geekdoc/assets/search/config.json b/Documentation/themes/hugo-geekdoc/assets/search/config.json
new file mode 100644
index 000000000..1a5582a2e
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/assets/search/config.json
@@ -0,0 +1,8 @@
+{{- $searchDataFile := printf "search/%s.data.json" .Language.Lang -}}
+{{- $searchData := resources.Get "search/data.json" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify -}}
+{
+ "dataFile": {{ $searchData.RelPermalink | jsonify }},
+ "indexConfig": {{ .Site.Params.geekdocSearchConfig | jsonify }},
+ "showParent": {{ if .Site.Params.geekdocSearchShowParent }}true{{ else }}false{{ end }},
+ "showDescription": {{ if .Site.Params.geekdocSearchshowDescription }}true{{ else }}false{{ end }}
+}
diff --git a/Documentation/themes/hugo-geekdoc/assets/search/data.json b/Documentation/themes/hugo-geekdoc/assets/search/data.json
new file mode 100644
index 000000000..f1c0e804e
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/assets/search/data.json
@@ -0,0 +1,13 @@
+[
+ {{ range $index, $page := (where .Site.Pages "Params.geekdocProtected" "ne" true) }}
+ {{ if ne $index 0 }},{{ end }}
+ {
+ "id": {{ $index }},
+ "href": "{{ $page.RelPermalink }}",
+ "title": {{ (partial "utils/title" $page) | jsonify }},
+ "parent": {{ with $page.Parent }}{{ (partial "utils/title" .) | jsonify }}{{ else }}""{{ end }},
+ "content": {{ $page.Plain | jsonify }},
+ "description": {{ $page.Summary | plainify | jsonify }}
+ }
+ {{ end }}
+]
diff --git a/Documentation/themes/hugo-geekdoc/assets/sprites/geekdoc.svg b/Documentation/themes/hugo-geekdoc/assets/sprites/geekdoc.svg
new file mode 100644
index 000000000..4f3cfd291
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/assets/sprites/geekdoc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Documentation/themes/hugo-geekdoc/data/assets.json b/Documentation/themes/hugo-geekdoc/data/assets.json
new file mode 100644
index 000000000..6b56b8cc0
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/data/assets.json
@@ -0,0 +1,454 @@
+{
+ "main.js": {
+ "src": "js/main-c5dd8165.bundle.min.js",
+ "integrity": "sha512-3kfMX1lulzUe9aIfHN9vcFLldw6Z043psZDpYFxEjIcnyP8nF/Hm6ymZM8SabplLJ3OlZPWaSPeo9mL+1+ajAA=="
+ },
+ "colortheme.js": {
+ "src": "js/colortheme-05deda6f.bundle.min.js",
+ "integrity": "sha512-9t9gQ+ARf88Z2ROsuvwfdnQVl85Jg/YZAM5GCyPPSEriqBsvqc2Qc7t2toB0LlWXl/uzUp2CYJs5qojObJmwmg=="
+ },
+ "mermaid.js": {
+ "src": "js/mermaid-6735100e.bundle.min.js",
+ "integrity": "sha512-Bp7/3rUtPxABA7A4xXjke4hpZRLdoyhI35IpP+Emql5YRL0HJOmmeRNrgYuwBwRnV2NjRIO4VXiqGw+ep0vIsw=="
+ },
+ "katex.js": {
+ "src": "js/katex-13a419d8.bundle.min.js",
+ "integrity": "sha512-6MAwLoWro9jZYvZmrGTfM5oe46Ycf/V5eXGyEAIwvuxxxmbqJttAxkkJE/00mOO11Fb21BmI1udcGRb8CbFpWw=="
+ },
+ "search.js": {
+ "src": "js/search-16a110ff.bundle.min.js",
+ "integrity": "sha512-3GlBrQ51hc6WxYIDcSvYztzli9Qk6DwulVxXhZHNP/oSaK0kulRkdrMSunRTd1eb1SJE08VI/YLylmxZ5SV0hw=="
+ },
+ "js/687-3d36056d.chunk.min.js": {
+ "src": "js/687-3d36056d.chunk.min.js",
+ "integrity": "sha512-kQLv38qft9HFWqGKiJ6Y5WfLxqIahTPvC9zGsaWPtcehMMXvtpGVhy9DtTs9IQoJ8mRvScJeqjyuLrwxC5oOhA=="
+ },
+ "js/343-07706d94.chunk.min.js": {
+ "src": "js/343-07706d94.chunk.min.js",
+ "integrity": "sha512-/qoqiWqx3ASnRUCA7rH983Dfjeqi5SYNmQ+p+NXcKbrNWQgzrDmt2guuPdgnNzy31KRPRFko8Li6SG+8eSa3LQ=="
+ },
+ "js/719-e4d0dfca.chunk.min.js": {
+ "src": "js/719-e4d0dfca.chunk.min.js",
+ "integrity": "sha512-9k5mGdLrCSyVXHu/UXzumxKGinFs+rVN6m6zazbP+jQVtHa4mw4lCBK2AvwlMwM8jHAGRSaF/r2oRRc67RI3XQ=="
+ },
+ "js/846-699d57b4.chunk.min.js": {
+ "src": "js/846-699d57b4.chunk.min.js",
+ "integrity": "sha512-k59coWT+Pini4lubEKfnHroU+7f33lQsuwPmpg0ECvRurY2+OyknGrRVsFNie6BohudNKBd+j5wxNz3f87Ypfw=="
+ },
+ "js/370-0e626739.chunk.min.js": {
+ "src": "js/370-0e626739.chunk.min.js",
+ "integrity": "sha512-sD1zlmxU4zh7BFp3zhWMQnguzVz0Zagn2IEK6q/jNBTJKrjXoQPkkz+twOzopclIwac2fJIFte3iDB2Kx+mOFw=="
+ },
+ "js/740-2f747788.chunk.min.js": {
+ "src": "js/740-2f747788.chunk.min.js",
+ "integrity": "sha512-1WL3NxKkmV4vwiltpXXkhnmULZ4Tzj4sSei4EPeC6Xrs+lVsbwEp+fnAu5sjKrrA4lbM/5CPgnxB9SHQOCkELw=="
+ },
+ "js/848-160cde0b.chunk.min.js": {
+ "src": "js/848-160cde0b.chunk.min.js",
+ "integrity": "sha512-Uy5N8X4Gjj+nqrOO/csLghRKhKysINrR0lPhzQS6+PpFU3T+wT+beAig/pkIDQL/XykUkplNPNp+W4wvV1xM5Q=="
+ },
+ "js/623-da9b1ffc.chunk.min.js": {
+ "src": "js/623-da9b1ffc.chunk.min.js",
+ "integrity": "sha512-Xy5/xS1tT7Bj/LRm1kMgePYGdKyf0oQsirZjfd4gRxleBe5Nk8GCo4jIMyYeUMkgxJoTqi3AovrQ8OVMLPe00w=="
+ },
+ "js/248-d3b4979c.chunk.min.js": {
+ "src": "js/248-d3b4979c.chunk.min.js",
+ "integrity": "sha512-fn+yk/WAv05SMR4vkX3NO6nr9OYShHRn/qQYiENRDoRjwdOZTgwbns0/opBaDzgVzHVCvqAwvNHR7f+b8CJt/A=="
+ },
+ "js/440-00a1e1fb.chunk.min.js": {
+ "src": "js/440-00a1e1fb.chunk.min.js",
+ "integrity": "sha512-wctdi1AA5MiR5gHzj5+NnKeA9ueLcps+m9fuGoeTkN5IQ/1RlTp7nKqX+ejkSUApIJfib4+EX++M4JgSzcEsvQ=="
+ },
+ "js/420-35785222.chunk.min.js": {
+ "src": "js/420-35785222.chunk.min.js",
+ "integrity": "sha512-ZmrfSeStZMv0uhN2HCHeEf9axUH8m5SU01s8eDhmpwhg8nfH2ItOmAGTfDCb18L894egBJRDnEZoQoa8+Qle8w=="
+ },
+ "js/301-504b6216.chunk.min.js": {
+ "src": "js/301-504b6216.chunk.min.js",
+ "integrity": "sha512-ttBBpJnQqLGSnV2cve1lAN7UI7/IktwEkDpzWuFl0t53UVyDF0MhiXSuU7Wzo7JRQNrmRvlAoBw/xCf8wE//1Q=="
+ },
+ "js/435-95a7762e.chunk.min.js": {
+ "src": "js/435-95a7762e.chunk.min.js",
+ "integrity": "sha512-QO/03G5tckBLecR+/JNyFC1LOxLXswXnKXmc07wIKj/VkZF3+idpWtyMEPCce/sLZNU74xKovy+A6YZu/efHdg=="
+ },
+ "js/147-5647664f.chunk.min.js": {
+ "src": "js/147-5647664f.chunk.min.js",
+ "integrity": "sha512-7K/rqowto2i0lrrPviJKYcXQQPTP/H1UtEwfdTgiMVWJz7UPlSsacnnsST5cBIomyPPEVLNJAsImgktknKxSAA=="
+ },
+ "js/559-fa1bc454.chunk.min.js": {
+ "src": "js/559-fa1bc454.chunk.min.js",
+ "integrity": "sha512-Y5xhZqVX7MnRSJaLc6yZvFwui2+qjiUR+Et6EU5Xmd34HR1E9MFlAy0MLDg47iNs54nlOmQOO/7YLIS9gxFOxA=="
+ },
+ "js/975-7b2dc052.chunk.min.js": {
+ "src": "js/975-7b2dc052.chunk.min.js",
+ "integrity": "sha512-YboUWMJqvUJF1eGJRG2e9uFBo4pWt2kaj3UTUAFF2jaT9RD3HZtfvTbDItIwSjg7XCPbP9cxA7sAJJL60PjG3Q=="
+ },
+ "js/295-8a201dad.chunk.min.js": {
+ "src": "js/295-8a201dad.chunk.min.js",
+ "integrity": "sha512-6iqrS4G//vimal1Q3Q8oktFnsOE4nwkVxdLu8FG0jbGz5Hog6c8Uipms3A3TkFjkNbWCCgwoyIxtchL5Ya4gdQ=="
+ },
+ "js/388-0f08b415.chunk.min.js": {
+ "src": "js/388-0f08b415.chunk.min.js",
+ "integrity": "sha512-/vAdAth78NghcavZF4MazgYaG6AWzqePHpAeQVvN4bEXELmcErwdoY9iiKg21p/olDhOVgOeiyVEGpLR2kfhlw=="
+ },
+ "js/768-19f4d0a4.chunk.min.js": {
+ "src": "js/768-19f4d0a4.chunk.min.js",
+ "integrity": "sha512-IXyQu8L7Bx+sqyrqE6B835MY+ZS4tkXK652R5h0ZpqqWZfjzkE6ZEUWCQkjxRnVH/IEBJIaalPSe8wK44YPE2Q=="
+ },
+ "js/704-ed584c37.chunk.min.js": {
+ "src": "js/704-ed584c37.chunk.min.js",
+ "integrity": "sha512-yzGfObc3d6pVzbSAtK+t3m68LvwjIGVj+mH357lrUGX3/0ZHwNHYuYvRWKjdAf8G1Y26s6rEn9PloVzLKVajLA=="
+ },
+ "js/906-5e2ec84c.chunk.min.js": {
+ "src": "js/906-5e2ec84c.chunk.min.js",
+ "integrity": "sha512-DZRe9YZluYkK8ROyBuZv2p6o9zxf73SJ2A5KtKGzsQBsSAQgB8WUjWdwpmDjSiBgXW+gORnH5ZkpKoBJAaeT1w=="
+ },
+ "js/391-a0aaa95e.chunk.min.js": {
+ "src": "js/391-a0aaa95e.chunk.min.js",
+ "integrity": "sha512-SsnANo6lFhb6/nj2AKsr6fhf/dl7Og5bFl7QTZMbF2PK9i+FIWtux5GxNKxxfFTeGCKrH/qZsxma4lQ5apuBXQ=="
+ },
+ "js/938-e8554e58.chunk.min.js": {
+ "src": "js/938-e8554e58.chunk.min.js",
+ "integrity": "sha512-XNfNaz1o5l2benNzhFR4ztEgK2uLQeM+NIDYkkYPP5GSEzW3/a+EggrcXG+5ZGo2KvvQCS/SujFoD9W0VGm0FA=="
+ },
+ "js/130-3b252fb9.chunk.min.js": {
+ "src": "js/130-3b252fb9.chunk.min.js",
+ "integrity": "sha512-JSvuAP7SZ8ndEm18NeuU27acjLOIOmZXB4TG79Sk0JdFIyn2YgidieBBcbIjn85udp4o4IjANY161KygULGiHQ=="
+ },
+ "js/475-5c92875f.chunk.min.js": {
+ "src": "js/475-5c92875f.chunk.min.js",
+ "integrity": "sha512-9k/VWOjqBwLMGpvQ4GLqojE+hHMbfxFX5wma0zJaAPo/mB4P+5FXUNg39ubEogNOlk22iJtLO1Gz154CRpqmwQ=="
+ },
+ "js/890-8401ddb1.chunk.min.js": {
+ "src": "js/890-8401ddb1.chunk.min.js",
+ "integrity": "sha512-rd+AtvfvIlzIuKoAhf2yET9u7LaL6PJAYCsMH0k1omPwIdZ3XDWdkwTdUlbuZaA0Cfx437m4dtXQxSCI810Ceg=="
+ },
+ "js/452-56ef13c4.chunk.min.js": {
+ "src": "js/452-56ef13c4.chunk.min.js",
+ "integrity": "sha512-hbSpiv3cfquE8CuPvxdoGLVpn8pLQRQ5zstF4YVcsW0mFYCNyzY8VwEWdFJ02J58y0wyx3sl0xFsDPyGrCuJaQ=="
+ },
+ "js/723-dc4c5ebb.chunk.min.js": {
+ "src": "js/723-dc4c5ebb.chunk.min.js",
+ "integrity": "sha512-VCZ8Aj8nrlvAEWSjTDkYTw75IMClkI1Sx5Z4HzyqAWYN8BiPIc4XSKE2dAOPW7rsp/D6XYVzUby07pdYRBWJag=="
+ },
+ "js/720-9be19eb2.chunk.min.js": {
+ "src": "js/720-9be19eb2.chunk.min.js",
+ "integrity": "sha512-Y0Qf4H0YcEAiPtUDN877MBIOUF2fIfoISvjTRJY63hXrU4X2gUxsLt3MMuQUuJ/xaCpckZ6qQpUmJKttyQz4tg=="
+ },
+ "js/387-d98ee904.chunk.min.js": {
+ "src": "js/387-d98ee904.chunk.min.js",
+ "integrity": "sha512-7EBzhE2cbKwp9C9tB6TaepVg4JvosKCoFC2h7+B09MuZ/20jHZB1i2oIavsQvW2gMxTq5YTJyCbXK/KOSsJTZQ=="
+ },
+ "js/164-f339d58d.chunk.min.js": {
+ "src": "js/164-f339d58d.chunk.min.js",
+ "integrity": "sha512-oXaJMX/nm2r1p0EZhWyKp58KR6VwF06WafroIHmEiTMD7tDT+KfXf1Ryk+RopXvHx8swAt+DmOcWvsYjBc8+DQ=="
+ },
+ "js/731-7d3aeec3.chunk.min.js": {
+ "src": "js/731-7d3aeec3.chunk.min.js",
+ "integrity": "sha512-2a6jtws/5OtRtNanwRuTmmq3oCyvmS48hTnLJU+2guaZ5Y2D7spJlzZ9PJYWAnQp6hlQCMGtZYPmuRo3Od60YQ=="
+ },
+ "js/165-d20df99c.chunk.min.js": {
+ "src": "js/165-d20df99c.chunk.min.js",
+ "integrity": "sha512-UxM2ONG9adWQh4P4mhwGGV8iFP1OGRaAf7EQ39iYlGzE7CQOvNqCWcpPjnEr9BzKpuA66nIJELcUzmA4QHj1YQ=="
+ },
+ "js/567-6c3220fd.chunk.min.js": {
+ "src": "js/567-6c3220fd.chunk.min.js",
+ "integrity": "sha512-U8xZDwmMJQAUM8v4ZXJf1167FWhTvq8vrp1GagOOoivFXNw2IdO0mWRhb9NnohVouf+dooRurCBM+YUYfJEjfg=="
+ },
+ "js/297-baccf39c.chunk.min.js": {
+ "src": "js/297-baccf39c.chunk.min.js",
+ "integrity": "sha512-jARFMEDth/qJ6Qy0ERazJC4MdV2v6oUIfDXtDJgi/CVJbwf4dsK5DdwbQa6WZ/NywjYgZHftKbNoMvFhUcJY2Q=="
+ },
+ "js/428-1733cd76.chunk.min.js": {
+ "src": "js/428-1733cd76.chunk.min.js",
+ "integrity": "sha512-HvLUINz7B63vr3b6U5F5ff0JdpEfgrJ93qD/3fhuCgOwKurl0UrK8/QlLlzM64GyPhrN0xfQ4WLiIK/3Ifn8xw=="
+ },
+ "favicon/apple-touch-startup-image-2048x2732.png": {
+ "src": "favicon/apple-touch-startup-image-2048x2732.png",
+ "integrity": "sha512-pp/8QkfwltmJfJZv6lzhl9bbE+0ltO1lcpXR3432kiV2VCl1SXOiTiJYzU/lVmTO1wMrdyFwHdk0C0ZPauVmUg=="
+ },
+ "main.scss": {
+ "src": "main-b53472e8.min.css",
+ "integrity": "sha512-OdpB6Sg1KAfyLTE+HfAyWywLvzCU8lrsfVurFgj+rCZ3fwMevRyqu6WsHRHmoh3+OJv8RCuy2xbdqFZtSP7OLA=="
+ },
+ "favicon/apple-touch-startup-image-2732x2048.png": {
+ "src": "favicon/apple-touch-startup-image-2732x2048.png",
+ "integrity": "sha512-DOw5FcezHTkJ2dDT8agLZlIfrNZoxc0/OTlrkmuYgpRJiIkJykxAYQed0Ysu/MBkfwe6lWDydhlpV8oomWMKgw=="
+ },
+ "favicon/apple-touch-startup-image-1668x2388.png": {
+ "src": "favicon/apple-touch-startup-image-1668x2388.png",
+ "integrity": "sha512-Stx19Yj7N6TXbMiFMq03kLQYs1X+ft6zmpwVa/+06q8I48P+8dG64MnC8zvl0PqzYWGwcBtCa8m+/qy5JQHzmw=="
+ },
+ "favicon/apple-touch-startup-image-1668x2224.png": {
+ "src": "favicon/apple-touch-startup-image-1668x2224.png",
+ "integrity": "sha512-OJnVL7cFjpYgoqph0ZAAZ0bQMeHZHyYzeasV314vTyarpeyVDZuw0j/U2F/7ldxgFVP+Z67RNfLGfSr6SKqujw=="
+ },
+ "favicon/apple-touch-startup-image-2224x1668.png": {
+ "src": "favicon/apple-touch-startup-image-2224x1668.png",
+ "integrity": "sha512-h86d25uMsQo1wqWrc0Bm7hwQPx1/WMpIcuFXq6TV4v7QLix8jaBeXjCz6d/JG9dQVqp0rJj2L2Koh9KR4iLlbQ=="
+ },
+ "favicon/apple-touch-startup-image-2388x1668.png": {
+ "src": "favicon/apple-touch-startup-image-2388x1668.png",
+ "integrity": "sha512-HrLClFRnn0TKngyeMONGPw8WFltiAd/+456Z2w+/tRYlhblrxfNxddoacMhAfywJuZL2bnMrDFxgIeisKV7UZg=="
+ },
+ "favicon/apple-touch-startup-image-1640x2160.png": {
+ "src": "favicon/apple-touch-startup-image-1640x2160.png",
+ "integrity": "sha512-bkGRXPNafzTvHm7iqK90kmtvdUIg1davqSECk72QWcc8KQhB58+j6Y/Lsv4PNhuki/3CafltGYPwq5DC/uFwLg=="
+ },
+ "favicon/apple-touch-startup-image-1620x2160.png": {
+ "src": "favicon/apple-touch-startup-image-1620x2160.png",
+ "integrity": "sha512-a52rXNm6ZAK3hBxTW9ySrYEX76I11+P20QU4eS1spuSHH9byqr82n2C2vWsB3ASOvJgF6L9X2m1gTfcezcWa2Q=="
+ },
+ "favicon/apple-touch-startup-image-2160x1640.png": {
+ "src": "favicon/apple-touch-startup-image-2160x1640.png",
+ "integrity": "sha512-lAMwiXWTpWy3R8WXVK0Pxyfzh+nVf6TWxB1CS28nckPIvoJZ01UDW7MX15R6VJH4hC6b9yBwRFqgiWI3ey7XIg=="
+ },
+ "favicon/apple-touch-startup-image-2160x1620.png": {
+ "src": "favicon/apple-touch-startup-image-2160x1620.png",
+ "integrity": "sha512-q4BwNvR4nA/lX+O3hw5SAhDnyOAsxK2QbaUt0J2rBVr9nhewmvgyvPEQTt/rI2+v5Obt8ofbB1nKKTUKpCPpTQ=="
+ },
+ "favicon/apple-touch-startup-image-1536x2048.png": {
+ "src": "favicon/apple-touch-startup-image-1536x2048.png",
+ "integrity": "sha512-gvsMZlTvNSZUJ52q80FFfNk+oLaAw2w8EEcX3ns9QYdNJAhn51+VHnceIw49xiQpMZxu8djiEDhmGAbrnBc8Aw=="
+ },
+ "favicon/apple-touch-startup-image-2048x1536.png": {
+ "src": "favicon/apple-touch-startup-image-2048x1536.png",
+ "integrity": "sha512-HddG543jHxr+S6DljYFOj+mOrh5xQfIv+Ca2aCDuY+AU15vXWvuMeRAaNB5eGaXUA5ngSrGkPSR6cZItcipmFg=="
+ },
+ "favicon/apple-touch-startup-image-1488x2266.png": {
+ "src": "favicon/apple-touch-startup-image-1488x2266.png",
+ "integrity": "sha512-M+iU7dAuzTuuhlkFLwLOnkC/hsN6pFEuwngs+PmKEQeHnWw/nzIsfovwEjQTm5Bz7h/bbwaF8szZFHGh2lNl5A=="
+ },
+ "favicon/apple-touch-startup-image-2266x1488.png": {
+ "src": "favicon/apple-touch-startup-image-2266x1488.png",
+ "integrity": "sha512-SOCJUsMcfWiGiQFMdQ7lhUZrjio+/jwrHidpBmMZqxQL8TESi0ODeU3F1ARleaPF+rvjcWmpFpmFN7kn9tkaAA=="
+ },
+ "favicon/apple-touch-startup-image-1284x2778.png": {
+ "src": "favicon/apple-touch-startup-image-1284x2778.png",
+ "integrity": "sha512-HytWl/niNY0h8Z2g+lCOn7O9/fpBS+oPU73GnBNCd7CDwHs+IpzZ0duuRlKmfdH8x80y2bsK5DHcRDQo8TJOPQ=="
+ },
+ "favicon/apple-touch-startup-image-1290x2796.png": {
+ "src": "favicon/apple-touch-startup-image-1290x2796.png",
+ "integrity": "sha512-uE8D0pZL30x6zd3sq8tPPcmC6Q8g2dSrnypzZGllIkfSGVoj+tSEKcYrS+/L6DPM3jMuF69TNScufJtVA+Qupg=="
+ },
+ "favicon/apple-touch-startup-image-1242x2688.png": {
+ "src": "favicon/apple-touch-startup-image-1242x2688.png",
+ "integrity": "sha512-IR0rOpZn1Vs2fT7UavU7MA8D/PDGS7XmaTwkiPxLi3207GPDxZdQHIKA0vIJSodDGJT/ajON/zxDciq/6Jd00Q=="
+ },
+ "favicon/apple-touch-startup-image-1242x2208.png": {
+ "src": "favicon/apple-touch-startup-image-1242x2208.png",
+ "integrity": "sha512-V2CpCg23Xb5d0wHJS0dDPjXs9Mk2CxMOn2cx/b9zC2RWBR9QF/F33zI+MioRQ9RPqCZwt093erdAiEiOonDS3Q=="
+ },
+ "favicon/apple-touch-startup-image-2796x1290.png": {
+ "src": "favicon/apple-touch-startup-image-2796x1290.png",
+ "integrity": "sha512-Hn5Bsg7wYJhZhE+UmIMBS0lg+lHWjcrNjY/23Qxvk8keWq/D+LEz8UBA8+b9xaCF+HXo39l41keoix9bvg4zyg=="
+ },
+ "favicon/apple-touch-startup-image-2778x1284.png": {
+ "src": "favicon/apple-touch-startup-image-2778x1284.png",
+ "integrity": "sha512-CF8j/XPdlQUQHNjxGO59cS2GVyskflUEPnCqKOWellvVq+RdRa7r3952bNVlUrfzdCoaeszmZS4n71qn2ZTyTA=="
+ },
+ "favicon/apple-touch-startup-image-2208x1242.png": {
+ "src": "favicon/apple-touch-startup-image-2208x1242.png",
+ "integrity": "sha512-Ime4TqPHk2qrjA8eHM50as6Sgnlvn3pCkLlI1B/yBDvZ4CPWxDidSmWeJHeV//3dThozo95VllD1bvz/cw8gQA=="
+ },
+ "favicon/apple-touch-startup-image-1179x2556.png": {
+ "src": "favicon/apple-touch-startup-image-1179x2556.png",
+ "integrity": "sha512-CGw2nqsLTTrX3YjpHGuJD18Mv8tHySni96E6Z6pTGwfAKK1l6UCqFtbRlUZQ2MlN8vudm4aFifKtPDlFyyAOzw=="
+ },
+ "favicon/apple-touch-startup-image-1170x2532.png": {
+ "src": "favicon/apple-touch-startup-image-1170x2532.png",
+ "integrity": "sha512-Bctz35gi47GseEkA5EmsAVmtS60Vhlrc0czWW4UY0cQqIGO0VfoGvSXaccCNesY8VMgVWoZayLxcwrUWbUKK9A=="
+ },
+ "favicon/apple-touch-startup-image-2688x1242.png": {
+ "src": "favicon/apple-touch-startup-image-2688x1242.png",
+ "integrity": "sha512-ZamHO4IC0SZ5XhNCI0HaeGaKiDgLhuwWZ12z9Rt0auKt9bvtVucJgI74iAmRXE9zZNE5nmZwMuhajd+dzmZamg=="
+ },
+ "favicon/apple-touch-startup-image-1125x2436.png": {
+ "src": "favicon/apple-touch-startup-image-1125x2436.png",
+ "integrity": "sha512-FNQGGCfYgeFjeFzLFNmqcB9bcWaEX6rGk1bUS+oetvVQBU9iZ/YYp9go1A5oeifV1MMX290mlcDwG4i/mg2I0g=="
+ },
+ "favicon/favicon.ico": {
+ "src": "favicon/favicon.ico",
+ "integrity": "sha512-oyLtFbxhoEnH/aFDXDWkC+S1LT5M7VHeH+f+FOLsy8JzsswzGR0VkLu/BFvzyVQTzexmfNjP4ZFm6QJYW1/7hw=="
+ },
+ "favicon/apple-touch-startup-image-2556x1179.png": {
+ "src": "favicon/apple-touch-startup-image-2556x1179.png",
+ "integrity": "sha512-Jtknw0tI9ryKINVqgtOWLR8dZgc6cPhrh1XrDwQHRGvfdwTcU2/AGVr1w9mj59RZNnMZZgikpdW0ebZuUe4YjA=="
+ },
+ "favicon/apple-touch-startup-image-2532x1170.png": {
+ "src": "favicon/apple-touch-startup-image-2532x1170.png",
+ "integrity": "sha512-vAjXBduB/PLTvOwTsCf+VvkRq5PNhxCjDMJ408ul3wFjUb7owqU/LKspOtkNuxOE2H9u2aXqJhdcR61AUdeP8Q=="
+ },
+ "favicon/apple-touch-startup-image-2436x1125.png": {
+ "src": "favicon/apple-touch-startup-image-2436x1125.png",
+ "integrity": "sha512-yW+pbc/y6e4ZtL/PfbA77bs++nyHDjt2LewdNSgHoFytdO/0IzCi2th64HrqjkXAnwieqnqBIHOmfQDb6ntOxw=="
+ },
+ "favicon/apple-touch-icon-1024x1024.png": {
+ "src": "favicon/apple-touch-icon-1024x1024.png",
+ "integrity": "sha512-uNxs8UKFz57bkfl4uezhkIl4VfZIuSOV6lcaE/0VIYbx8hFZ7SJTShz9wiIzPMZsCSHKMY5P7uhr0FigLGD+3w=="
+ },
+ "katex.css": {
+ "src": "katex-a0da2a32.min.css",
+ "integrity": "sha512-dsM9rZ31dli/kG9VZShrbuMaNaj6t/aVT6/ZjfTuSGNp1r1EonVHHESDrKKHGbmYqs0HIUcnpWIOEqsoDlpdyw=="
+ },
+ "favicon/apple-touch-startup-image-828x1792.png": {
+ "src": "favicon/apple-touch-startup-image-828x1792.png",
+ "integrity": "sha512-lOKELuDZcqdtCvvU+wU4XbRSGVx4j5fXOViEIy8vJ/H/vad9Nb1HjXA517Mo2X3KE+xWpKBa7iaRKONe2NR77A=="
+ },
+ "favicon/apple-touch-startup-image-1792x828.png": {
+ "src": "favicon/apple-touch-startup-image-1792x828.png",
+ "integrity": "sha512-Q0rPW22UcOSrAk1Cc+VJElqo1FUOxN6M5yk6rr19l15aDfwMmlWVLVCEEuYr7YN9Yd7P6oFIP5krWpBwP8XevA=="
+ },
+ "favicon/apple-touch-startup-image-750x1334.png": {
+ "src": "favicon/apple-touch-startup-image-750x1334.png",
+ "integrity": "sha512-zFiwOUbcWZ5ZT6WIoo5JH5sBgNRKgaw+38nZ4INvrJksTXVYiTSNK+HI+g/fpjATMD3oIy3zRD1QD5MF0xcI+A=="
+ },
+ "favicon/apple-touch-startup-image-1334x750.png": {
+ "src": "favicon/apple-touch-startup-image-1334x750.png",
+ "integrity": "sha512-wS3VX86WIIMYLFcu6PTWwilPBtW2/eQgoFC4nUPbxOhA6tDCv0jXfLhpFBk0kEPvtFGqIzdMIwkhB3Q9z2WuEQ=="
+ },
+ "favicon/apple-touch-startup-image-640x1136.png": {
+ "src": "favicon/apple-touch-startup-image-640x1136.png",
+ "integrity": "sha512-Ol0z2NW7PjFrVwo5GQ0IolK6IsFJyji9biOIE7BW9wuid/H8VhMW6/j4Sxh9SZ/v0NEtQqaA5VOjvLT7hcpxVA=="
+ },
+ "favicon/apple-touch-startup-image-1136x640.png": {
+ "src": "favicon/apple-touch-startup-image-1136x640.png",
+ "integrity": "sha512-l7AF6JJHQNpeEOT32Tj+sZsyigN+FIer/RLxKqwLzXZ3cPMizSjmL5FjfoyZ7waJfDpxV448BWJcpObDEp2f0Q=="
+ },
+ "favicon/android-chrome-512x512.png": {
+ "src": "favicon/android-chrome-512x512.png",
+ "integrity": "sha512-XmRxXro8tWSW9pyhfNcuoIVqHqOHH051Lh8NpsR0bMMILrx4QSIGI+IOKo2DYafyJ32rRXQ9XapCUigUoU9lVA=="
+ },
+ "favicon/android-chrome-384x384.png": {
+ "src": "favicon/android-chrome-384x384.png",
+ "integrity": "sha512-aaWWtDDKoURtcZjVjuEygWnAX3JmiMIkzG2gw0e90QU2BBiMEFRh+Dq5lONs3NKviyhKrWjYXktnLzbBDgwYqw=="
+ },
+ "favicon/mstile-310x310.png": {
+ "src": "favicon/mstile-310x310.png",
+ "integrity": "sha512-0cJZvExwO4YX9shSiRIio61MHiRYzmd1ZKJcIuurb30a85VAebz64fGkg5WgaljhDufbzQV8juSMSMdjVU1PaQ=="
+ },
+ "favicon/android-chrome-256x256.png": {
+ "src": "favicon/android-chrome-256x256.png",
+ "integrity": "sha512-7K6tC2Nt0G4xGWOnXI0eHTnflCfBnmoZI+41wRXubcINCVj9zfE1urbpRvWXu+JEkyoD+/1i/SHKJvlj0V8Qng=="
+ },
+ "favicon/android-chrome-192x192.png": {
+ "src": "favicon/android-chrome-192x192.png",
+ "integrity": "sha512-vFuJFgoHAo1gYkmVDylyiAHTUEAzZWmusNxCf4BKZucXjB1O5WSNrnaDHd/P1U3If7pTDG3zM3R8xll9qn/TFw=="
+ },
+ "favicon/apple-touch-icon-167x167.png": {
+ "src": "favicon/apple-touch-icon-167x167.png",
+ "integrity": "sha512-n9IE0XrWkdUJCWDP+BXWGZ3f8YPWUt0j1YbpOql6ECHbBv94MqBZsCNgAAZcz2nlngn6B/VsLquKPF+C73uAaA=="
+ },
+ "favicon/apple-touch-icon-180x180.png": {
+ "src": "favicon/apple-touch-icon-180x180.png",
+ "integrity": "sha512-MOwxPnc3afecYk/ITIQPavTxfNlk68gSBXzbhrf+cYuXaXx+OKApfhsfT0MwS0RjFsi50lirbvtJyyWUce+AnA=="
+ },
+ "favicon/apple-touch-icon-precomposed.png": {
+ "src": "favicon/apple-touch-icon-precomposed.png",
+ "integrity": "sha512-MOwxPnc3afecYk/ITIQPavTxfNlk68gSBXzbhrf+cYuXaXx+OKApfhsfT0MwS0RjFsi50lirbvtJyyWUce+AnA=="
+ },
+ "favicon/apple-touch-icon.png": {
+ "src": "favicon/apple-touch-icon.png",
+ "integrity": "sha512-MOwxPnc3afecYk/ITIQPavTxfNlk68gSBXzbhrf+cYuXaXx+OKApfhsfT0MwS0RjFsi50lirbvtJyyWUce+AnA=="
+ },
+ "favicon/apple-touch-icon-152x152.png": {
+ "src": "favicon/apple-touch-icon-152x152.png",
+ "integrity": "sha512-Tl7OztU9EPEmqAB5g1fZbDfJILIFGGRYoXVRLmBli4G/kDRcZMhsZPEpwjcaElSsZ6Vf+GOBX5w+y/37wcLNmA=="
+ },
+ "favicon/apple-touch-icon-144x144.png": {
+ "src": "favicon/apple-touch-icon-144x144.png",
+ "integrity": "sha512-RcXaoNQ/5TvDfRK3B16Xmbool22kaq9anaZ/+bxz6T4IkXly6Ss4V7E7sjAHY0z9VdBi8RlOXmCf1QVF/bO1UQ=="
+ },
+ "favicon/android-chrome-144x144.png": {
+ "src": "favicon/android-chrome-144x144.png",
+ "integrity": "sha512-MwJ9846H56kKjlblEn11IvX5wwgw8thJRda/Oz17yUs75jussMZX4XX5CFgp+Fgcj00FydeEm2x5QX4aay2H4w=="
+ },
+ "favicon/mstile-144x144.png": {
+ "src": "favicon/mstile-144x144.png",
+ "integrity": "sha512-MwJ9846H56kKjlblEn11IvX5wwgw8thJRda/Oz17yUs75jussMZX4XX5CFgp+Fgcj00FydeEm2x5QX4aay2H4w=="
+ },
+ "favicon/mstile-310x150.png": {
+ "src": "favicon/mstile-310x150.png",
+ "integrity": "sha512-533u9y8NEHRs6GP6+n7s7h296T50Y8dwB8FcS5htN7k+V9hWfurx6zfeqw6nDA9r9viOcKQXlJ/XfZLEpaMGMA=="
+ },
+ "favicon/mstile-150x150.png": {
+ "src": "favicon/mstile-150x150.png",
+ "integrity": "sha512-jm3Ncpm56VyOSvOsiKRMhX/AYl6vbZr9n80if2QsEyx/Rk9/+owriCEhlKkQ0krUrlEvvAh4Yy40JIiB7GHZYw=="
+ },
+ "favicon/apple-touch-icon-114x114.png": {
+ "src": "favicon/apple-touch-icon-114x114.png",
+ "integrity": "sha512-ZiGvyFWIDPl9YZ+NOn93b/7EpDtrw97agCizkuDdFRLr9I2u9FFZTnoik7LJapL3dnDGYD0E8qTJULOwMAthzA=="
+ },
+ "favicon/apple-touch-icon-120x120.png": {
+ "src": "favicon/apple-touch-icon-120x120.png",
+ "integrity": "sha512-0PVV+vO18IoVIOgedCOGdzRv6DF/71ygDGR7ijVJOT06xOsACnKooiS25YcXg6sVYjSBNO9omRGqYS+icunJCw=="
+ },
+ "mobile.scss": {
+ "src": "mobile-7885c8a8.min.css",
+ "integrity": "sha512-Z7ITW++KaZIM1eRFx/tHmRiXHNUML5Rtsn2XQkD/+4mfm6xZLEg65EVqcnqZWtqzviAI03RV+MKtuZRHpkNmvw=="
+ },
+ "favicon/manifest.webmanifest": {
+ "src": "favicon/manifest.webmanifest",
+ "integrity": "sha512-jWI8l1WzeZTVACRS28IeRRCxVue3FSmpky9ou90cG6sc7e9kmJtfQ9NfoFMYyOZ0xIqiA6N2FFD1e/Sx7VXK4g=="
+ },
+ "favicon/android-chrome-96x96.png": {
+ "src": "favicon/android-chrome-96x96.png",
+ "integrity": "sha512-Ml8MN6tFQcvVu1M9uFZyZxrtkJwcQv1i/VBs+6YDFvfNkGkvAMGmD3xmvS6qPbc6zazvpncQoAwihcwDYQ1DdQ=="
+ },
+ "favicon/apple-touch-icon-72x72.png": {
+ "src": "favicon/apple-touch-icon-72x72.png",
+ "integrity": "sha512-xtDi3mPErMdQnOCAF36WY9+Yb9IEgFiWZxcwfI8ZyzLM+zSVXieiTNgvMp3Q7FKbYzuO/YbcY34aSpDeNbwSkw=="
+ },
+ "favicon/apple-touch-icon-76x76.png": {
+ "src": "favicon/apple-touch-icon-76x76.png",
+ "integrity": "sha512-5mXpJ0SOGLyJhM+1sKauzI78IZ2e3KX0Ut6bakTWECIS+GMtGU9i4YX2kCgIlf6MYD8NlHhNjgjTXguCQvpOkQ=="
+ },
+ "favicon/android-chrome-72x72.png": {
+ "src": "favicon/android-chrome-72x72.png",
+ "integrity": "sha512-yRiTvAL7S+LN+QqFT20OKvlUxy76dWOdYDt/oYrlvlITmWTB+IT3zscjYV3a+eQK0aaBnI3BYvyPpP0Jl0cp/w=="
+ },
+ "favicon/mstile-70x70.png": {
+ "src": "favicon/mstile-70x70.png",
+ "integrity": "sha512-YR17fb3y2Mop9r3sGULUWVS08KBsjl541ijD4NfjH9B7MHXot+bKNm+xtqlYSrTNnh1Q5swG1pE8ilH8aT77kA=="
+ },
+ "favicon/apple-touch-icon-57x57.png": {
+ "src": "favicon/apple-touch-icon-57x57.png",
+ "integrity": "sha512-3QaWN6DLuPtw8MP7aduHbuO1xiPEJlWE5WCckCnbLThBoYUOB1RV8flSAFAE11UpmqefMB4r2sWwuGRuHFSCtg=="
+ },
+ "favicon/apple-touch-icon-60x60.png": {
+ "src": "favicon/apple-touch-icon-60x60.png",
+ "integrity": "sha512-tHDTnMw35Ydrn4aUvkaXwVUsqBjboI2vqm3n2lL5jf21t6SMoekze+YFNC0MBNWEG08ajVQ9L7Qljf9Z2evhBA=="
+ },
+ "favicon/favicon-48x48.png": {
+ "src": "favicon/favicon-48x48.png",
+ "integrity": "sha512-Yp178+WA3ntd5AMrdskywuc8ubmWN9qqghWXAyyzbpBBMhKplIP2BveCOP6R16ZUGOcyzPnzjSRY3yESXjcZCQ=="
+ },
+ "favicon/android-chrome-48x48.png": {
+ "src": "favicon/android-chrome-48x48.png",
+ "integrity": "sha512-pPHYffX13GvEmTZMLvEocQDWE7rdp0KIM7cdY3w24+3H37j5vbo7K2xsCR92GpzBNXkw0hzcJcdyktaT+E1sag=="
+ },
+ "favicon/favicon-32x32.png": {
+ "src": "favicon/favicon-32x32.png",
+ "integrity": "sha512-5elFUf6p+aWoJI3WIS3dhk3MIAqMMM1XFsVZpzG63sITcr1I8iAfjsCIYTJ3fTvSSoFlFRKZ9djMVSNDEK6DqA=="
+ },
+ "favicon/android-chrome-36x36.png": {
+ "src": "favicon/android-chrome-36x36.png",
+ "integrity": "sha512-+cyRuV3w4FEq8DVZRGZ9CTiVja2RtOd9PmAIRciFDEpBX3KhdWS8sbLVl7FQ/yX5IkB8xmPla4VJjcgpcftO8w=="
+ },
+ "print.scss": {
+ "src": "print-72068949.min.css",
+ "integrity": "sha512-uuCwn+/RdwIo3i0FQEJpU2BX38diEpzBQD6eDEePbDmzjYTil/TI9ijRDEUGSqnXSL9pX+YPNzsQJDxPlBG92g=="
+ },
+ "favicon/favicon-16x16.png": {
+ "src": "favicon/favicon-16x16.png",
+ "integrity": "sha512-w2lU/rHj2Yf/yb5QMLW9CMSVv8jCr2kBqvqekSINDI7K7oga1RSeCPEtgcSy9n6zQzdFOmswybhPtNJhPcD9TA=="
+ },
+ "favicon/browserconfig.xml": {
+ "src": "favicon/browserconfig.xml",
+ "integrity": "sha512-cUHMy43WEDyWiiDTIcOab69HpATbZfoMFHJTYFx3SiU+vXLMHqo3w3mgQnrvdfs42gp37T+bw05l1qLFxlGwoA=="
+ },
+ "custom.css": {
+ "src": "custom.css",
+ "integrity": "sha512-1kALo+zc1L2u1rvyxPIew+ZDPWhnIA1Ei2rib3eHHbskQW+EMxfI9Ayyva4aV+YRrHvH0zFxvPSFIuZ3mfsbRA=="
+ }
+}
\ No newline at end of file
diff --git a/Documentation/themes/hugo-geekdoc/eslint.config.js b/Documentation/themes/hugo-geekdoc/eslint.config.js
new file mode 100644
index 000000000..42e87cbc3
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/eslint.config.js
@@ -0,0 +1,22 @@
+import eslint from "@eslint/js";
+import globals from "globals";
+import babelParser from "@babel/eslint-parser";
+import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
+
+export default [
+ eslint.configs.recommended,
+ {
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ },
+ parser: babelParser,
+ ecmaVersion: 2022,
+ sourceType: "module",
+ parserOptions: {
+ requireConfigFile: false,
+ },
+ },
+ },
+ eslintPluginPrettierRecommended,
+];
diff --git a/Documentation/themes/hugo-geekdoc/i18n/am.yaml b/Documentation/themes/hugo-geekdoc/i18n/am.yaml
new file mode 100644
index 000000000..d45f53629
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/am.yaml
@@ -0,0 +1,52 @@
+---
+edit_page: ገጹን ማስተካከያ
+
+nav_navigation: መሄጃ
+nav_tags: መለያዎች
+nav_more: ተጨማሪ
+nav_top: ወደ ላይ ተመለስ
+
+form_placeholder_search: ፈልግ
+
+error_page_title: ጠፋብዎት? አይጨነቁ።
+error_message_title: ጠፋብዎት?
+error_message_code: አልተገኘም
+error_message_text: >
+ ገጹን ማግኘት አልተቻለም፤ ነገር ግን አይጨነቁ፤ በዚህ ገጽ መመለስ ይችላሉ።
+
+button_toggle_dark: ብሩህ/ጨለማ መቀያየሪያ
+button_nav_open: መሄጃውን ክፈት
+button_nav_close: መሄጃውን ዝጋ
+button_menu_open: ምርጫዎችን ክፈት
+button_menu_close: ምርጫዎችን ዝጋ
+button_homepage: ወደ መጀመሪያ ገጽ ተመለስ
+
+title_anchor_prefix: "ማያያዣ ወደ:"
+
+posts_read_more: ሙሉውን ያንብቡ
+posts_read_time:
+ one: "ለማንበብ አንድ ደቂቃ"
+ other: "{{ . }} ደቂቃዎች ለማንበብ"
+posts_update_prefix: መጨረሻ የዘመነው
+posts_count:
+ one: "አንድ ጽሑፍ"
+ other: "{{ . }} ጽሑፎች"
+posts_tagged_with: ከ '{{ . }}' ጋር የተዛመዱ ጽሑፎች በሙሉ
+
+footer_build_with: >
+ በ Hugo የተገነባ ከ
+ ጋር
+footer_legal_notice: ሕጋዊ መረጃዎች
+footer_privacy_policy: ስለ መረጃዎ አያያዝ ያለን አቋም
+footer_content_license_prefix: >
+ ስለ ይዘቱ ባለመብትነት መረጃ
+
+language_switch_no_tranlation_prefix: "ያልተተረጐመ ገጽ:"
+
+propertylist_required: ግድ የሚያስፈልግ
+propertylist_optional: ግድ ያልሆነ
+propertylist_default: በባዶ ፈንታ
+
+pagination_page_prev: ያለፈው
+pagination_page_next: ቀጣይ
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/cs.yaml b/Documentation/themes/hugo-geekdoc/i18n/cs.yaml
new file mode 100644
index 000000000..71dd8ed30
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/cs.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Upravit stránku
+
+nav_navigation: Navigace
+nav_tags: Tagy
+nav_more: Více
+nav_top: Zpět nahoru
+
+form_placeholder_search: Vyhledat
+
+error_page_title: Ztracen? Nic se neděje
+error_message_title: Ztracen?
+error_message_code: Error 404
+error_message_text: >
+ Vypadá to že stránka, kterou hledáte, neexistuje. Nemějte obavy, můžete
+ se vrátit zpět na domovskou stránku.
+
+button_toggle_dark: Přepnout tmavý/světlý/automatický režim
+button_nav_open: Otevřít navigaci
+button_nav_close: Zavřít navigaci
+button_menu_open: Otevřít lištu nabídky
+button_menu_close: Zavřít lištu nabídky
+button_homepage: Zpět na domovskou stránku
+
+title_anchor_prefix: "Odkaz na:"
+
+posts_read_more: Přečíst celý příspěvek
+posts_read_time:
+ one: "Doba čtení: 1 minuta"
+ other: "Doba čtení: {{ . }} minut(y)"
+posts_update_prefix: Naposledy upraveno
+posts_count:
+ one: "Jeden příspěvek"
+ other: "Příspěvků: {{ . }}"
+posts_tagged_with: Všechny příspěvky označeny '{{ . }}'
+
+footer_build_with: >
+ Vytvořeno za pomocí Hugo a
+
+footer_legal_notice: Právní upozornění
+footer_privacy_policy: Zásady ochrany soukromí
+footer_content_license_prefix: >
+ Obsah licencovaný pod
+
+language_switch_no_tranlation_prefix: "Stránka není přeložena:"
+
+propertylist_required: povinné
+propertylist_optional: volitené
+propertylist_default: výchozí
+
+pagination_page_prev: předchozí
+pagination_page_next: další
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/da.yaml b/Documentation/themes/hugo-geekdoc/i18n/da.yaml
new file mode 100644
index 000000000..2ba96eafc
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/da.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Rediger side
+
+nav_navigation: Navigation
+nav_tags: Tags
+nav_more: Mere
+nav_top: Til toppen
+
+form_placeholder_search: Søg
+
+error_page_title: Faret vild? Bare rolig
+error_message_title: Lost?
+error_message_code: Fejl 404
+error_message_text: >
+ Det du leder efter kan ikke findes. Bare rolig, du kan komme tilbage til
+ forsiden.
+
+button_toggle_dark: Skift Dark/Light/Auto mode
+button_nav_open: Åben navigation
+button_nav_close: Luk navigation
+button_menu_open: Åben menubar
+button_menu_close: Luk menubar
+button_homepage: Tilbage til forsiden
+
+title_anchor_prefix: "Link til:"
+
+posts_read_more: Læs fulde indlæg
+posts_read_time:
+ one: "Et minut at gennemlæse"
+ other: "{{ . }} minutter at gennemlæse"
+posts_update_prefix: Opdateret den
+posts_count:
+ one: "Et indlæg"
+ other: "{{ . }} indlæg"
+posts_tagged_with: Alle indslag tagget med '{{ . }}'
+
+footer_build_with: >
+ Bygget med Hugo og
+
+footer_legal_notice: Forretningsbetingelser
+footer_privacy_policy: Privatlivspolitik
+footer_content_license_prefix: >
+ Indhold licenseret under
+
+language_switch_no_tranlation_prefix: "Indlæg ikke oversat:"
+
+propertylist_required: påkrævet
+propertylist_optional: valgfri
+propertylist_default: udgangspunkt
+
+pagination_page_prev: forrige
+pagination_page_next: næste
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/de.yaml b/Documentation/themes/hugo-geekdoc/i18n/de.yaml
new file mode 100644
index 000000000..ae3dc99fc
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/de.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Seite bearbeiten
+
+nav_navigation: Navigation
+nav_tags: Tags
+nav_more: Weitere
+nav_top: Nach oben
+
+form_placeholder_search: Suchen
+
+error_page_title: Verlaufen? Keine Sorge
+error_message_title: Verlaufen?
+error_message_code: Fehler 404
+error_message_text: >
+ Wir können die Seite nach der Du gesucht hast leider nicht finden. Keine Sorge,
+ wir bringen Dich zurück zur Startseite.
+
+button_toggle_dark: Wechsel zwischen Dunkel/Hell/Auto Modus
+button_nav_open: Navigation öffnen
+button_nav_close: Navigation schließen
+button_menu_open: Menüband öffnen
+button_menu_close: Menüband schließen
+button_homepage: Zurück zur Startseite
+
+title_anchor_prefix: "Link zu:"
+
+posts_read_more: Ganzen Artikel lesen
+posts_read_time:
+ one: "Eine Minute Lesedauer"
+ other: "{{ . }} Minuten Lesedauer"
+posts_update_prefix: Aktualisiert am
+posts_count:
+ one: "Ein Artikel"
+ other: "{{ . }} Artikel"
+posts_tagged_with: Alle Artikel mit dem Tag '{{ . }}'
+
+footer_build_with: >
+ Entwickelt mit Hugo und
+
+footer_legal_notice: Impressum
+footer_privacy_policy: Datenschutzerklärung
+footer_content_license_prefix: >
+ Inhalt lizensiert unter
+
+language_switch_no_tranlation_prefix: "Seite nicht übersetzt:"
+
+propertylist_required: erforderlich
+propertylist_optional: optional
+propertylist_default: Standardwert
+
+pagination_page_prev: vorher
+pagination_page_next: weiter
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/en.yaml b/Documentation/themes/hugo-geekdoc/i18n/en.yaml
new file mode 100644
index 000000000..ff19ea4e8
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/en.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Edit page
+
+nav_navigation: Navigation
+nav_tags: Tags
+nav_more: More
+nav_top: Back to top
+
+form_placeholder_search: Search
+
+error_page_title: Lost? Don't worry
+error_message_title: Lost?
+error_message_code: Error 404
+error_message_text: >
+ Seems like what you are looking for can't be found. Don't worry, we can
+ bring you back to the homepage.
+
+button_toggle_dark: Toggle Dark/Light/Auto mode
+button_nav_open: Open Navigation
+button_nav_close: Close Navigation
+button_menu_open: Open Menu Bar
+button_menu_close: Close Menu Bar
+button_homepage: Back to homepage
+
+title_anchor_prefix: "Anchor to:"
+
+posts_read_more: Read full post
+posts_read_time:
+ one: "One minute to read"
+ other: "{{ . }} minutes to read"
+posts_update_prefix: Updated on
+posts_count:
+ one: "One post"
+ other: "{{ . }} posts"
+posts_tagged_with: All posts tagged with '{{ . }}'
+
+footer_build_with: >
+ Built with Hugo and
+
+footer_legal_notice: Legal Notice
+footer_privacy_policy: Privacy Policy
+footer_content_license_prefix: >
+ Content licensed under
+
+language_switch_no_tranlation_prefix: "Page not translated:"
+
+propertylist_required: required
+propertylist_optional: optional
+propertylist_default: default
+
+pagination_page_prev: prev
+pagination_page_next: next
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/es.yaml b/Documentation/themes/hugo-geekdoc/i18n/es.yaml
new file mode 100644
index 000000000..8e65cec7b
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/es.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Editar página
+
+nav_navigation: Navegación
+nav_tags: Etiquetas
+nav_more: Más
+nav_top: Inicio de la página
+
+form_placeholder_search: Buscar
+
+error_page_title: Perdido? No te preocupes
+error_message_title: Perdido?
+error_message_code: Error 404
+error_message_text: >
+ Al parecer, lo que estás buscando no pudo ser encontrado. No te preocupes, podemos
+ llevarte de vuelta al inicio.
+
+button_toggle_dark: Cambiar el modo Oscuro/Claro/Auto
+button_nav_open: Abrir la Navegación
+button_nav_close: Cerrar la Navegación
+button_menu_open: Abrir el Menú Bar
+button_menu_close: Cerrar el Menú Bar
+button_homepage: Volver al Inicio
+
+title_anchor_prefix: "Anclado a:"
+
+posts_read_more: Lee la publicación completa
+posts_read_time:
+ one: "Un minuto para leer"
+ other: "{{ . }} minutos para leer"
+posts_update_prefix: Actualizado en
+posts_count:
+ one: "Una publicación"
+ other: "{{ . }} publicaciones"
+posts_tagged_with: Todas las publicaciones etiquetadas con '{{ . }}'
+
+footer_build_with: >
+ Creado con Hugo y
+
+footer_legal_notice: Aviso Legal
+footer_privacy_policy: Política de Privacidad
+footer_content_license_prefix: >
+ Contenido licenciado con
+
+language_switch_no_tranlation_prefix: "Página no traducida:"
+
+propertylist_required: requerido
+propertylist_optional: opcional
+propertylist_default: estándar
+
+pagination_page_prev: previo
+pagination_page_next: siguiente
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/fr.yaml b/Documentation/themes/hugo-geekdoc/i18n/fr.yaml
new file mode 100644
index 000000000..bbded8579
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/fr.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Editer la page
+
+nav_navigation: Navigation
+nav_tags: Tags
+nav_more: Plus
+nav_top: Retour au haut de page
+
+form_placeholder_search: Chercher
+
+error_page_title: Perdu? Ne t'inquiète pas
+error_message_title: Perdu?
+error_message_code: Error 404
+error_message_text: >
+ On dirait que ce que vous cherchez est introuvable. Ne vous inquiétez pas, nous pouvons
+ vous ramèner à la page d'accueil.
+
+button_toggle_dark: Basculer le mode Sombre/Clair/Auto
+button_nav_open: Ouvrir la navigation
+button_nav_close: Fermer la navigation
+button_menu_open: Ouvrir la barre de menus
+button_menu_close: Fermer la barre de menus
+button_homepage: retour à la page d'accueil
+
+title_anchor_prefix: "Ancrer à :"
+
+posts_read_more: Lire l'article complet
+posts_read_time:
+ one: "Une minute pour lire"
+ other: "{{ . }} minutes à lire"
+posts_update_prefix: Mis à jour le
+posts_count:
+ one: "Un billet"
+ other: "{{ . }} billets"
+posts_tagged_with: Tous les articles marqués avec '{{ . }}'
+
+footer_build_with: >
+ Construit avec Hugo et
+
+footer_legal_notice: Mentions légales
+footer_privacy_policy: Politique de confidentialité
+footer_content_license_prefix: >
+ Contenu sous licence
+
+language_switch_no_tranlation_prefix: "Page non traduite:"
+
+propertylist_required: requis
+propertylist_optional: facultatif
+propertylist_default: défaut
+
+pagination_page_prev: précédent
+pagination_page_next: suivant
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/it.yaml b/Documentation/themes/hugo-geekdoc/i18n/it.yaml
new file mode 100644
index 000000000..ce7c40b4e
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/it.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Modifica la pagina
+
+nav_navigation: Navigazione
+nav_tags: Etichette
+nav_more: Altro
+nav_top: Torna su
+
+form_placeholder_search: Cerca
+
+error_page_title: Perso? Non ti preoccupare
+error_message_title: Perso?
+error_message_code: Errore 404
+error_message_text: >
+ Sembra che non sia possibile trovare quello che stavi cercando. Non ti preoccupare,
+ possiamo riportarti alla pagina iniziale.
+
+button_toggle_dark: Seleziona il tema Chiaro/Scuro/Automatico
+button_nav_open: Apri la Navigazione
+button_nav_close: Chiudi la Navigazione
+button_menu_open: Apri la Barra del Menu
+button_menu_close: Chiudi la Barra del Menu
+button_homepage: Torna alla pagina iniziale
+
+title_anchor_prefix: "Ancora a:"
+
+posts_read_more: Leggi tutto il post
+posts_read_time:
+ one: "Tempo di lettura: un minuto"
+ other: "Tempo di lettura: {{ . }} minuti"
+posts_update_prefix: Aggiornato il
+posts_count:
+ one: "Un post"
+ other: "{{ . }} post"
+posts_tagged_with: Tutti i post etichettati con '{{ . }}'
+
+footer_build_with: >
+ Realizzato con Hugo e
+
+footer_legal_notice: Avviso Legale
+footer_privacy_policy: Politica sulla Privacy
+footer_content_license_prefix: >
+ Contenuto sotto licenza
+
+language_switch_no_tranlation_prefix: "Pagina non tradotta:"
+
+propertylist_required: richiesto
+propertylist_optional: opzionale
+propertylist_default: valore predefinito
+
+pagination_page_prev: precedente
+pagination_page_next: prossimo
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/ja.yaml b/Documentation/themes/hugo-geekdoc/i18n/ja.yaml
new file mode 100644
index 000000000..506e7b4e1
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/ja.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: ページの編集
+
+nav_navigation: ナビゲーション
+nav_tags: タグ
+nav_more: さらに
+nav_top: トップへ戻る
+
+form_placeholder_search: 検索
+
+error_page_title: お困りですか?ご心配なく
+error_message_title: お困りですか?
+error_message_code: 404 エラー
+error_message_text: >
+ お探しのものが見つからないようです。トップページ
+ へ戻ることができるので、ご安心ください。
+
+button_toggle_dark: モードの切替 ダーク/ライト/自動
+button_nav_open: ナビゲーションを開く
+button_nav_close: ナビゲーションを閉じる
+button_menu_open: メニューバーを開く
+button_menu_close: メニューバーを閉じる
+button_homepage: トップページへ戻る
+
+title_anchor_prefix: "アンカー先:"
+
+posts_read_more: 全投稿を閲覧
+posts_read_time:
+ one: "読むのに 1 分かかります"
+ other: "読むのに要する時間 {{ . }} (分)"
+posts_update_prefix: 更新時刻
+posts_count:
+ one: "一件の投稿"
+ other: "{{ . }} 件の投稿"
+posts_tagged_with: "'{{ . }}'のタグが付いた記事全部"
+
+footer_build_with: >
+ Hugo でビルドしています。
+
+footer_legal_notice: 法的な告知事項
+footer_privacy_policy: プライバシーポリシー
+footer_content_license_prefix: >
+ 提供するコンテンツのライセンス
+
+language_switch_no_tranlation_prefix: "未翻訳のページ:"
+
+propertylist_required: 必須
+propertylist_optional: 任意
+propertylist_default: 既定値
+
+pagination_page_prev: 前
+pagination_page_next: 次
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/nl.yaml b/Documentation/themes/hugo-geekdoc/i18n/nl.yaml
new file mode 100644
index 000000000..8e24d62a4
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/nl.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Wijzig pagina
+
+nav_navigation: Navigatie
+nav_tags: Markering
+nav_more: Meer
+nav_top: Terug naar boven
+
+form_placeholder_search: Zoek
+
+error_page_title: Verdwaald? Geen probleem
+error_message_title: Verdwaald?
+error_message_code: Error 404
+error_message_text: >
+ Het lijkt er op dat wat je zoekt niet gevonden kan worden. Geen probleem,
+ we kunnen je terug naar de startpagina brengen.
+
+button_toggle_dark: Wijzig Donker/Licht/Auto weergave
+button_nav_open: Open navigatie
+button_nav_close: Sluit navigatie
+button_menu_open: Open menubalk
+button_menu_close: Sluit menubalk
+button_homepage: Terug naar startpagina
+
+title_anchor_prefix: "Link naar:"
+
+posts_read_more: Lees volledige bericht
+posts_read_time:
+ one: "Een minuut leestijd"
+ other: "{{ . }} minuten leestijd"
+posts_update_prefix: Bijgewerkt op
+posts_count:
+ one: "Een bericht"
+ other: "{{ . }} berichten"
+posts_tagged_with: Alle berichten gemarkeerd met '{{ . }}'
+
+footer_build_with: >
+ Gebouwd met Hugo en
+
+footer_legal_notice: Juridische mededeling
+footer_privacy_policy: Privacybeleid
+footer_content_license_prefix: >
+ Inhoud gelicenseerd onder
+
+language_switch_no_tranlation_prefix: "Pagina niet vertaald:"
+
+propertylist_required: verplicht
+propertylist_optional: optioneel
+propertylist_default: standaard
+
+pagination_page_prev: vorige
+pagination_page_next: volgende
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/oc.yaml b/Documentation/themes/hugo-geekdoc/i18n/oc.yaml
new file mode 100644
index 000000000..a68685f3e
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/oc.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: Modificar la pagina
+
+nav_navigation: Navegacion
+nav_tags: Etiquetas
+nav_more: Mai
+nav_top: Tornar ennaut
+
+form_placeholder_search: Cercar
+
+error_page_title: Perdut ? Cap de problèma
+error_message_title: Perdut ?
+error_message_code: Error 404
+error_message_text: >
+ Sembla que cercatz quicòm que se pòt pas trobat. Vos’n fagatz pas vos podèm
+ tornar a la pagina d’acuèlh.
+
+button_toggle_dark: Alternar lo mòde escur/clar/auto
+button_nav_open: Dobrir la navegacion
+button_nav_close: Tampar la navegacion
+button_menu_open: Dobrir la barra de menú
+button_menu_close: Tampar la barra de menú
+button_homepage: Tornar a la pagina d’acuèlh
+
+title_anchor_prefix: "Ancorar a:"
+
+posts_read_more: Legir la publicacion complèta
+posts_read_time:
+ one: "Una minuta de lectura"
+ other: "{{ . }} minutas de lectura"
+posts_update_prefix: Actualizada lo
+posts_count:
+ one: "Una publicacion"
+ other: "{{ . }} publicacions"
+posts_tagged_with: Totas las publicacions amb '{{ . }}'
+
+footer_build_with: >
+ Construch amb Hugo e
+
+footer_legal_notice: Mencions legalas
+footer_privacy_policy: politica de confidencialitat
+footer_content_license_prefix: >
+ Contengut sota licéncia
+
+language_switch_no_tranlation_prefix: "Pagina non traducha :"
+
+propertylist_required: requerit
+propertylist_optional: opcional
+propertylist_default: per defaut
+
+pagination_page_prev: prec.
+pagination_page_next: seg.
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/i18n/zh-cn.yaml b/Documentation/themes/hugo-geekdoc/i18n/zh-cn.yaml
new file mode 100644
index 000000000..e6403acd1
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/i18n/zh-cn.yaml
@@ -0,0 +1,53 @@
+---
+edit_page: 编辑页面
+
+nav_navigation: 导航
+nav_tags: 标签
+nav_more: 更多
+nav_top: 回到顶部
+
+form_placeholder_search: 搜索
+
+error_page_title: 迷路了? 不用担心
+error_message_title: 迷路了?
+error_message_code: 错误 404
+error_message_text: >
+ 好像找不到你要找的东西。 别担心,我们可以
+ 带您回到主页。
+
+button_toggle_dark: 切换暗/亮/自动模式
+button_nav_open: 打开导航
+button_nav_close: 关闭导航
+button_menu_open: 打开菜单栏
+button_menu_close: 关闭菜单栏
+button_homepage: 返回首页
+
+title_anchor_prefix: "锚定到:"
+
+posts_read_more: 阅读全文
+posts_read_time:
+ one: "一分钟阅读时间"
+ other: "{{ . }} 分钟阅读时间"
+posts_update_prefix: 更新时间
+posts_count:
+ one: 一篇文章
+ other: "{{ . }} 个帖子"
+posts_tagged_with: 所有带有“{{ . }}”标签的帖子。
+
+footer_build_with: >
+ 基于 Hugo
+ 制作
+footer_legal_notice: "法律声明"
+footer_privacy_policy: "隐私政策"
+footer_content_license_prefix: >
+ 内容许可证
+
+language_switch_no_tranlation_prefix: "页面未翻译:"
+
+propertylist_required: 需要
+propertylist_optional: 可选
+propertylist_default: 默认值
+
+pagination_page_prev: 以前
+pagination_page_next: 下一个
+pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"
diff --git a/Documentation/themes/hugo-geekdoc/images/readme.png b/Documentation/themes/hugo-geekdoc/images/readme.png
new file mode 100644
index 000000000..10c8ff157
Binary files /dev/null and b/Documentation/themes/hugo-geekdoc/images/readme.png differ
diff --git a/Documentation/themes/hugo-geekdoc/images/screenshot.png b/Documentation/themes/hugo-geekdoc/images/screenshot.png
new file mode 100644
index 000000000..af243606d
Binary files /dev/null and b/Documentation/themes/hugo-geekdoc/images/screenshot.png differ
diff --git a/Documentation/themes/hugo-geekdoc/images/tn.png b/Documentation/themes/hugo-geekdoc/images/tn.png
new file mode 100644
index 000000000..ee6e42ed0
Binary files /dev/null and b/Documentation/themes/hugo-geekdoc/images/tn.png differ
diff --git a/Documentation/themes/hugo-geekdoc/layouts/404.html b/Documentation/themes/hugo-geekdoc/layouts/404.html
new file mode 100644
index 000000000..fcd8c5195
--- /dev/null
+++ b/Documentation/themes/hugo-geekdoc/layouts/404.html
@@ -0,0 +1,38 @@
+
+
+
+ {{ partial "head/meta" . }}
+ {{ i18n "error_page_title" }}
+
+ {{ partial "head/favicons" . }}
+ {{ partial "head/others" . }}
+
+
+
+ {{ partial "svg-icon-symbols" . }}
+
+
+