Repository: neilenns-projects/mobiflight-docs
Pull request #313: Instructions for VKB Controllers
Author: login: cbrauers
Created: 2025-05-02T11:03:39Z | Merged: 2025-05-02T14:52:55Z

First writeup to get #187 resolved. Tried to cut down on the rambling a bit.

Definer tool is still in the middle of some updates, so I did not redo the screenshots for now, but I want to give users something they can work with without having to refer to the wiki guide, and I want a starting point for further elaborations.

@untoldforce, as one of the more prolific users on this, I would welcome your feedback as well.

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Documentation**
  - Added new user guides for VKB device support, including setup instructions, LED output configuration, and encoder support.
  - Provided step-by-step instructions for creating custom definition files for VKB controllers.
  - Introduced detailed guidance on enabling advanced encoder functionality and technical information about encoder virtual button mapping.
  - Included notes on compatibility requirements and configuration tips for improved device responsiveness.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/content/game-controllers/vkb/MTGR_Mk2.zip b/content/game-controllers/vkb/MTGR_Mk2.zip
new file mode 100644
index 00000000..0ab7ebe2
Binary files /dev/null and b/content/game-controllers/vkb/MTGR_Mk2.zip differ
diff --git a/content/game-controllers/vkb/_index.md b/content/game-controllers/vkb/_index.md
new file mode 100644
index 00000000..e0121cea
--- /dev/null
+++ b/content/game-controllers/vkb/_index.md
@@ -0,0 +1,23 @@
+---
+title: VKB devices
+description: How to use VKB devices with MobiFlight.
+next: /game-controllers/vkb/encoder-support
+weight: 60
+---
+MobiFlight supports all VKB controllers and their axes, buttons and hat switches as generic game controller inputs. Limited encoder functionality is also available as a generic game controller.
+
+As with all game controllers, VKB controllers are not MobiFlight [boards](/boards/), and will therefore not appear in the **Modules** tab of the **Settings** dialog. Their [inputs](/game-controllers/configuring-input/) are automatically available in the MobiFlight configuration dialog.
+
+LED [outputs](/game-controllers/configuring-output/) are supported for VKB controllers with available controller definitions.
+
+> [!NOTE]
+> Support for LEDs requires that your VKB controllers are running firmware version 2.08.5 or newer.
+
+Controllers with definitions available will also provide friendly names for inputs. Due to the modular nature of VKB controllers, it is not possible to include definition files for every possible controller configuration. If your controller configuration does not have an included definition file, tools and guides are available to create your own.
+
+> [!NOTE]
+> The included definitions for STECS throttles are designed for the button module combinations that come out of the box on a STECS Mk1. Otherwise, buttons on the right grip, STEM and any add-on modules may be mislabeled.  
+> For STECS Mk2 throttles, {{< a href="MTGR_Mk2.zip" download="MTGR_Mk2" >}}alternative definition files{{< /a >}} are available. Extract the file into the `Joysticks` folder of your MobiFlight installation, e.g. into `%LOCALAPPDATA%\MobiFlight\MobiFlight Connector\Joysticks`.  
+> For custom button module combinations, a new definition file must be created.
+
+The rotary encoder functionality can be greatly enhanced if the device is properly configured in VKBDevCfg to allow more responsive behavior.
diff --git a/content/game-controllers/vkb/create-definition/index.md b/content/game-controllers/vkb/create-definition/index.md
new file mode 100644
index 00000000..47d4d010
--- /dev/null
+++ b/content/game-controllers/vkb/create-definition/index.md
@@ -0,0 +1,26 @@
+---
+title: Create definition file
+description: Creating a definition file for new devices.
+prev: /game-controllers/vkb/encoder-support
+weight: 20
+---
+Not every combination of VKB modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/MobiFlight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to adhere to the following order to get good defaults for button and LED numbers:
+
+| Module | Notes                                                                                                                                     |
+| ------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| Base   | Including modules listed in the base description.                                                                                         |
+| Grips  | Starting from left to right for throttle grips. {{< br >}}  Not including the WW2 throttle grip, which is part of its associated THQ.     |
+| SEMs   | Including both standard SEM and vertical SEM-V units.                                                                                     |
+| THQs   | Including both standard THQ and vertical THQ-V modules. {{< br >}} If one of the THQs has a WW2 throttle grip, choose that one last.      |
+| STEM   | Only one module per device.                                                                                                               |
+| FSM.GA |                                                                                                                                           |
+
+It is best to verify button numbers in a button tester application.
+
+Once the program has completed, a file ending in `.joystick.json` will be available in the `output` folder. Copy this file to the `Joysticks` folder in your MobiFlight installation directory, e.g. `%LOCALAPPDATA%\MobiFlight\MobiFlight Connector\Joysticks`.
+
+If you are running a heavily customized VKBDevCfg configuration, it may be necessary to make manual adjustments to the file to ensure button labels are accurate.
diff --git a/content/game-controllers/vkb/encoder-support/_index.md b/content/game-controllers/vkb/encoder-support/_index.md
new file mode 100644
index 00000000..de981dc5
--- /dev/null
+++ b/content/game-controllers/vkb/encoder-support/_index.md
@@ -0,0 +1,47 @@
+---
+title: Encoder support
+description: How to enable advanced encoder support.
+prev: /game-controllers/vkb/
+next: /game-controllers/vkb/create-definition/
+weight: 10
+---
+While encoders are always available as joystick buttons out of the box, this indirect form of support suffers from limitations: Since each turn of the knob has to be turned into a button push and release, delays are incurred as the button pressing action catches up to the encoder position.
+
+To circumvent this limit, MobiFlight can directly read the encoder position from the controller. For this to work, the controller must be configured in VKBDevCfg to make these positions available:
+
+{{% steps %}}
+
+### Close MobiFlight
+
+Close any running instance of MobiFlight Connector. Otherwise, you will need to restart it after changing the connected game controllers.
+
+### Verify controller firmware
+
+Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.
+
+### Access configuration in VKBDevCfg
+
+In [VKBDevCfg](https://www.vkbcontrollers.com/pages/downloads), select your device, then open the **Global** tab at the bottom and the **External** tab at the top:
+
+{{< screenshot image="vkb_tab.png" title="Location of the Global and External tabs." >}}
+
+### Edit configuration
+
+Make sure the checkboxes **Virtual BUS over USB** and **External device encoders virtualization** are both checked. Then write the configuration to the device by pressing the **Set** button in the **Action** bar.
+
+{{< screenshot image="vkb_usb.png" title="Boxes to check." >}}
+
+After you press **Set**, your device will disconnect and immediately reconnect to the PC.
+
+### Verify that encoders appear
+
+Start MobiFlight Connector and create an input configuration.
+
+If your controller does not have a definition file (i.e. all buttons are listed as button numbers), the new encoder events will appear towards the end of the button list.
+
+If your controller has a definition file with outputs and friendly input names, the new encoder events will replace the buttons used for the encoder. Note that the original button events are still available with a **Legacy DirectInput** mark for compatibility reasons.
+
+{{% /steps %}}
+
+> [!NOTE]
+> The **Scan for Input** function may latch onto the original button events. Make sure the correct encoder action is selected in the drop-down when creating input configurations.
diff --git a/content/game-controllers/vkb/encoder-support/screenshots/vkb_tab.png b/content/game-controllers/vkb/encoder-support/screenshots/vkb_tab.png
new file mode 100644
index 00000000..6e787c71
Binary files /dev/null and b/content/game-controllers/vkb/encoder-support/screenshots/vkb_tab.png differ
diff --git a/content/game-controllers/vkb/encoder-support/screenshots/vkb_usb.png b/content/game-controllers/vkb/encoder-support/screenshots/vkb_usb.png
new file mode 100644
index 00000000..2f814052
Binary files /dev/null and b/content/game-controllers/vkb/encoder-support/screenshots/vkb_usb.png differ
diff --git a/content/game-controllers/vkb/encoder-support/technical/index.md b/content/game-controllers/vkb/encoder-support/technical/index.md
new file mode 100644
index 00000000..b39d6b8e
--- /dev/null
+++ b/content/game-controllers/vkb/encoder-support/technical/index.md
@@ -0,0 +1,22 @@
+---
+title: Encoder technical details
+description: Technical details of VKB encoder integration.
+prev: /game-controllers/vkb/
+weight: 10
+---
+Each encoder detected on the controller is added as a pair of virtual buttons. To avoid conflict with standard game controller buttons, which are in the range from 1 to 128, the virtual encoder buttons are mapped to the range of 1000-1319.
+
+This number is based on the ID of the encoder, assigned automatically in ascending order from 0 to 31, and the direction the encoder is turned in.
+
+For example, for increasing the third encoder on a device (e.g. turning En1 on a STECS Standard clockwise), the button ID would look like this:
+
+| Digit | Meaning              | Details                  | Example |
+| ----- | -------------------- | ------------------------ | ------- |
+| 1     | Prefix               | Always 1                 | 1       |
+| 2     | Encoder ID 1st digit | 10s place                | 0       |
+| 3     | Encoder ID 2nd digit | 1s place                 | 2       |
+| 4     | Direction            | 0: Decrease, 5: Increase | 5       |
+
+The encoder would thus be treated as "Button 1025".
+
+The mapping between physical movement of the knob and increase/decrease directions is determined by the hardware.
diff --git a/layouts/shortcodes/br.html b/layouts/shortcodes/br.html
new file mode 100644
index 00000000..aa9afb2a
--- /dev/null
+++ b/layouts/shortcodes/br.html
@@ -0,0 +1 @@
+<br>
\ No newline at end of file


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 7**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md (1)</summary><blockquote>

`9-10`: **Refine phrasing for clarity and brevity.**  
- Change `MobiFlight is able to directly read the encoder position from the controller` → `MobiFlight can directly read the encoder position from the controller`.  
- Simplify `First of all, close any running instance of MobiFlight and ensure your controller firmware is updated to version 2.18.5 or newer.` → `Close any running instance of MobiFlight and ensure your controller firmware is updated to version 2.18.5 or newer.`

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary>

[style] ~9-~9: As a shorter alternative for ‘able to’, consider using “can”.
Context: ....  To circumvent this limit, MobiFlight is able to directly read the encoder position from...

(BE_ABLE_TO)

---

[style] ~10-~10: Often, this adverbial phrase is redundant. Consider using an alternative.
Context: ...Cfg to make these positions available.  First of all, close any running instance of MobiFlig...

(FIRST_OF_ALL)

</details>

</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between dca9bf17e3b14eb1c886081346ff264ae677b895 and 3d5f4150ea1e7478498d80b8465b0343548e962d.

</details>

<details>
<summary>⛔ Files ignored due to path filters (3)</summary>

* `content/game-controllers/vkb/MTGR_Mk2.zip` is excluded by `!**/*.zip`
* `content/game-controllers/vkb/encoder-support/screenshots/vkb_tab.png` is excluded by `!**/*.png`
* `content/game-controllers/vkb/encoder-support/screenshots/vkb_usb.png` is excluded by `!**/*.png`

</details>

<details>
<summary>📒 Files selected for processing (4)</summary>

* `content/game-controllers/vkb/_index.md` (1 hunks)
* `content/game-controllers/vkb/create-definition/index.md` (1 hunks)
* `content/game-controllers/vkb/encoder-support/_index.md` (1 hunks)
* `content/game-controllers/vkb/encoder-support/technical.md` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (2)</summary>

<details>
<summary>`**/*.*`: Review all files and ensure that:
  - File and directory names must:
    - Be in lowercase
    - Use dashes (-) instead of spaces
    - Use dashes to separate numbers fro...</summary>

> `**/*.*`: Review all files and ensure that:
>   - File and directory names must:
>     - Be in lowercase
>     - Use dashes (-) instead of spaces
>     - Use dashes to separate numbers from words (e.g., page-2-content.md)
>     - Avoid special characters except dashes
>     - Use lowercase file extensions
> 

- `content/game-controllers/vkb/encoder-support/technical.md`
- `content/game-controllers/vkb/encoder-support/_index.md`
- `content/game-controllers/vkb/_index.md`
- `content/game-controllers/vkb/create-definition/index.md`

</details>
<details>
<summary>`content/**/*.md`: Review all markdown files and ensure that:
  - Pinout diagrams are inserted using the pinout shortcode.
  - All lists items that are sentences have a period at t...</summary>

> `content/**/*.md`: Review all markdown files and ensure that:
>   - Pinout diagrams are inserted using the pinout shortcode.
>   - All lists items that are sentences have a period at the end.
>   - Spelling and grammar is correct.
>   - Additional valid words are listed in the workspace settings file in the cSpell.words property.
>   - Voltages that aren't whole numbers should be described with periods, e.g. 3.3V instead of 3V3.
>   - All leaf pages should be in their own folder as a page bundle.
>   - Device and board intro pages should always have an opening descriptive paragraph before a card with an image of the device or board.
>   - Do not use {{< callout >}} shortcodes.
>   - "Arduino Pro Micro" and "SparkFun Pro Micro" should always be called "Pro Micro" instead.
>   - "Arduino Mega 2560 Pro Mini" should always be called "Mega 2560 Pro Mini" instead.
>   - References to click or select an item in the UI should have the UI item in bold.
>   - Screenshots must use the screenshot shortcode instead of Markdown image and must have a title that ends in a period.
>   - Pinout diagrams must use the pinout shortcode instead of Markdown image.
>   - Schematics must use the schematic shortcode instead of Markdown image.
>   - Board and device images must be placed in card shortcodes instead of Markdown image.
>   - Headings are in sentence case.
>   - Links to other documentation pages on the site are absolute, not relative.
>   - Table headers are in sentence case.
>   - Ohms should use the Ω symbol.
>   - Page descriptions are in sentence case and must end in a period.
>   - Page titles are in sentence case and do not end in a period.
>   - uF should use the µ symbol (µF).
>   - All files under the boards and devices folders should have an ogimage specified in the front matter.
>   - The "WINWING PFP 3N" and "WINWING MCDU" should always use the more generic "WINWING CDU" instead.
> 

- `content/game-controllers/vkb/encoder-support/technical.md`
- `content/game-controllers/vkb/encoder-support/_index.md`
- `content/game-controllers/vkb/_index.md`
- `content/game-controllers/vkb/create-definition/index.md`

</details>

</details><details>
<summary>🪛 LanguageTool</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

[style] ~9-~9: As a shorter alternative for ‘able to’, consider using “can”.
Context: ....  To circumvent this limit, MobiFlight is able to directly read the encoder position from...

(BE_ABLE_TO)

---

[style] ~10-~10: Often, this adverbial phrase is redundant. Consider using an alternative.
Context: ...Cfg to make these positions available.  First of all, close any running instance of MobiFlig...

(FIRST_OF_ALL)

</details>

</details>
<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md</summary>

23-23: Files should end with a single newline character
null

(MD047, single-trailing-newline)

</details>

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md</summary>

[failure] 23-23: Files should end with a single newline character
content/game-controllers/vkb/create-definition/index.md:23:161 MD047/single-trailing-newline Files should end with a single newline character https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md

</details>

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md</summary>

[error] 23-23: MD047/single-trailing-newline: Files should end with a single newline character. See https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (1)</summary>

* GitHub Check: Cloudflare Pages

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>content/game-controllers/vkb/_index.md (1)</summary>

`1-24`: **Looks good.**  
This page follows the naming, link, and formatting guidelines.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T11:06:47Z
user: login: cbrauers
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-02T13:04:30Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T13:05:23Z
user: login: cbrauers
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-02T13:05:49Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T13:06:28Z
user: login: cbrauers
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-02T13:09:12Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T13:09:44Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 0**

<details>
<summary>🧹 Nitpick comments (4)</summary><blockquote>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md (4)</summary><blockquote>

`9-10`: **Correct project name casing.**  
The tool name should match the official MobiFlight branding (capital “F”):  

```diff
- the [VKB/Mobiflight Definer tool]
+ the [VKB/MobiFlight Definer tool]
```

---

`11-12`: **Remove redundant phrasing.**  
The expression “follow the following order” is repetitive. Consider:

```diff
- it is generally recommended to follow the following order
+ it is generally recommended to use the following order
```

---

`16-16`: **Add missing article for grammar.**  
Include “the” before “WW2 throttle grip.”  

```diff
- Not including WW2 throttle grip, which is part of its associated THQ.
+ Not including the WW2 throttle grip, which is part of its associated THQ.
```

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 LanguageTool</summary>

[uncategorized] ~16-~16: You might be missing the article “the” here.
Context: ...rottle grips. {{< br >}}  Not including WW2 throttle grip, which is part of its ass...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

</details>

</details>

---

`27-27`: **Ensure file ends with a single trailing newline.**  
Add a newline at EOF to satisfy MD047 (single-trailing-newline).

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 2d686dafcf64b869d76b9b571e8ce8360c7e4841 and d9996fd885d2c64ab553c0c34c3e3c3ebb4ff66b.

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `content/game-controllers/vkb/create-definition/index.md` (1 hunks)
* `layouts/shortcodes/br.html` (1 hunks)

</details>

<details>
<summary>✅ Files skipped from review due to trivial changes (1)</summary>

* layouts/shortcodes/br.html

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (2)</summary>

<details>
<summary>`**/*.*`: Review all files and ensure that:
  - File and directory names must:
    - Be in lowercase
    - Use dashes (-) instead of spaces
    - Use dashes to separate numbers fro...</summary>

> `**/*.*`: Review all files and ensure that:
>   - File and directory names must:
>     - Be in lowercase
>     - Use dashes (-) instead of spaces
>     - Use dashes to separate numbers from words (e.g., page-2-content.md)
>     - Avoid special characters except dashes
>     - Use lowercase file extensions
> 

- `content/game-controllers/vkb/create-definition/index.md`

</details>
<details>
<summary>`content/**/*.md`: Review all markdown files and ensure that:
  - Pinout diagrams are inserted using the pinout shortcode.
  - All lists items that are sentences have a period at t...</summary>

> `content/**/*.md`: Review all markdown files and ensure that:
>   - Pinout diagrams are inserted using the pinout shortcode.
>   - All lists items that are sentences have a period at the end.
>   - Spelling and grammar is correct.
>   - Additional valid words are listed in the workspace settings file in the cSpell.words property.
>   - Voltages that aren't whole numbers should be described with periods, e.g. 3.3V instead of 3V3.
>   - All leaf pages should be in their own folder as a page bundle.
>   - Device and board intro pages should always have an opening descriptive paragraph before a card with an image of the device or board.
>   - Do not use {{< callout >}} shortcodes.
>   - "Arduino Pro Micro" and "SparkFun Pro Micro" should always be called "Pro Micro" instead.
>   - "Arduino Mega 2560 Pro Mini" should always be called "Mega 2560 Pro Mini" instead.
>   - References to click or select an item in the UI should have the UI item in bold.
>   - Screenshots must use the screenshot shortcode instead of Markdown image and must have a title that ends in a period.
>   - Pinout diagrams must use the pinout shortcode instead of Markdown image.
>   - Schematics must use the schematic shortcode instead of Markdown image.
>   - Board and device images must be placed in card shortcodes instead of Markdown image.
>   - Headings are in sentence case.
>   - Links to other documentation pages on the site are absolute, not relative.
>   - Table headers are in sentence case.
>   - Ohms should use the Ω symbol.
>   - Page descriptions are in sentence case and must end in a period.
>   - Page titles are in sentence case and do not end in a period.
>   - uF should use the µ symbol (µF).
>   - All files under the boards and devices folders should have an ogimage specified in the front matter.
>   - The "WINWING PFP 3N" and "WINWING MCDU" should always use the more generic "WINWING CDU" instead.
> 

- `content/game-controllers/vkb/create-definition/index.md`

</details>

</details><details>
<summary>🪛 LanguageTool</summary>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md</summary>

[uncategorized] ~16-~16: You might be missing the article “the” here.
Context: ...rottle grips. {{< br >}}  Not including WW2 throttle grip, which is part of its ass...

(AI_EN_LECTOR_MISSING_DETERMINER_THE)

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (1)</summary>

* GitHub Check: Cloudflare Pages

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>content/game-controllers/vkb/create-definition/index.md (1)</summary>

`1-6`: **Front matter validation.**  
Front matter meets all naming, title, and description guidelines (sentence-case title, description ends with a period, lowercase filename).

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T13:44:28Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 6346874fa86da64d5ade149627fa668ba98cdf2e and 3169d57f7db2be77cd0147223e190e627f9c3809.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `content/game-controllers/vkb/encoder-support/_index.md` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (2)</summary>

<details>
<summary>`**/*.*`: Review all files and ensure that:
  - File and directory names must:
    - Be in lowercase
    - Use dashes (-) instead of spaces
    - Use dashes to separate numbers fro...</summary>

> `**/*.*`: Review all files and ensure that:
>   - File and directory names must:
>     - Be in lowercase
>     - Use dashes (-) instead of spaces
>     - Use dashes to separate numbers from words (e.g., page-2-content.md)
>     - Avoid special characters except dashes
>     - Use lowercase file extensions
> 

- `content/game-controllers/vkb/encoder-support/_index.md`

</details>
<details>
<summary>`content/**/*.md`: Review all markdown files and ensure that:
  - Pinout diagrams are inserted using the pinout shortcode.
  - All lists items that are sentences have a period at t...</summary>

> `content/**/*.md`: Review all markdown files and ensure that:
>   - Pinout diagrams are inserted using the pinout shortcode.
>   - All lists items that are sentences have a period at the end.
>   - Spelling and grammar is correct.
>   - Additional valid words are listed in the workspace settings file in the cSpell.words property.
>   - Voltages that aren't whole numbers should be described with periods, e.g. 3.3V instead of 3V3.
>   - All leaf pages should be in their own folder as a page bundle.
>   - Device and board intro pages should always have an opening descriptive paragraph before a card with an image of the device or board.
>   - Do not use {{< callout >}} shortcodes.
>   - "Arduino Pro Micro" and "SparkFun Pro Micro" should always be called "Pro Micro" instead.
>   - "Arduino Mega 2560 Pro Mini" should always be called "Mega 2560 Pro Mini" instead.
>   - References to click or select an item in the UI should have the UI item in bold.
>   - Screenshots must use the screenshot shortcode instead of Markdown image and must have a title that ends in a period.
>   - Pinout diagrams must use the pinout shortcode instead of Markdown image.
>   - Schematics must use the schematic shortcode instead of Markdown image.
>   - Board and device images must be placed in card shortcodes instead of Markdown image.
>   - Headings are in sentence case.
>   - Links to other documentation pages on the site are absolute, not relative.
>   - Table headers are in sentence case.
>   - Ohms should use the Ω symbol.
>   - Page descriptions are in sentence case and must end in a period.
>   - Page titles are in sentence case and do not end in a period.
>   - uF should use the µ symbol (µF).
>   - All files under the boards and devices folders should have an ogimage specified in the front matter.
>   - The "WINWING PFP 3N" and "WINWING MCDU" should always use the more generic "WINWING CDU" instead.
> 

- `content/game-controllers/vkb/encoder-support/_index.md`

</details>

</details><details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

18-18: Trailing punctuation in heading
Punctuation: '.'

(MD026, no-trailing-punctuation)

</details>

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

[failure] 18-18: Trailing punctuation in heading
content/game-controllers/vkb/encoder-support/_index.md:18:31 MD026/no-trailing-punctuation Trailing punctuation in heading [Punctuation: '.'] https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md

</details>

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

[error] 18-18: markdownlint MD026/no-trailing-punctuation: Trailing punctuation in heading [Punctuation: '.']

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (1)</summary>

* GitHub Check: Cloudflare Pages

</details>

<details>
<summary>🔇 Additional comments (7)</summary><blockquote>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md (7)</summary>

`1-7`: **Front matter validation.**  
The title is in sentence case and does not end with a period, the description ends with a period as required, and navigation links (`prev`/`next`) are absolute.

---

`8-12`: **Introduction clarity.**  
The opening paragraph clearly explains the limitations of default encoder support and smoothly transitions to the configuration steps.

---

`14-17`: **Step “Close MobiFlight” is well formatted.**  
Heading uses sentence case without trailing punctuation and the instruction is concise.

---

`22-27`: **Screenshot shortcode usage is correct.**  
The “Access configuration in VKBDevCfg” step uses the `screenshot` shortcode and each title ends with a period.

---

`28-33`: **Edit configuration instructions are accurate.**  
Checkbox names are bolded, the call to action is clear, and the associated screenshot title ends with a period.

---

`36-43`: **Verification step is clear.**  
The “Verify that encoders appear” instructions are thorough, use sentence-case headings, and maintain consistent formatting.

---

`46-47`: **Note block is properly formatted.**  
The admonition highlights the Scan for Input caveat and follows site conventions.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T14:07:23Z
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>📜 Review details</summary>

**Configuration used: .coderabbit.yml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3169d57f7db2be77cd0147223e190e627f9c3809 and 6ffc498c495a1d107231bb062c298fc5f9dcc3a2.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `content/game-controllers/vkb/encoder-support/_index.md` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>📓 Path-based instructions (2)</summary>

<details>
<summary>`**/*.*`: Review all files and ensure that:
  - File and directory names must:
    - Be in lowercase
    - Use dashes (-) instead of spaces
    - Use dashes to separate numbers fro...</summary>

> `**/*.*`: Review all files and ensure that:
>   - File and directory names must:
>     - Be in lowercase
>     - Use dashes (-) instead of spaces
>     - Use dashes to separate numbers from words (e.g., page-2-content.md)
>     - Avoid special characters except dashes
>     - Use lowercase file extensions
> 

- `content/game-controllers/vkb/encoder-support/_index.md`

</details>
<details>
<summary>`content/**/*.md`: Review all markdown files and ensure that:
  - Pinout diagrams are inserted using the pinout shortcode.
  - All lists items that are sentences have a period at t...</summary>

> `content/**/*.md`: Review all markdown files and ensure that:
>   - Pinout diagrams are inserted using the pinout shortcode.
>   - All lists items that are sentences have a period at the end.
>   - Spelling and grammar is correct.
>   - Additional valid words are listed in the workspace settings file in the cSpell.words property.
>   - Voltages that aren't whole numbers should be described with periods, e.g. 3.3V instead of 3V3.
>   - All leaf pages should be in their own folder as a page bundle.
>   - Device and board intro pages should always have an opening descriptive paragraph before a card with an image of the device or board.
>   - Do not use {{< callout >}} shortcodes.
>   - "Arduino Pro Micro" and "SparkFun Pro Micro" should always be called "Pro Micro" instead.
>   - "Arduino Mega 2560 Pro Mini" should always be called "Mega 2560 Pro Mini" instead.
>   - References to click or select an item in the UI should have the UI item in bold.
>   - Screenshots must use the screenshot shortcode instead of Markdown image and must have a title that ends in a period.
>   - Pinout diagrams must use the pinout shortcode instead of Markdown image.
>   - Schematics must use the schematic shortcode instead of Markdown image.
>   - Board and device images must be placed in card shortcodes instead of Markdown image.
>   - Headings are in sentence case.
>   - Links to other documentation pages on the site are absolute, not relative.
>   - Table headers are in sentence case.
>   - Ohms should use the Ω symbol.
>   - Page descriptions are in sentence case and must end in a period.
>   - Page titles are in sentence case and do not end in a period.
>   - uF should use the µ symbol (µF).
>   - All files under the boards and devices folders should have an ogimage specified in the front matter.
>   - The "WINWING PFP 3N" and "WINWING MCDU" should always use the more generic "WINWING CDU" instead.
> 

- `content/game-controllers/vkb/encoder-support/_index.md`

</details>

</details><details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

21-21: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)

</details>

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

[failure] 21-21: Headings should be surrounded by blank lines
content/game-controllers/vkb/encoder-support/_index.md:21 MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "### Access configuration in VKBDevCfg"] https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md

</details>

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

<details>
<summary>content/game-controllers/vkb/encoder-support/_index.md</summary>

[error] 21-21: markdownlint MD022: Headings should be surrounded by blank lines. Found no blank line above heading '### Access configuration in VKBDevCfg'.

</details>

</details>

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (1)</summary>

* GitHub Check: Cloudflare Pages

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T14:17:20Z
user: login: neilenns
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-02T14:52:50Z

Review comments:
diff_hunk: @@ -0,0 +1,22 @@
+---
+title: Encoder Technical Details
+description: Technical details of VKB encoder integration
+prev: /game-controllers/vkb/
+weight: 10
+---
path: content/game-controllers/vkb/encoder-support/technical.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Convert leaf page to page bundle and correct front matter.**  
- Rename `technical.md` into an `index.md` inside a new `technical` folder to satisfy the leaf page bundle convention.  
- Adjust `title` to sentence case: change `Encoder Technical Details` → `Encoder technical details`.  
- Ensure `description` ends with a period: add `.` to `Technical details of VKB encoder integration.`

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-02T11:06:46Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,25 @@
+---
+title: Encoder Support
+description: How to enable advanced encoder support
+prev: /game-controllers/vkb/
path: content/game-controllers/vkb/encoder-support/_index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Enforce sentence case title and period-terminated description.**  
- Change `title: Encoder Support` → `title: Encoder support`.  
- Append a period to the end of `description: How to enable advanced encoder support` → `How to enable advanced encoder support.`

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2d686da
created_at: 2025-05-02T11:06:46Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,25 @@
+---
+title: Encoder Support
+description: How to enable advanced encoder support
+prev: /game-controllers/vkb/
+weight: 10
+---
+While encoders are always available as joystick buttons out of the box, this indirect form of support suffers from limitations: Since each turn of the knob has to be turned into a button push and release, delays are incurred as the button pressing action catches up to the encoder position.
+
+To circumvent this limit, MobiFlight is able to directly read the encoder position from the controller. For this to work, the controller must be configured in VKBDevCfg to make these positions available.
+
+First of all, close any running instance of MobiFlight and ensure your controller firmware is updated to version 2.18.5 or newer.
+
+In VKBDevCfg, select your device, then open the **Global** tab at the bottom and the **External** tab at the top:
+
+{{< screenshot image="vkb_tab.png" title="Location of the Global and External tabs" >}}
path: content/game-controllers/vkb/encoder-support/_index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Ensure screenshot titles end with a period.**  
```diff
- {{< screenshot image="vkb_tab.png" title="Location of the Global and External tabs" >}}
+ {{< screenshot image="vkb_tab.png" title="Location of the Global and External tabs." >}}

- {{< screenshot image="vkb_usb.png" title="Boxes to check" >}}
+ {{< screenshot image="vkb_usb.png" title="Boxes to check." >}}
```  



Also applies to: 19-19

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2d686da
created_at: 2025-05-02T11:06:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Adjust front matter to comply with guidelines.**  
- Change `title: Create Definition File` → `title: Create definition file`.  
- Ensure `description` ends with a period: add `.` to `Creating a definition file for new devices.`

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2d686da
created_at: 2025-05-02T11:06:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
+It is best to verify button numbers in a button tester application.
+
+Once the program has completed, a file ending in `.joystick.json` will be available in the `output` folder. Copy this file to the `Joysticks` folder in your MobiFlight installation directory, e.g. `%LOCALAPPDATA%\MobiFlight\MobiFlight Connector\Joysticks`.
+
+If you are running a heavily customized VKBDevCfg configuration, it may be necessary to make manual adjustments to the file to ensure button labels are accurate.
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Add missing trailing newline.**  
Ensure the file ends with a single newline to satisfy MD047.

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

23-23: Files should end with a single newline character
null

(MD047, single-trailing-newline)

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

[failure] 23-23: Files should end with a single newline character
content/game-controllers/vkb/create-definition/index.md:23:161 MD047/single-trailing-newline Files should end with a single newline character https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

[error] 23-23: MD047/single-trailing-newline: Files should end with a single newline character. See https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md047.md

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2d686da
created_at: 2025-05-02T11:06:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Correct acronym casing.**  
Change `VKb` → `VKB` for consistency.

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 2d686da
created_at: 2025-05-02T11:06:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**Ensure list items end with periods.**  
Add a period at the end of each bullet:
```diff
- - Base, including everything listed in the description
+ - Base, including everything listed in the description.
- - Grips, starting from left to right for throttle grips
+ - Grips, starting from left to right for throttle grips.
- - SEMs, including SEM-Vs
+ - SEMs, including SEM-Vs.
- - THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+ - THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
- - STEM
+ - STEM.
- - FSM.GA
+ - FSM.GA.
```  



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
- Base, including everything listed in the description.
- Grips, starting from left to right for throttle grips.
- SEMs, including SEM-Vs.
- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
- STEM.
- FSM.GA.
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated reply by CodeRabbit -->

✅ Addressed in commit d9996fd

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-02T11:06:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,22 @@
+---
+title: Encoder Technical Details
+description: Technical details of VKB encoder integration
+prev: /game-controllers/vkb/
+weight: 10
+---
path: content/game-controllers/vkb/encoder-support/technical.md
user: login: cbrauers
body: Should be fixed now
created_at: 2025-05-02T13:04:30Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,22 @@
+---
+title: Encoder Technical Details
+description: Technical details of VKB encoder integration
+prev: /game-controllers/vkb/
+weight: 10
+---
path: content/game-controllers/vkb/encoder-support/technical.md
user: login: coderabbitai[bot]
body: <details>
<summary>🧩 Analysis chain</summary>

🏁 Script executed:
```
#!/bin/bash
# Check if the technical.md file still exists
if [ -f "content/game-controllers/vkb/encoder-support/technical.md" ]; then
  echo "technical.md file still exists"
  cat "content/game-controllers/vkb/encoder-support/technical.md"
else
  echo "technical.md file has been removed"
fi

# Check if the technical/index.md file exists
if [ -d "content/game-controllers/vkb/encoder-support/technical" ] && [ -f "content/game-controllers/vkb/encoder-support/technical/index.md" ]; then
  echo "technical/index.md file exists"
  cat "content/game-controllers/vkb/encoder-support/technical/index.md"
else
  echo "technical/index.md file does not exist"
fi
```

Length of output: 1697

---



</details>

@cbrauers Perfect! I've verified that all the changes have been implemented correctly:

1. The file has been converted to a page bundle with `index.md` inside a `technical` folder ✓
2. The title is now in sentence case as "Encoder technical details" ✓
3. The description now ends with a period ✓

The document structure now follows the guidelines perfectly. Thank you for making these changes!



(\_/) 
(•ᴗ•) 
/ >👍

---

<!-- This is an auto-generated comment: tweet message by coderabbit.ai -->

If you found this review helpful, would you consider giving us a shout-out on [X](https://twitter.com/intent/tweet?related=CodeRabbitAI&text=Refactor%20your%20docs%20like%20a%20pro!%20%F0%9F%9B%A0%EF%B8%8F%20Convert%20leaf%20pages%20to%20bundles%2C%20fix%20front%20matter%20casing%2C%20and%20punctuation%20for%20cleaner%2C%20more%20consistent%20content%20structure.%20Try%20%40coderabbitai%20for%20smart%20code%20reviews!&url=https%3A%2F%2Fgithub.com%2Fneilenns-projects%2Fmobiflight-docs%2Fpull%2F313%23discussion_r2071456247)?

Thank you for using CodeRabbit!

<!-- end of auto-generated comment: tweet message by coderabbit.ai -->




<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer><details>
<summary>🧩 Analysis chain</summary>

🏁 Script executed:
```
#!/bin/bash
# Check if the technical.md file still exists
if [ -f "content/game-controllers/vkb/encoder-support/technical.md" ]; then
  echo "technical.md file still exists"
  cat "content/game-controllers/vkb/encoder-support/technical.md"
else
  echo "technical.md file has been removed"
fi

# Check if the technical/index.md file exists
if [ -d "content/game-controllers/vkb/encoder-support/technical" ] && [ -f "content/game-controllers/vkb/encoder-support/technical/index.md" ]; then
  echo "technical/index.md file exists"
  cat "content/game-controllers/vkb/encoder-support/technical/index.md"
else
  echo "technical/index.md file does not exist"
fi
```

Length of output: 1697

---



</details>

@cbrauers Perfect! I've verified that all the changes have been implemented correctly:

1. The file has been converted to a page bundle with `index.md` inside a `technical` folder ✓
2. The title is now in sentence case as "Encoder technical details" ✓
3. The description now ends with a period ✓

The document structure now follows the guidelines perfectly. Thank you for making these changes!



(\_/) 
(•ᴗ•) 
/ >👍

---

&lt;!-- This is an auto-generated comment: tweet message by coderabbit.ai --&gt;

If you found this review helpful, would you consider giving us a shout-out on [X](https://twitter.com/intent/tweet?related=CodeRabbitAI&text=Refactor%20your%20docs%20like%20a%20pro!%20%F0%9F%9B%A0%EF%B8%8F%20Convert%20leaf%20pages%20to%20bundles%2C%20fix%20front%20matter%20casing%2C%20and%20punctuation%20for%20cleaner%2C%20more%20consistent%20content%20structure.%20Try%20%40coderabbitai%20for%20smart%20code%20reviews!&url=https%3A%2F%2Fgithub.com%2Fneilenns-projects%2Fmobiflight-docs%2Fpull%2F313%23discussion_r2071456247)?

Thank you for using CodeRabbit!

&lt;!-- end of auto-generated comment: tweet message by coderabbit.ai --&gt;

</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-02T13:05:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
path: content/game-controllers/vkb/create-definition/index.md
user: login: cbrauers
body: Periods for the end of sentence-style bullet points is a nice idea, but they do not feel right for points that are just the device name. Might be better to replace with something else in that case.
created_at: 2025-05-02T13:05:49Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: @cbrauers You make a good point! The guideline about periods is intended for list items that are sentences. For device names like "STEM" and "FSM.GA", periods would indeed feel out of place.

Here's what I suggest:
1. Add periods to the more descriptive items (the first three bullets)
2. Keep the existing format for the pure device name items (STEM and FSM.GA)

This approach would maintain readability while still adhering to the guideline for sentence-like items. Would that work for you?

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: cbrauers
PR: neilenns-projects/mobiflight-docs#313
File: content/game-controllers/vkb/create-definition/index.md:0-0
Timestamp: 2025-05-02T13:06:27.461Z
Learning: When reviewing Markdown lists in the mobiflight-docs repository, add periods to list items that are sentences or descriptive phrases, but items that are just names (like device names "STEM" or "FSM.GA") don't require periods.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>




<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@cbrauers You make a good point! The guideline about periods is intended for list items that are sentences. For device names like "STEM" and "FSM.GA", periods would indeed feel out of place.

Here's what I suggest:
1. Add periods to the more descriptive items (the first three bullets)
2. Keep the existing format for the pure device name items (STEM and FSM.GA)

This approach would maintain readability while still adhering to the guideline for sentence-like items. Would that work for you?

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: cbrauers
PR: neilenns-projects/mobiflight-docs#313
File: content/game-controllers/vkb/create-definition/index.md:0-0
Timestamp: 2025-05-02T13:06:27.461Z
Learning: When reviewing Markdown lists in the mobiflight-docs repository, add periods to list items that are sentences or descriptive phrases, but items that are just names (like device names "STEM" or "FSM.GA") don't require periods.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>

</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-02T13:06:28Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
path: content/game-controllers/vkb/create-definition/index.md
user: login: cbrauers
body: That is the approach I went with, but that has the drawback of inconsistency. So I wonder if a different approach like a table might be more appropriate
created_at: 2025-05-02T13:09:12Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,23 @@
+---
+title: Create Definition File
+description: Creating a definition file for new devices
+weight: 20
+---
+Not every combination of VKb modules has a pre-made definition file available. To enable support for LED outputs and friendly names in such a configuration, it is necessary to create a new definition file.
+
+To help with the creation of such files, the [VKB/Mobiflight Definer tool](https://github.com/cbrauers/VKB-Mobiflight-Definer/releases/latest) can build a file for the default configuration of most controller combinations. Download, extract and run the latest release, then follow the on-screen prompts.
+
+To create the definition file for a device, first select the USB device in question. Continue by choosing the base (which may include some grips and modules to streamline the process, depending on the hardware). When selecting different add-on controllers, it is generally recommended to follow the following order to get good defaults for button and LED numbers:
+
+- Base, including everything listed in the description
+- Grips, starting from left to right for throttle grips
+- SEMs, including SEM-Vs
+- THQs, including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last.
+- STEM
+- FSM.GA
+
path: content/game-controllers/vkb/create-definition/index.md
user: login: coderabbitai[bot]
body: @cbrauers A table is an excellent solution to the inconsistency problem! It would clearly separate device names from their descriptions while providing better structure. Here's how it could look:

```markdown
| Order | Component | Notes |
|-------|-----------|-------|
| 1 | Base | Including everything listed in the description |
| 2 | Grips | Starting from left to right for throttle grips |
| 3 | SEMs | Including SEM-Vs |
| 4 | THQs | Including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last |
| 5 | STEM | |
| 6 | FSM.GA | |
```

This approach explicitly shows the recommended sequence, cleanly separates components from their descriptions, and eliminates the period inconsistency issue. Would you like me to help prepare a full patch with this table format?


<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer>@cbrauers A table is an excellent solution to the inconsistency problem! It would clearly separate device names from their descriptions while providing better structure. Here's how it could look:

```markdown
| Order | Component | Notes |
|-------|-----------|-------|
| 1 | Base | Including everything listed in the description |
| 2 | Grips | Starting from left to right for throttle grips |
| 3 | SEMs | Including SEM-Vs |
| 4 | THQs | Including THQ-Vs. If one of the THQs has a WW2 throttle grip, choose that one last |
| 5 | STEM | |
| 6 | FSM.GA | |
```

This approach explicitly shows the recommended sequence, cleanly separates components from their descriptions, and eliminates the period inconsistency issue. Would you like me to help prepare a full patch with this table format?</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-02T13:09:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,47 @@
+---
+title: Encoder support
+description: How to enable advanced encoder support.
+prev: /game-controllers/vkb/
+next: /game-controllers/vkb/create-definition/
+weight: 10
+---
+While encoders are always available as joystick buttons out of the box, this indirect form of support suffers from limitations: Since each turn of the knob has to be turned into a button push and release, delays are incurred as the button pressing action catches up to the encoder position.
+
+To circumvent this limit, MobiFlight can directly read the encoder position from the controller. For this to work, the controller must be configured in VKBDevCfg to make these positions available:
+
+{{% steps %}}
+
+### Close MobiFlight
+
+Close any running instance of MobiFlight Connector. Otherwise, you will need to restart it after changing the connected game controllers.
+
+### Verify controller firmware.
+
+Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.
+
path: content/game-controllers/vkb/encoder-support/_index.md
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Remove trailing punctuation in heading.**  
The heading on line 18 ends with a period, which violates MD026 (no trailing punctuation in headings).  

Apply this diff:
```diff
-### Verify controller firmware.
+### Verify controller firmware
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
### Verify controller firmware

Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

18-18: Trailing punctuation in heading
Punctuation: '.'

(MD026, no-trailing-punctuation)

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

[failure] 18-18: Trailing punctuation in heading
content/game-controllers/vkb/encoder-support/_index.md:18:31 MD026/no-trailing-punctuation Trailing punctuation in heading [Punctuation: '.'] https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md026.md

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

[error] 18-18: markdownlint MD026/no-trailing-punctuation: Trailing punctuation in heading [Punctuation: '.']

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-02T14:07:23Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,46 @@
+---
+title: Encoder support
+description: How to enable advanced encoder support.
+prev: /game-controllers/vkb/
+next: /game-controllers/vkb/create-definition/
+weight: 10
+---
+While encoders are always available as joystick buttons out of the box, this indirect form of support suffers from limitations: Since each turn of the knob has to be turned into a button push and release, delays are incurred as the button pressing action catches up to the encoder position.
+
+To circumvent this limit, MobiFlight can directly read the encoder position from the controller. For this to work, the controller must be configured in VKBDevCfg to make these positions available:
+
+{{% steps %}}
+
+### Close MobiFlight
+
+Close any running instance of MobiFlight Connector. Otherwise, you will need to restart it after changing the connected game controllers.
+
+### Verify controller firmware
+
+Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.
+### Access configuration in VKBDevCfg
path: content/game-controllers/vkb/encoder-support/_index.md
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Add missing blank line above heading.**

The heading “### Access configuration in VKBDevCfg” must be surrounded by blank lines to satisfy MD022 (headings should be surrounded by blank lines) and resolve the CI lint error:

```diff
 20 Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.
+21 
 21 ### Access configuration in VKBDevCfg
```



<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
Ensure your controller firmware is updated to version 2.18.5 or newer. If not, download zBootloader and the firmware files from the [VKB website](https://www.vkbcontrollers.com/pages/downloads) and follow VKB's guides to upgrade your controller.

### Access configuration in VKBDevCfg
`````

</details>

<!-- suggestion_end -->

<details>
<summary>🧰 Tools</summary>

<details>
<summary>🪛 markdownlint-cli2 (0.17.2)</summary>

21-21: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)

</details>
<details>
<summary>🪛 GitHub Check: Lint markdown</summary>

[failure] 21-21: Headings should be surrounded by blank lines
content/game-controllers/vkb/encoder-support/_index.md:21 MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "### Access configuration in VKBDevCfg"] https://github.com/DavidAnson/markdownlint/blob/v0.37.4/doc/md022.md

</details>
<details>
<summary>🪛 GitHub Actions: CI lint</summary>

[error] 21-21: markdownlint MD022: Headings should be surrounded by blank lines. Found no blank line above heading '### Access configuration in VKBDevCfg'.

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit -->

✅ Addressed in commit 7155d75
created_at: 2025-05-02T14:17:19Z
author_association: CONTRIBUTOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-02T11:03:44Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- This is an auto-generated comment: rate limited by coderabbit.ai -->

> [!WARNING]
> ## Rate limit exceeded
> 
> @cbrauers has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait **24 minutes and 25 seconds** before requesting another review.
> 
> <details>
> <summary>⌛ How to resolve this issue?</summary>
> 
> After the wait time has elapsed, a review can be triggered using the `@coderabbitai review` command as a PR comment. Alternatively, push new commits to this PR.
> 
> We recommend that you space out your commits to avoid hitting the rate limit.
> 
> </details>
> 
> 
> <details>
> <summary>🚦 How do rate limits work?</summary>
> 
> CodeRabbit enforces hourly rate limits for each developer per organization.
> 
> Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.
> 
> Please see our [FAQ](https://docs.coderabbit.ai/faq) for further information.
> 
> </details>
> 
> <details>
> <summary>📥 Commits</summary>
> 
> Reviewing files that changed from the base of the PR and between 6ffc498c495a1d107231bb062c298fc5f9dcc3a2 and 7155d75c11c7601e565e5e8ae1bfcfd9ffe4c68a.
> 
> </details>
> 
> <details>
> <summary>📒 Files selected for processing (1)</summary>
> 
> * `content/game-controllers/vkb/encoder-support/_index.md` (1 hunks)
> 
> </details>

<!-- end of auto-generated comment: rate limited by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

## Walkthrough

Several new documentation files were added under the game controllers section, specifically for VKB devices. These documents provide an overview of VKB controller support in MobiFlight, instructions for creating custom definition files, guidance on enabling advanced encoder support, and a technical explanation of encoder virtual button mapping. Additionally, a simple HTML shortcode for line breaks was introduced. The additions include both user-facing guides and technical details to assist with configuration, usage, and troubleshooting of VKB hardware within the MobiFlight environment.

## Changes

| Files/Paths                                                                 | Change Summary                                                                                           |
|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| content/game-controllers/vkb/_index.md                                      | Added documentation describing VKB controller support, usage, LED output, and notes for STECS throttles.|
| content/game-controllers/vkb/create-definition/index.md                     | Added guide for creating custom definition files for VKB device configurations.                          |
| content/game-controllers/vkb/encoder-support/_index.md                      | Added instructions for enabling and configuring advanced encoder support for VKB controllers.            |
| content/game-controllers/vkb/encoder-support/technical/index.md             | Added technical explanation of VKB encoder virtual button mapping and ID construction.                   |
| layouts/shortcodes/br.html                                                   | Added a simple shortcode providing an HTML line break element `<br>`.                                   |

## Suggested labels

`enhancement`

## Poem

> In the warren of docs, a new path appears,  
> VKB support hops in—let’s give three cheers!  
> Encoders spin swiftly, LEDs now glow,  
> Custom definitions let creativity flow.  
> With technical notes and guides so bright,  
> MobiFlight rabbits can configure all night!  
> 🐇✨

</details>

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=neilenns-projects/mobiflight-docs&utm_content=313):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: cloudflare-workers-and-pages[bot]
created_at: 2025-05-02T11:16:27Z
body: ## Deploying mobiflight-docs with &nbsp;<a href="https://pages.dev"><img alt="Cloudflare Pages" src="https://user-images.githubusercontent.com/23264/106598434-9e719e00-654f-11eb-9e59-6167043cfa01.png" width="16"></a> &nbsp;Cloudflare Pages

<table><tr><td><strong>Latest commit:</strong> </td><td>
<code>7155d75</code>
</td></tr>
<tr><td><strong>Status:</strong></td><td>&nbsp;✅&nbsp; Deploy successful!</td></tr>
<tr><td><strong>Preview URL:</strong></td><td>
<a href='https://ad443b5a.mobiflight-docs.pages.dev'>https://ad443b5a.mobiflight-docs.pages.dev</a>
</td></tr>
<tr><td><strong>Branch Preview URL:</strong></td><td>
<a href='https://vkb-guides---187.mobiflight-docs.pages.dev'>https://vkb-guides---187.mobiflight-docs.pages.dev</a>
</td></tr>
</table>

[View logs](https://dash.cloudflare.com/d5b4be66a9c27bb3dd15ecd59e42d83e/pages/view/mobiflight-docs/ad443b5a-6c58-4855-ac15-d33da613d0c1)

author_association: NONE