Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
db30b5a
wip feat: autoTocPlugin enhancements
arikorn Feb 15, 2026
da075e1
wip chore: transfer module dev details, part 2
arikorn Feb 15, 2026
a1eba54
wip
Julusian Feb 15, 2026
fa50f77
feat: first draft of api 2.0 changelog
Julusian Feb 15, 2026
7cc0e11
wip actions
Julusian Feb 15, 2026
550caae
rename folder module-config/ to module-setup/
arikorn Feb 16, 2026
a2f0334
wip: add connecting.md, copyedit, update other files
arikorn Feb 16, 2026
91d9a06
wip: feedbacks
Julusian Feb 16, 2026
b8ae7a3
wip: checkAllFeedbacks
Julusian Feb 16, 2026
1ff5d29
finish basic and advanced "first-pass", plus
arikorn Feb 17, 2026
a0342ed
fix: build the website
arikorn Feb 17, 2026
4a4950c
some presets and variables
Julusian Feb 17, 2026
3386a6a
add remaining advanced pages
arikorn Feb 17, 2026
507a8c0
Merge remote-tracking branch 'personal/chore_transfer_main_module_doc…
arikorn Feb 18, 2026
989dded
fix typos, a bit of formatting, category names
arikorn Feb 18, 2026
c8d908e
wip: more and some formatting
Julusian Feb 18, 2026
7150d48
wip
Julusian Feb 18, 2026
6cc4206
wip
Julusian Feb 19, 2026
ae8fac6
fixes to custom css and autoTocPlugin
arikorn Feb 19, 2026
061df15
finish adding module-lifecycle files
arikorn Feb 19, 2026
d7157be
fix broken links, typos and other errors
arikorn Feb 19, 2026
7e23b80
fix remaining coderabbit suggestions
arikorn Feb 19, 2026
3286656
change all API v1.x header to H2 from H3
arikorn Feb 19, 2026
c75bf0b
fix missing utf-8 in readFileSync
arikorn Feb 19, 2026
565e344
Merge branch 'main' into chore_transfer_main_module_docs
arikorn Feb 19, 2026
61e6626
fix yarn format on merged v2.0.md
arikorn Feb 19, 2026
b0bae73
fix biggest rabbit issue I can deal with and...
arikorn Feb 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,17 @@
"semi": false,
"singleQuote": true,
"useTabs": true,
"tabWidth": 2,
"endOfLine": "lf",
"trailingComma": "es5",
"overrides": [
{
"files": ["*.md", "**/*.md", "*.mdx", "**/*.mdx"],
"options": {
"useTabs": false,
"tabWidth": 2
}
},
{
"files": ["*.yml", "*.yaml"],
"options": {
Expand Down
25 changes: 14 additions & 11 deletions for-developers/core-development/development-flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,10 @@ yarn dev:webui
This will launch the development version of the webui on a different port, typically [http://localhost:5173](http://localhost:5173)

:::important
You still need to have `yarn dev` (in the base folder) running separately for this to work

1. You still need to have `yarn dev` (in the base folder) running separately for this to work
2. `console.log()` code will display in the browser's console, not the command-line nor the Companion logs.

:::

:::tip
Expand All @@ -139,16 +142,16 @@ The webui is written in a combination of CSS/Sass (_.scss) and [React](https://r

```json
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Companion Webui (in Chrome)",
"url": "http://localhost:5173/",
"webRoot": "${workspaceFolder}/webui/src"
}
]
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Companion Webui (in Chrome)",
"url": "http://localhost:5173/",
"webRoot": "${workspaceFolder}/webui/src"
}
]
}
```

Expand Down
7 changes: 4 additions & 3 deletions for-developers/linking-to-companion.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ When integrating the badge on your website(s), you are free to host the image yo
Use this html to show the badge:

```
<a href="https://companion.free/?ref=wiki" target="_new"><img alt="Controllable by Companion" src="https://companion.free/img/companion-badge.png?ref=wiki"></a>
<a href="https://companion.free/?ref=bitfocus" target="_new"><img alt="Controllable by Companion" src="https://companion.free/img/companion-badge.png?ref=bitfocus"></a>
```

At the points where it says "ref=wiki" replace the word wiki with a reference to you or your product (only letters and numbers are allowed).
You can scale the image to fit in your website, as long as it is still readable, you may not not change its color, rotation, animate it or change it in any other way than scaling.
At the points where it says `"ref=bitfocus"` replace the word _bitfocus_ with a reference to you or your product (only letters and numbers are allowed).

You can scale the image to fit in your website, as long as it is still readable, you may not change its color, rotation, animate it or change it in any other way than scaling.

You are not allowed to:

Expand Down
5 changes: 3 additions & 2 deletions for-developers/module-development/_category_.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"label": "Companion Modules",
"label": "Module Development",
"position": 3,
"link": {
"type": "generated-index"
"type": "doc",
"id": "index"
}
}
6 changes: 3 additions & 3 deletions for-developers/module-development/api-changes/v1.10.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ title: API 1.10 (Companion 3.4+)
sidebar_position: -110
---

### Custom headlines for preset actions, feedbacks and steps {#preset-headlines}
## Custom headlines for preset actions, feedbacks and steps {#preset-headlines}

Presets can now define a `headline` value for each action, feedback and step, to be used as the user editable label for the action/feedback/step.

### Array support for merging multiple Bonjour queries {#bonjour-arrays}
## Array support for merging multiple Bonjour queries {#bonjour-arrays}

Inside your `companion/manifest.json`, each bonjour query defined can now be an array of queries, allowing two queries to be merged and used for one config field.

### Extended format support for feedback image buffers {#image-buffers}
## Extended format support for feedback image buffers {#image-buffers}

The `imageBuffer` property from advanced feedbacks can now be in more formats.

Expand Down
2 changes: 1 addition & 1 deletion for-developers/module-development/api-changes/v1.11.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ sidebar_position: -111
description: Node.js 22
---

### Updated to Node.js 22 runtime {#nodejs-22}
## Updated to Node.js 22 runtime {#nodejs-22}

Modules can now use node.js 22. We recommend all modules update when possible.
8 changes: 4 additions & 4 deletions for-developers/module-development/api-changes/v1.12.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sidebar_position: -112
description: Module permissions & isVisibleExpression
---

### Module permissions for enhanced security {#permissions}
## Module permissions for enhanced security {#permissions}

As of @companion-module/base v1.12, modules will be run with the nodejs permissions model enabled. This will allow us to inform users about the requirements of modules.

Expand All @@ -30,7 +30,7 @@ We would recommend planning for this in your module implementation.

:::

### Expression syntax support for `isVisible` on option fields {#isvisible-expressions}
## Expression syntax support for `isVisible` on option fields {#isvisible-expressions}

The `isVisible` functions that can be defined on option fields can now be written in the companion expression syntax through a new `isVisibleExpression` property.

Expand All @@ -40,11 +40,11 @@ We advise all uses to be updated to the new syntax, the old syntax is now deprec

:::

### Port-based filtering for Bonjour queries {#bonjour-port}
## Port-based filtering for Bonjour queries {#bonjour-port}

Bonjour queries in the module manifest can now specify a filter based on port number.

### New utility methods for escape character handling {#utility-methods}
## New utility methods for escape character handling {#utility-methods}

- parseEscapeCharacters
- substituteEscapeCharacters
10 changes: 5 additions & 5 deletions for-developers/module-development/api-changes/v1.13.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: API 1.13 (Companion 4.1+)
sidebar_position: -113
---

### Variables in `textinput` fields are now automatically parsed {#variable-parsing}
## Variables in `textinput` fields are now automatically parsed {#variable-parsing}

You no longer need to call `parseVariablesInString` in most circumstances. Any `textinput` field with `useVariables` defined will automatically have variables parsed before the action/feedback is called.

Expand All @@ -21,21 +21,21 @@ This is groundwork to better allow us to handle expressions for you, expect more

:::

### Value-type feedbacks (support for local variables) {#value-feedbacks}
## Value-type feedbacks (support for local variables) {#value-feedbacks}

As part of the new local variables support in Companion, you can now define `value` feedbacks. These are similar to `boolean` feedbacks, but you can return any type of value.

Within Companion, the user is able to store the value you provide into a local variable. They can also do this with `boolean` feedbacks, but `boolean` feedbacks can also be used directly in styling a button, a `value` feedback cannot

### `options:` improvements: new `description` field; multiline `textinput` field; "infinity" bounds for `number` fields {#new-options}
## `options:` improvements: new `description` field; multiline `textinput` field; "infinity" bounds for `number` fields {#new-options}

Every field can now specify a `description`. This is intended to be a some hint to the user that should always be visible, and gets shown below the input field.

The `textinput` field type can now request to be multiline. This will provide a single string, with `\n` characters where the user added a line break

The `number` field type can opt to show the defined min or max values as infinity. This is common behaviour for audio mixers, where they treat some low value such as -90 as -infinity

### `secret-text` field-type for Configs {#secrets}
## `secret-text` field-type for Configs {#secrets}

There is a new `secret-text` field type available to the connection config panel.

Expand All @@ -49,7 +49,7 @@ Make sure to not mix them, or it defeats the purpose of them being separate

:::

### subscribe/unsubscribe: More flexibility for Action/ less for feedbacks {#subscribe}
## subscribe/unsubscribe: More flexibility for Action/ less for feedbacks {#subscribe}

Actions can opt out of their unsubscribe method being called when the options change.

Expand Down
4 changes: 2 additions & 2 deletions for-developers/module-development/api-changes/v1.14.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sidebar_position: -114
description: Config layout changes, Connection processes now include the label
---

### Automated layout for Config parameters {#config-layout}
## Automated layout for Config parameters {#config-layout}

The connection config panel allowed modules to customise the layout of input fields. This was not possible elsewhere in Companion, and is not consistent with elsewhere within the panel where fields are in the simplified layout.

Expand All @@ -26,6 +26,6 @@ Let us know if there is extra configurability that you need, we are open to rest

See the [PR](https://github.com/bitfocus/companion/pull/3569) for more examples on the impact.

### Connection processes now include the label (name) of the connection {#connection-process-name}
## Connection processes now include the label (name) of the connection {#connection-process-name}

To improve the developer experience, when looking at each process in task manager or activity monitor, each process is now labelled with the label of the connection.
2 changes: 1 addition & 1 deletion for-developers/module-development/api-changes/v1.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: API 1.5 (Companion 3.1+)
sidebar_position: -105
---

### Automatic invert property for boolean feedbacks {#feedback-invert}
## Automatic invert property for boolean feedbacks {#feedback-invert}

Boolean feedbacks now automatically get an 'inverted' property added by Companion.

Expand Down
4 changes: 2 additions & 2 deletions for-developers/module-development/api-changes/v1.7.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ title: API 1.7 (Companion 3.2+)
sidebar_position: -107
---

### Bonjour/MDNS device discovery config field {#bonjour-discovery}
## Bonjour/MDNS device discovery config field {#bonjour-discovery}

Many devices use Bonjour or MDNS for discovery.

There is a new `bonjour-device` config field type that you can use to easily perform this discovery for your users as they open the configuration panel.

### Hex color format and alpha channel support {#color-picker}
## Hex color format and alpha channel support {#color-picker}

The `color` input field type now supports providing colors as `#000000` format hex strings, and can have alpha support enabled
6 changes: 3 additions & 3 deletions for-developers/module-development/api-changes/v1.8.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ title: API 1.8 (Companion 3.3+)
sidebar_position: -108
---

### Text preset type for organizing presets with headings {#text-presets}
## Text preset type for organizing presets with headings {#text-presets}

A new 'text' preset type has been added, to allow you to put some headings and blocks of text into the presets panel.

These will also split the presets into chunks around them, allowing you to organise presets better.

### Support for button-scoped local variables {#local-variables}
## Support for button-scoped local variables {#local-variables}

:::tip

Expand All @@ -24,7 +24,7 @@ Due to the way the `parseVariablesInString` method works, Companion often doesn'
In order to support these, in your action/feedback callback, there is a second `context` parameter which holds an alternate `parseVariablesInString` implementation. This implementation is specific to that callback, so Companion knows what control it belongs to, and can handle the variables.
Additionally, you can indicate that you are doing this and support these variables by setting the `useVariables` property to an object like `{ local: true }` to indicate this support. This allows us to show a hint to the user about this support, and suggest them whilst they type.

### Shared UDP port listener for devices with hardcoded ports {#shared-udp}
## Shared UDP port listener for devices with hardcoded ports {#shared-udp}

A few devices have been found which are not cooperative when it comes to control, and expect to send all messages to a hardcoded UDP port.
This makes it hard to support these, as by default only one connection can listen on a port at a time.
Expand Down
76 changes: 38 additions & 38 deletions for-developers/module-development/api-changes/v2.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ If you don't already, we also recommend defining the `$schema` property to give

```json
{
"$schema": "../node_modules/@companion-module/base/assets/manifest.schema.json",
"type": "connection",
"id": "your-module-name"
"$schema": "../node_modules/@companion-module/base/assets/manifest.schema.json",
"type": "connection",
"id": "your-module-name"
}
```

Expand Down Expand Up @@ -301,20 +301,20 @@ The `structure` array describes how to present these presets in the UI. For exam

```js
const structure = [
{
id: 'a',
name: 'Main A',
// optional description
definitions: [
{
id: 'b',
type: 'simple',
name: 'Output 1',
// optional description
presets: ['something', 'another'],
},
],
},
{
id: 'a',
name: 'Main A',
// optional description
definitions: [
{
id: 'b',
type: 'simple',
name: 'Output 1',
// optional description
presets: ['something', 'another'],
},
],
},
]
```

Expand Down Expand Up @@ -421,19 +421,19 @@ If no type is specified, the default is:

```ts
export interface InstanceTypes {
config: JsonObject
secrets: JsonObject | undefined
actions: Record<string, CompanionActionSchema<CompanionOptionValues>>
feedbacks: Record<string, CompanionFeedbackSchema<CompanionOptionValues>>
variables: CompanionVariableValues
config: JsonObject
secrets: JsonObject | undefined
actions: Record<string, CompanionActionSchema<CompanionOptionValues>>
feedbacks: Record<string, CompanionFeedbackSchema<CompanionOptionValues>>
variables: CompanionVariableValues
}
```

In your code you can extend this interface to get the same behaviour as before:

```ts
export interface MyTypes extends InstanceTypes {
config: MyConfig
config: MyConfig
}
```

Expand All @@ -452,20 +452,20 @@ For example:

```ts
const act: CompanionActionDefinition<{ num: number }> = {
name: 'My First Action',
options: [
{
id: 'num',
type: 'number',
label: 'Test',
default: 5,
min: 0,
max: 100,
},
],
callback: async (event) => {
console.log('Hello world!', event.options.num)
},
name: 'My First Action',
options: [
{
id: 'num',
type: 'number',
label: 'Test',
default: 5,
min: 0,
max: 100,
},
],
callback: async (event) => {
console.log('Hello world!', event.options.num)
},
}
```

Expand Down Expand Up @@ -509,7 +509,7 @@ In very old versions of Companion, it was expected that modules should call `thi

Many versions back, it became possible to supply the types of feedbacks as an argument, to allow for only rechecking a subset of the feedbacks upon each call.

Due to this dual behaviour, it is very easy for a module to call `this.checkFeedbacks()` without realising it was bad practise, especially with all the existing code showing exactly that.
Due to this dual behaviour, it is very easy for a module to call `this.checkFeedbacks()` without realising it was bad practice, especially with all the existing code showing exactly that.

To clarify the intended usage, this older behaviour has been removed. With a new `this.checkAllFeedbacks()` method being added instead.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"label": "Connections: Advanced",
"position": 17,
"link": {
"type": "doc",
"id": "index"
},
"customProps": {
"description": "Advanced topics for programming a connection module."
}
}
Loading