Companion Surface Developers' Guide
This section describes how to develop your own surface modules for Companion — the plugins that let Companion drive a physical control surface (buttons, encoders, displays and indicators) and receive input back from it.
Surface and connection modules share most of their tooling and workflow, so these pages focus on what is specific to surfaces and link back to the Connection Development section for the common setup, packaging and release steps. If you are building a module that controls a device or piece of software instead of a control surface, you want the Connection Development section.
The authoritative, autogenerated API reference lives at bitfocus.github.io/companion-surface-api. Existing modules make good real-world references — which one fits depends on how your surface connects (see Getting Started with Surfaces).
Below is an outline of the top-level pages and folders in this section.
Getting Started with Surfaces
- Prerequisites
- Shared setup — reuse the connection docs
- What's different for surfaces
- Reference material
Debugging Surfaces
> Surfaces: Basics
⠀⠀├── Overview
⠀⠀├── Lifecycle
⠀⠀├── Discovery
⠀⠀├── The Surface Instance
⠀⠀├── Layout
⠀⠀├── Rendering
⠀⠀├── Input & Variables
⠀⠀└── Locking & Pincode
> Surfaces: Advanced
⠀⠀├── Custom Discovery
⠀⠀└── Firmware Updates